检查文件是不是存在并提供指向它的链接 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的主要内容,如果未能解决你的问题,请参考以下文章