Я пытаюсь удалить файл (временный файл, который я создаю, если моя команда импорта не работает), который находится в storage/framework/cache/.
.
Я пытался использовать unlink, но всегда получаю сообщение об ошибке Text file busy (при поиске эта ошибка отображается, потому что файл уже используется).
Я пробовал также File::delete($fullpath), но тоже не работает (ошибки нет, но файл не удаляется)
Проблема в том, что если я проверяю, существует ли файл, это всегда правда (я тоже проверял вручную, и файл есть) .
Вот что сделал:
$lockfilePath = $this->lockFilePath($uri);// if i display this line, I get /var/www/html/project/storage/framework/cache/filename.lock
if (!file_exists($lockfilePath)) {
throw new RuntimeException("$uri was not locked. Lockfile not found.");
}
\File::delete($lockfilePath); // I tried also unlink($lockfilePath);
Я работаю с Homestead и Laravel 5.1 (PHP версии 5.6).






Как вы создаете файл?
Вы закрываете файл после его создания?
fclose($file)
Вы также можете попробовать принудительно выполнить сборку мусора после закрытия файла и перед его отключением:
gc_collect_cycles();
Убедитесь, что вы закрыли файл и не используете его .
Также попробуйте Storage::delete($filepath) и убедитесь, что у вас есть права на удаление файла, так как он находится внутри хранилище laravel
Storage::delete($filepath) автоматически выполнит поиск по пути storage/app/ и никогда не найдет файл.
Вы можете определить разные диски с разными путями для использования с хранилищем в config / filesystems.php.
Попробуйте следующий код:
используйте класс "File" перед началом вашего класса, например use File;
$lockfilePath = $this->lockFilePath($uri);
if (File::exists($lockfilePath)) {
unlink($lockfilePath);
} else {
return "file not present";
}
Примечание: убедитесь, что в вашем проекте есть права на чтение и запись для файлов, которые вы хотите удалить, запустите приведенный ниже код, чтобы предоставить разрешение на чтение и запись.
chmod -R 777 /var/www
(-R делает его рекурсивным)
Никогда. делать. Это . Аня 777.
причина ? @abr пожалуйста
Если вы знаете, что chmod означает @Prashant Prajapati, вы наверняка знаете, что последняя цифра (7) означает полное разрешение для всех.
какое разрешение следует использовать для чтения / записи / удаления файла? Помоги пожалуйста
Лучший способ решить эту проблему - использовать unlink($filepath), но перед этим вам нужно найти, где был открыт файл, и использовать fclose($handle).
после некоторого поиска я нашел это
Предположим, что ваш файл находится по этому пути хранилище / приложение / общедоступные / изображения
Контроллер
.... other logic code
if ( Storage::disk('local')->exists('public/images/'.$file->file_system_path))
Storage::disk('local')->delete('public/images/'.$file->file_system_path);
оба метода возвращают логические значения.
Важная заметка !
php artisan storage:link
/config/filesystem.php
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
],
Так вы разблокируете файл, прежде чем закрыть его? стая ($ fp, LOCK_UN); // снимаем блокировку .. Вы можете добавить немного больше кода.