【问题标题】:scandir or opendir does not work when path contains space in PHP当路径在 PHP 中包含空格时,scandir 或 opendir 不起作用
【发布时间】:2012-04-12 08:53:27
【问题描述】:

当目录路径中有空间时,以下功能不起作用。例如,在以下路径中,目录名称为“Stack Overflow_files”,其中包含一个空格。

 $dir = '/home/mamun/workspace/barj/barj/barj/Sequence/Stack Overflow_files';
 $scanned_directory =  array_diff(scandir($dir, 0), array('..', '.'))

$dh  = opendir($dir);
while (false !== ($filename = readdir($dh))) {
         $scanned_directory[] = $filename;
}

我可以从运行 ls '$dir' 的终端找到解决方案。但是php中有什么方法可以获取目录列表吗?

【问题讨论】:

  • 它适用于我,名称中有空格。你确定没有其他问题吗?
  • 我不知道。你确定它在linux环境中工作吗?当我从 PHP 运行终端命令时,空格甚至会给出错误的结果。比如 exec("du -hs $path");
  • 空格对 shell 命令很重要,但对 PHP 文件系统函数没有影响。
  • 如果我在终端中运行以下命令,它会完美运行。 dir /home/mamun/workspace/barj/barj/barj/Sequence/Stack\ Overflow_files/ 2>&1 但如果我从 php $out = array(); exec("dir /home/mamun/workspace/barj/barj/barj/Sequence/Stack\Overflow_files/2>&1", $out);它给出了权限被拒绝的消息。
  • 这是一个权限问题,因此实际上与空间无关。您需要确保 PHP 具有对该目录的读取权限。 Web 服务器 (apache) 和 PHP 通常会以与您用于日常事务的本地用户不同的用户身份运行。在choice 的搜索引擎中搜索“Linux 文件权限”。如果您仍然遇到问题,请询问有关权限的另一个问题。

标签: php directory space


【解决方案1】:

替代解决方案

 $URL = str_replace("\ ","%20","../pasta1/pasta com espaco/pasta2");<br>
 $arquivos = scandir($URL);

<br>

 echo $arquiovos[0];<br>
 echo $arquiovos[1];<br>

【讨论】:

  • 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
【解决方案2】:

尝试用反斜杠转义空格-

$dir = '/home/mamun/workspace/barj/barj/barj/Sequence/Stack\ Overflow_files';

【讨论】:

    【解决方案3】:

    尝试 urlencoding。目录路径 可能是这样的

             $dir = '/home/mamun/workspace/barj/barj/barj/Sequence/Stack%20Overflow_files';
    

    【讨论】:

    • 在 urlencoding 之后看起来像 %2Fhome%2Fmamun%2Fworkspace%2Fbarj%2Fbarj%2Fbarj%2FSequence%2FStack+Overflow_files。还是不行。
    • 尝试 str_replace(" ","%20","/home/mamun/workspace/barj/barj/barj/Sequence/Stack Overflow_files");
    • 仍然无法正常工作。当我从运行 shell 命令的 php 的 exec() 获得文件夹的大小时,即使空间也会出现问题。例如, $command = "du -hs '" 。 $文件夹路径。"'"; exec($command) 它给出了错误的文件夹大小。
    【解决方案4】:

    试试

    $dir = urlencode('/home/mamun/workspace/barj/barj/barj/Sequence/Stack Overflow_files');
    

    【讨论】:

      【解决方案5】:

      兄弟,这是最终的解决方案

      $path="/var/www/images";
      $dir="带空格的文件夹";
      $files=scandir("${path}/${dir}");

      还有宾果游戏

      【讨论】:

        猜你喜欢
        • 2012-02-26
        • 1970-01-01
        • 2015-07-12
        • 1970-01-01
        • 1970-01-01
        • 2016-03-16
        • 2021-10-15
        • 2018-10-17
        • 2019-07-14
        相关资源
        最近更新 更多