【问题标题】:How to write an if statement in a foreach statement如何在 foreach 语句中编写 if 语句
【发布时间】: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


【解决方案1】:

您的foreach 错误:

foreach ($images as $value); {

应该是

foreach ($images as $value) {

(注意缺少的分号)

话虽如此,对于您的特定情况,foreach 在扫描的目录上可能不是最佳解决方案。尝试更好地验证输入(例如,如果 ID 始终是数字,则使用 intval)并查看文件是否存在。

【讨论】:

  • 啊,该死的,我错过了。我也试试你的方法。
猜你喜欢
  • 2010-10-29
  • 2021-10-13
  • 2021-05-04
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多