#php #file-exists #unlink
#php #файл-существует #разорвать связь
Вопрос:
У меня есть этот код в моем приложении, который часто выполняется в режиме гонки несколькими пользователями моего приложения
clearstatcache(TRUE, $filepath);
if(file_exists($filepath)) unlink($filepath);
Но для этой строки кода у меня все еще есть несколько ошибок каждый день, таких как
отсоединить ссылку (файл): такого файла или каталога нет
На сервере запущены Apache 2.2 и PHP 5.3.3. Я знаю проблему гонки, но думаю, что @ operator — это просто зло. Сначала я попробовал без какого-либо параметра для clearstatcache(), с той же ошибкой. Как я могу сделать это правильным способом?
Комментарии:
1. не могли бы вы добавить немного вашего кода, пожалуйста.
2. @ExperimentX но это прямо там, не так ли?
3. @Pekka ну, я думаю, я не вижу никакого недостатка в приведенном выше коде
4. В этом случае оператор @ может быть не таким уж злым, его ждет смерть от комментариев . Зависит от того, насколько критичен этот фрагмент кода.
5. Как говорит @John, возможно, вы ничего не можете сделать, кроме как подавить предупреждение.
Ответ №1:
вы можете попробовать это
if(@unlink($path)) {
echo "Deleted file ";
}
else{
echo "File can't be deleted";
}
Я думаю, что это будет довольно хорошо;
Комментарии:
1. В своем вопросе он говорит, что не хочет это использовать. Однако это может быть единственным вариантом.
Ответ №2:
Как сказано в комментарии, мне нужно быть уверенным, что я удалил файл, а не знать, что процесс ведьмы удалил его, поэтому
@unlink($filepath);
clearstatcache(TRUE, $filepath);
if(file_exists($filepath)) throw new Exception('file not deleted : ' . $filepath);
возможно, это лучший способ.
Большое спасибо за вашу помощь, намного проще придумать другой способ сделать это с несколькими комментариями.