【发布时间】:2016-06-28 00:09:47
【问题描述】:
我目前正在编写一个脚本,其中用户在表单中输入一个数字,该脚本在文件夹中搜索与该数字匹配的图像并将其显示给用户(下载按钮即将到来)。现在我的代码如下所示:
$photo_id = trim($_REQUEST['photo_id']);
$dir = "./wp-content/uploads/easter_pics";
$images = (scandir($dir));
foreach ($images as $value); {
$file_ext = strpos($value, ".");
$file_name = substr($value, 0, $file_ext);
if ($file_name === $photo_id) {
echo ("<img src = '../wp-content/uploads/easter_pics/" .
$file_name . ".jpg' />");
}
}
此代码仅在用户输入目录中最后一张图像的编号时才有效。我想我明白了什么是错误的基本原则。 $images 不断被分配 $dir 数组中最后一项的值。至少我认为。
问题是我可能是错的,而且我不知道如何解决它。如果用户输入与目录中的任何照片匹配,我希望 if 语句显示图像然后中断。
【问题讨论】:
-
为什么必须遍历文件夹的条目?如果您已经知道要查找的文件名,那么为什么不简单地检查预期路径下的文件是否存在,仅此而已?
-
@arkascha 可能是为了确保没有人输入
../../../../../etc/passwd,尽管有比扫描整个目录更好的方法。 -
@BartFriederichs 有
realpath()。 -
@arkascha 我是 php 新手,所以我不知道最好的解决方案。我假设您必须遍历数组中的每个文件以获得匹配的字符串。有什么更好的方法?我看到有人提到了一个 realpath() 函数
-
这不是特定于 php 的,它是我所做的一般说明:因为您知道要查找的 ID,所以您确切知道要查找的文件是如何调用的,对吗?这意味着您可以简单地检查它是否存在,对吗?您对文件夹内容的结果不感兴趣。因此,您只需要 1.
file_exists()并使其更安全 2.realpath().
标签: php arrays if-statement foreach