0

ディレクトリを指定し、ユーザーが指定したディレクトリに各 mp3 のプレーヤーを埋め込むことができる単純な Web サイトを作成しようとしています。問題は、ディレクトリ名をどのように入力しても、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 で変数をデバッグするのに非常に役立つツールの 1 つが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を参照してください。

また、ここで注意すべきことは、グロブが絶対パ​​スを返すのに対し、相対パスを使用していることです。相対とは、PHP スクリプトの CWD (現在の作業ディレクトリ) を基準にして検索することを意味します。それが何であるかを確認するには、次のコードを使用できます。

var_dump(real_path('.'));
// similarly ...
var_dump(getcwd());
于 2012-12-16T08:06:10.420 に答える