0

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

'directoryPath' 是用户输入的文本框的名称,你猜对了,就是目录路径。'echo $files' 语句在屏幕上不显示任何内容。'echo "test"' 语句确实运行,但循环中的 'echo "hello"' 语句不执行。

任何帮助表示赞赏!

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);
}
4

2 回答 2

0

首先验证输入:

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

另外检查返回值是否glob返回false错误。检查该情况(并确保您没有使用那些甚至false在没有找到文件时返回的系统之一)。

我希望这是有帮助的。是的,检查您的错误日志并启用错误日志记录。这样你就可以看到出了什么问题。

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

于 2012-12-16T07:23:12.183 回答
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());
于 2012-12-16T08:06:10.420 回答