スクリプトの終了後にファイルを削除できますが、実行中はfclose()
の後でも手で触れることはできません。ここで私が使用しようとしているコードは次のとおりです。fcloseの後でファイルのリンクを解除できません
$Files = glob("$_SERVER[DOCUMENT_ROOT]/files/*.csv");
$File = fopen($Files[0], "r");
//while (($Data = fgetcsv($File)) !== false) {...
$i = 0;
while (is_resource($File)) {
$i && sleep(1);
echo "Closing handle.\n";
fclose($File);
if (++$i > 5)
die("Could not close handle.");
}
foreach ($Files as $File) {
$i = 0;
while (file_exists($File)) {
$i && sleep(1);
echo "Deleting file.\n";
@unlink($File);
echo '[email protected]:~$ ', $Command = "rm -f '$File' 2>&1", "\n", shell_exec($Command);
if (++$i > 5)
die("Could not delete the file.");
}
}
あなたは私がunlink()
を通してそれを削除しようとシェルコマンドを使用して機能していないどちらもよ参照、両方の私は、このエラーを与えることができたよう:
rm: cannot remove 'invincible-file.csv': Text file busy
私はスクリプトが少し残忍であるかもしれないが、純粋に私はそれが何らかの形で働くことができなかったので、余分なコードのいくつかは、起こっていることを試してデバッグするためのものです。
'$ Files'の内容は何ですか?また、読み込みのために "r"モードで 'fopen'を使い、後でそのファイルを削除しようとしています。ユーザーが削除権限を持っていますか?たぶんそれは許可の問題です。他のコードなしで 'unlink'を実行してみてください。 –
'unlink'の前に' @ 'を削除して、PHPがなぜ失敗したのかを伝えることができます。また、 'fclose'の戻り値を確認してください。 – chiliNUT
@KodosJohnson今まで私を助けてくれてありがとう、私はあなたの 'unlink'を' fopen'なしで試してみるつもりです。例にさらにコードを追加しました。もっと重要な部分 –