Файл Laravel не может быть удален

Я пытаюсь удалить файл (временный файл, который я создаю, если моя команда импорта не работает), который находится в 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).

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
1 368
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Как вы создаете файл?

Вы закрываете файл после его создания?

fclose($file) 

Вы также можете попробовать принудительно выполнить сборку мусора после закрытия файла и перед его отключением:

gc_collect_cycles();

Так вы разблокируете файл, прежде чем закрыть его? стая ($ fp, LOCK_UN); // снимаем блокировку .. Вы можете добавить немного больше кода.

Атанас Атанасов 13.03.2018 14:43

Убедитесь, что вы закрыли файл и не используете его .
Также попробуйте Storage::delete($filepath) и убедитесь, что у вас есть права на удаление файла, так как он находится внутри хранилище laravel

Storage::delete($filepath) автоматически выполнит поиск по пути storage/app/ и никогда не найдет файл.
Gothiquo 13.03.2018 13:59

Вы можете определить разные диски с разными путями для использования с хранилищем в config / filesystems.php.

Атанас Атанасов 13.03.2018 14:41

Попробуйте следующий код:

используйте класс "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 13.03.2018 17:27

причина ? @abr пожалуйста

Prashant Prajapati 13.03.2018 17:42

Если вы знаете, что chmod означает @Prashant Prajapati, вы наверняка знаете, что последняя цифра (7) означает полное разрешение для всех.

abr 13.03.2018 17:44
askubuntu.com/questions/20105/… Я считаю это хорошим объяснением, взгляните
abr 13.03.2018 17:45

какое разрешение следует использовать для чтения / записи / удаления файла? Помоги пожалуйста

Prashant Prajapati 13.03.2018 17:47
Ответ принят как подходящий

Лучший способ решить эту проблему - использовать 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'),
        ],

Другие вопросы по теме