스크립트가 끝나면 파일을 삭제할 수 있지만 실행 중에는 fclose()
이후에도 파일을 만질 수 없습니다.fclose 후에 PHP에서 파일의 링크를 해제 할 수 없습니다
$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 지금까지 도움을 주셔서 감사합니다. 나는'fopen '을 사용하지 않고'unlink'를 시도 할 것입니다. 예제에 더 많은 코드를 추가했습니다. 더 중요한 부분을 놓치지 않았 으면합니다. –