0

PHP を使用して、フォルダー内の最初のファイルからコンテンツを取得し、コンテンツが読み込まれたらファイルを削除します。ここに私が持っているものがあります:

$a = opendir('./');
while (false !== ($entry = readdir($a))) {
    if($entry != '.' && $entry != '..') {
        echo $entry = file_get_contents('./'.$entry.'', FILE_USE_INCLUDE_PATH);
        break; // only need the first file
        }
    }

上記のコードはフォルダー内の最初のファイルをロードし、次のようなものを使用して正常に削除できます

unlink("temp.txt");

したがって、許可拒否エラーはありません。しかし、私がする必要があるのは、変数名でファイルを削除することです(すべてのファイル名が異なるため)。驚いたことに、unlink("$entry");または同様の理由でファイルを削除できず、代わりにそのファイルの内容の最初の数行とともに警告が表示されます。エコーする$entryとtemp.txtが正しく表示されます。誰かが私を啓発できますか?ここで何が欠けていますか?

(オプションの (関連のない) 質問: 1.txt、2.txt、3.txt、10.txt などの数値ファイルがある場合....上記のコードを何らかの方法で変更できる方法はありますか? 1,10,2,3 ... のようなファイルをロードせず、代わりに 1,2,3,10 のようにロードします...?)

更新: 動作する更新されたコード (将来の参照用):

$a = opendir('./');
while (false !== ($entry = readdir($a))) {
    if($entry != '.' && $entry != '..') {
        echo $b = file_get_contents('./'.$entry.'', FILE_USE_INCLUDE_PATH);
        break; // only need the first file
        }
    } 
unlink("./$entry");
4

1 に答える 1

2

最初の問題は$entry、ファイルの内容で上書きしていることです。ファイルを削除しようとすると、ファイル名が無効になるためです (ファイルの内容でエラーを説明します)。

第二に、あなたが使用しているためFILE_USE_INCLUDE_PATH、ファイルがどこにあるか正確にはわからずunlink、現在の作業ディレクトリに関連して解決され$aます。

使えunlink($a.'/'.$entry)ば元気になります。

無関係な質問についてscandirは、フォルダー内のすべてのファイルを取得するために使用しnatsort、結果の配列に適用して「自然な並べ替えアルゴリズム」で並べ替えます。ディレクトリのリストには常にフォルダもリストされており、手動で検出してスキップまたは削除する必要があることに注意.してください。..

于 2013-08-28T11:43:50.547 に答える