检查文件是不是存在并提供指向它的链接 php

Posted

技术标签:

【中文标题】检查文件是不是存在并提供指向它的链接 php【英文标题】:check if files exists and provides a link to it php检查文件是否存在并提供指向它的链接 php 【发布时间】:2017-05-16 07:21:41 【问题描述】:

我想检查一个目录是否包含特定文件(任何类型、图像、pdf 等)。如果它包含该文件,我想提供该文件的下载链接,否则打印"not exist"。不幸的是,我的代码一直在打印not exist,即使该文件存在于目录中。这是我的代码:

                <td>  <?php

if (file_exists('plans/'.$RID)) 
  echo"<a href='plans/$RID'>Plan</a>";
 else 
    echo "not exists";

?>  </td>

这是另一个我也试过但不起作用的代码:

<td>  <?php
    $plan= 'plans/'.$RID;
    if (file_exists($plan)) 
      echo"<a href='plans/$RID'>Plan</a>";
     else 
        echo "not exists";
    
    ?>  </td>

【问题讨论】:

将绝对路径传递给file_exists 绝对路径是什么意思 类似PROJECT_ROOT . "/plans/$RID" (/path/to/plans/1234) 可能是工作目录问题。使用 if (file_exists('../plans/'.$RID)) 我添加了绝对路径,但它仅在我指定文件扩展名时才有效(例如 if (file_exists('../plans/'.$RID.'.jpg')))。问题是我不想指定扩展名,因为文件类型不同。我只想要名称为 $RID 的文件,无论其扩展名是什么 【参考方案1】:

提供绝对路径作为函数的参数:

如果您的脚本路径是计划目录的父目录,则参数可以是 __DIR__ . '/plans' 例如。

edit :要捕获具有某些扩展名的文件,您可以创建一个包含允许扩展名的数组。

<td><?php
$extensionsAllowed = ['jpg','pdf','png']; //complete it
foreach ($extensionsAllowed as $extension)    
    if (file_exists( __DIR__ . 'plans/'.$RID.'.'.$extension)) 
      echo '<a href="plans/'.$RID.'.'.$extension.'" download>Plan</a>';
     else 
      echo "not exists";
    
?>  </td>

【讨论】:

我添加了绝对路径,但它只有在我指定文件扩展名时才有效(例如 if (file_exists(' DIR . 'plans/'.$RID.'.jpg' )))。问题是我不想指定扩展名,因为文件类型不同。我只想要名称为 $RID 的文件,无论其扩展名是什么 @user2148116 我添加了一些关于扩展的信息 谢谢!但如果是这些扩展呢?这个想法是扩展是什么 接受任何扩展都是非常危险的。如果用户要求一个空白文件,附加什么?您的脚本可能会返回您的隐藏文件,例如 .htaccess 如果您想接受任何扩展名,您必须检索计划目录中的所有文件,并将它们的名称与用户询问的文件进行比较,而无需扩展名。但这显然是危险的。如果他问../../../etc/.htpasswd../../../config 会发生什么?您的脚本可能会返回数据来破解您的服务器。提供大量可用的扩展是不那么危险的。你提供什么样的文件?【参考方案2】:

如果计划是您拥有用于检查文件的 php 文件的目录,则无需将计划放在文件名旁边的 file_exists 中

<td>  
<?php

if (file_exists($RID)) 
      echo"<a href='plans/$RID'>Plan</a>";
     else 
        echo "not exists";
    
?>

</td>

否则你可以这样做,

<?php

$Path = $_SERVER['DOCUMENT_ROOT'].'/plans/'.$RID;

if (file_exists($Path)) 
      echo"<a href='plans/$RID'>Plan</a>";
     else 
        echo "not exists";
    
?>

</td>

【讨论】:

【参考方案3】:

改变

<td>  
<?php

if (file_exists('plans/'.$RID)) 
  echo"<a href='plans/$RID'>Plan</a>";
 else 
    echo "not exists";

?>  
</td>

<td>  
<?php

if (!file_exists('plans/'.$RID)) 
   mkdir('plans/'.$RID, 0777, true);
   echo"<a href='plans/$RID'>Plan</a>";  

?>  
</td>

【讨论】:

以上是关于检查文件是不是存在并提供指向它的链接 php的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式检查链接是不是指向文件

如何检查文件是不是存在没有PHP中的扩展名?

如何通过 PHP 检查 URL 是不是存在?

如何检查软链接的最终目标文件是不是确实存在? [关闭]

如何在 VC++ 中检查链接是不是存在?

检查 JSON 文件中是不是存在数组 - iOS