glob()函数只返回php中的空数组

时间:2012-12-16 07:11:19

标签: php glob

我一直试图建立一个简单的网站,让你指定一个目录,并在用户指定的任何目录中为每个mp3嵌入一个播放器。问题是无论我如何输入目录名,glob()都不会返回任何文件。我已尝试使用本地文件夹,服务器目录以及与php文件相同的文件夹。

'目录路径'是用户输入的文本框的名称,您猜对了,目录路径。 ' echo $ files'语句屏幕上不显示任何内容回声"测试"'声明DOES运行,但回声"你好"'循环中的语句不会执行。

感谢任何帮助!

if (!empty($_POST['directoryPath']))
{
    $path = ($_POST['directoryPath']);
    $files = glob("$path/{*.mp3}", GLOB_BRACE);
    echo $files[0];
    echo "test";
    foreach($files as $i)
        {
            echo "hello";
            echo $files[$i];
            ?>
                <embed src=<?php $files[$i]; ?> width=256 height=32 autostart=false repeat=false loop=false></embed><?php echo $files[$i] ?></p>
            <?php;
        }
    unset($i);
}

2 个答案:

答案 0 :(得分:0)

首先验证输入:

$path = realpath($_POST['directoryPath']);
if (!is_dir($path)) {
    throw new Exception('Invalid path.');
}
...

另外检查返回值glob是否有错误返回false。检查该条件(并确保在没有找到文件的情况下,您没有使用其中一个甚至返回false的系统。)

我希望这会有所帮助。是的,检查您的错误日志并启用错误记录。这就是你怎么看错了。

另请参阅以下相关函数,了解GLOB_BRACE的用法示例和语法:

答案 1 :(得分:0)

我发现在PHP中帮助调试变量非常有用的一个工具是var_dump()。它是一个函数,它为您提供有关变量类型,内容以及它可以从该变量获得的任何有用元数据的信息。这对你来说是一个非常有用的工具,因为你很快就会意识到你在变量$i中所拥有的东西根本不是你所期望的。

$files = glob("$path/{*.mp3}", GLOB_BRACE);
foreach ($files as $i) {
    var_dump($i);
}
/* Here's a hint, $i is not an index to the $files array.
   So $files[$i] makes no sense. $i is actually the value not the key.*/
foreach ($files as $key => $value) { // very different from
    // $key is the key to the current element of $files we're iterating over
    // $value is the value of the current element we're iterating over
}

因此,在您的代码$i中,值不是键。有关构造如何工作的更多信息,请参阅http://php.net/foreach

另外,这里应该注意的是你使用的是相对路径,而glob会返回一个绝对路径。相对而言,这意味着您相对于PHP脚本的CWD(当前工作目录)进行搜索。要查看是什么,您可以使用以下代码。

var_dump(real_path('.'));
// similarly ...
var_dump(getcwd());