разорвать связь/file_exists и файл не найден

#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);
  

возможно, это лучший способ.

Большое спасибо за вашу помощь, намного проще придумать другой способ сделать это с несколькими комментариями.