【问题标题】:PHP check if string is "." or ".."PHP 检查字符串是否为“.”或者 ”..”
【发布时间】:2015-11-17 05:22:33
【问题描述】:

我正在尝试从语句中删除目录,但在使用 PHP 时我似乎无法摆脱 ... 目录。

$album_num = $_POST['album_num'];
$album_directory = "../../galleries";
$albums = array_reverse(scandir($album_directory));
$album = $albums[$album_num];
if($album) {
    if($album !== "." || $album !== "..") { //This line here
        $image = glob($album_directory . "/" . $album . "/*.jpg");
        $image = explode("/", $image[0]);
        $image = end($image);
        echo $album . ":" . $image;
    }
} else {
    echo "halt";    
}

具有if($album !== "." || $album !== "..") 的行似乎不起作用。我需要逃避这些点吗?

我可以从数组中删除它们吗?

【问题讨论】:

  • 因为它应该是&& 而不是||。你想检查它不是一个点并且不是一个双点。
  • 查看scandir手册中的usenotes
  • @zerkms,我一定累了.. 谢谢 - 我已经改变了,我现在又遇到了另一个问题,我正在返回 2 个空白调用(使用 ajax 调用来获取名称) .我决定在这么短的时间内删除数组中的两个值。这样它就不会打电话了
  • @ntgCleaner 我实际上建议永远不要检查那里的 cmets:它们没有经过审核,那里有很多有害垃圾。 /cc 达贡
  • @ntgCleaner w3schools 太误导人了,我安装了w3schools hider

标签: php scandir


【解决方案1】:

试试这个:

if($album) {
    if($album !== "." && $album !== "..") { //This line here
        $image = glob($album_directory . "/" . $album . "/*.jpg");
        $image = explode("/", $image[0]);
        $image = end($image);
        echo $album . ":" . $image;
    }
}

将您的 if 条件从 || 更改为 &&

【讨论】:

  • 没有解释的代码对社区没有帮助。
  • 编辑了我的答案!感谢您的指导:)
  • 它什么也没解释。说真的 - 答案应该告诉为什么它是错误的以及为什么你现在提供的东西修复了它。
【解决方案2】:

使用 != 代替 !==

我想你不希望这张专辑评价为 !==

$album_num = $_POST['album_num'];
$album_directory = "../../galleries";
$albums = array_reverse(scandir($album_directory));
$album = $albums[$album_num];
if($album) {
    if($album != "." || $album != "..") { //This line here
        $image = glob($album_directory . "/" . $album . "/*.jpg");
        $image = explode("/", $image[0]);
        $image = end($image);
        echo $album . ":" . $image;
    }
} else {
    echo "halt";    
}

【讨论】:

  • 你知道!==操作员是做什么的吗?在那种情况下,$album 变量如何被评估为!==
  • 是的,不会。道歉。
猜你喜欢
  • 2015-06-05
  • 2017-08-19
  • 1970-01-01
  • 2019-06-06
  • 1970-01-01
  • 2017-11-28
  • 2013-03-05
相关资源
最近更新 更多