Laravel 5 показывает ErrorException file_put_contents не удалось открыть поток: нет такого файла или каталога


84

У меня есть проект на Laravel 5, и я работаю с ним в офисе и дома. Работает нормально, но недавно дома перестал работать. Laravel покажет мне два ErrorException

file_put_contents(G:\project\storage\framework\views/751d8a0fd8a7d4138c09ceb6a34bb377aa2d6265.php):
failed to open stream: No such file or directory

и

file_put_contents(G:\project\storage\framework/sessions/aIXycR4LIAUBVIqZu0T590paOMIpV8vfZGIroEp0):
failed to open stream: No such file or directory

Я ищу решение проблемы в Google и нахожу информацию о правильных правах. Все советы касаются Linux, но я работаю с Windows в офисе и дома.

Когда я пытаюсь очистить кеш приложения и просмотреть кеш, ремесленник говорит со мной - ... очищено. Но данные кеша и представления присутствуют в хранилище.

Как я могу исправить эту проблему?

Заранее спасибо!


6
Вы можете попробовать очистить кеш "php artisan cache: clear" Я использую linux, поэтому я не уверен в разрешении для Windows, но проверьте свойства папки, если это не read_only (щелкните правой кнопкой мыши папку-> свойства)
educationolo

@educolo Я не думаю, что проблема в правах на каталог, потому что несколько месяцев это было нормально.
Евгений

Ответы:


148

Лучший способ решить эту проблему - перейти в каталог laravel/bootstrap/cacheи удалить config.phpфайл. или вы также можете переименовать его, как config.php.old и ваша проблема будет исправлена. Удачного кодирования :-)


7
Да, это поможет, но очистка кеша может помочь. Запуск за пределами Vagrant Box php artisan config:cacheвосстановит пути для приложений. Когда мы запускаем приложение внутри бродячего бокса, пути, например, отличаются от путей для тестов в сумерках.
Джордж Милонас

Почему конфигурация laravel заставляет laravel умирать? Работает спасибо.
Эндрю

config: кеш почему-то не исправил.
Эндрю

Чистый, простой и прямой для тех, кто не может получить доступ через SSH в данный момент или вообще. Отличный ответ!
lzoesch

config: clear работает для меня, кроме того, что переименование файла тоже работает,
Мохаммед Омер

66

Обычно вам следует запускать php artisan config:cacheкоманду как часть процедуры развертывания в производственной среде. В качестве решения вашей проблемы я предлагаю вам воссоздать файл кеша для более быстрой загрузки конфигурации.

Для этого выполните следующие команды Artisan в командной строке

  • php artisan cache:clear
  • php artisan config:cache

Вы можете программно выполнить команду, добавив к своим маршрутам следующее:

Route::get('/clear-cache', function() {
    $exitCode = Artisan::call('cache:clear');
    $exitCode = Artisan::call('config:cache');
    return 'DONE'; //Return anything
});

А затем вызовите clear-cacheмаршрут из браузера.

Надеюсь, это поможет.


49

После некоторого исследования я понял - у меня очень похожие, но разные местоположения корневого проекта и его кеширование /bootstrap/cache. После очистки кеша запустился проект.


это решило мою проблему, после того, как многие предложенные решения потерпели неудачу, спасибо
Агунг Сагита

@AgungSagita, без проблем;)
Евгений

ты спасатель жизни
Фестус Юма

Это решило мою проблему, попробовав много других альтернатив. Спасибо :)
binmosa

Жаль, что я не видел это, поскольку это ответ на мой вопрос об отсутствующем поставщике услуг: stackoverflow.com/questions/58192052/…
j3py

14

На самом деле я столкнулся с этой проблемой, когда переместил свой проект с сервера на локальный.

в

хранилище / каркас

требуется четыре основных папки: кеш, сеансы, тестирование, просмотры

В моем случае сеансы отсутствовали, возможно, в gitignore.

Итак, я вручную создал папку сеанса и обновил браузер, и он работал.

Так что любую недостающую папку, если мы удалим эту проблему, можно будет решить.


3
Это правда
Ахмад Джамиль Аль-

7

Проблема такого типа обычно возникает при миграции с одного сервера на другой, из одной папки в другую. Laravel сохраняет кеш и конфигурацию (имя файла), когда папка отличается от этой проблемы.

Решение Выполните следующую команду:

php artisan config:cache

https://laravel.com/docs/5.6/configuration#configuration-caching


6

Apache + WSL для Windows

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

Если вы используете WSL (linux bash в Windows) для управления своим приложением laravel, при этом используя Windows apache для запуска вашего сервера, то выполнение любых команд кеширования в wsl сохранит путь linux, а не путь Windows к сеансам и другим папкам. .

Решение

Просто запустите команды очистки кеша в PowerShell, а не в WSL.

$ php artisan optimize

Мне было достаточно.


Я столкнулся с той же проблемой. Я использую Windows, а также экземпляр Linux на виртуальной машине VMWare. Это позволяет мне тестировать как в Windows, так и в Linux, но когда я запускал php artisan config:cacheкоманду в Windows, мой Linux больше не загружал веб-страницы приложения. Переход в папку bootstrap / cache и удаление там файла config.php разрешил это.
Дэвид Тран

4

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

путь \ проект \ хранилище \ фреймворк \ просмотры ...

php artisan view:clear

путь \ проект \ хранилище \ рамки / сеансы ...

php artisan config:cache

2
Если вы публикуете новый ответ, когда уже есть несколько ответов, вы должны добавить к нему дополнительные пояснения, чтобы другие могли извлечь уроки из вашего ответа,
Нико Хаасе,

4

В случае виртуального хостинга, когда у вас нет доступа к командной строке, просто перейдите в папку laravel / bootstrap / cache и удалите (или переименуйте) config.php, и все готово!


2

Лучший способ решить эту проблему - перейти в каталог laravel/bootstrap/cacheи удалить все файлы из кеша.

Для этого выполните следующие команды Artisan в командной строке
1. php artisan config:clear
2. php artisan cache:clear
3. php artisan config:cache

На своей панели или на сервере вы можете выполнять команды, добавляя к своим маршрутам следующее:

    Route::get('/clear-cache', function() {
        $run = Artisan::call('config:clear');
        $run = Artisan::call('cache:clear');
        $run = Artisan::call('config:cache');
        return 'FINISHED';  
    });

А затем вызовите  www.yourdomain.com/clear-cache маршрут из браузера.


2

изменение имени /bootstrap/cache/config.php на config.php.old не работает для меня, ни очистка кеша с помощью команд artisan

  1. Конфигурация php artisan: очистить
  2. php artisan cache: очистить
  3. Конфигурация php artisan: кеш

И по какой-то странной причине я не могу изменить разрешение для владельца в каталогах, поэтому в моем решении моя IDE (код Visual Studio) была запущена от имени администратора, и все работает.

Мой проект находится в пути F: / другого диска.


1

Возможно, проблема связана с вашим файлом композитора. Вы можете попробовать:

  • composer install устанавливает пакеты поставщика в соответствии с composer.lock (или создает composer.lock, если он отсутствует),
  • composer update всегда восстанавливает composer.lock и устанавливает последние версии доступных пакетов на основе composer.json

  • composer dump-autoload ничего не загружает. Он просто восстанавливает список всех классов, которые необходимо включить в проект (autoload_classmap.php). Идеально, когда у вас есть новый класс внутри вашего проекта. В идеале вы выполняете composer dump-autoload -o для более быстрой загрузки ваших веб-страниц. Единственная причина, по которой он не установлен по умолчанию, заключается в том, что для его создания требуется немного больше времени (но это лишь слегка заметно)

источник


К сожалению, это не помогло. Использую все ваши советы.
Евгений

Извините :( В своем исходном сообщении вы сказали, что думали, что это могут быть права / разрешения. В этом сообщении много информации об изменении прав на файлы и папки, если вы считаете, что это может быть проблемой. Я не работаю с windows, так что я мало что знаю об этом. Надеюсь, у вас это
сработает

Не думаю, что проблема в правах на каталог, потому что несколько месяцев это было нормально. Насколько я помню, я раньше обновлял некоторые пакеты Laravel, а потом он перестал работать. Но на следующий день в офисе проект стартовал нормально.
Евгений

1

Причина этой проблемы - файлы кеша на localhost. В соответствии с этим я пробовал несколько следующих вещей, чтобы очистить кеш в моем проекте, но каждый раз терпел неудачу.

  • Пытался очистить команды cahe, изменив файл web.php (с кодами artisan)
  • Пытался очистить кеш, подключив SSH (через PUTTY)
  • Пытался разместить мой проект в субдомене в рамках создания нового общедоступного каталога

Итак, я нашел решение этой проблемы после того, как все вышеперечисленные шаги потерпели неудачу, и это сработало для меня отлично. Я удалил файл cache.php в каталоге host_route / bootstrap / cache .

Думаю, этот ответ поможет решить вашу проблему.


1

В моем случае это было не то, что можно было исправить с помощью команд php artisan. Проблема заключалась в правах доступа к папке / storage. Ошибка не проясняет это.


1

Если вы запускаете laravel внутри докера, получите доступ к его файловой системе

$ docker exec -it name-of-laravel-container /bin/bash

Затем перейдите в корневой каталог проектов laravel. Убедитесь, что у вас есть внутри папки storage / framework :

  1. тайник
  2. сессии
  3. тестирование
  4. Просмотры

И они должны быть доступны для чтения и записи.



0

У меня были аналогичные проблемы из-за .gitignore для /storageпапки на первом компьютере, затем клонированного репозитория на втором компьютере, а laravel был пересмотрен для записи кеша сеансов

Итак, создание папки вручную /storage/sessionsможет быть решением ..


0

решение, которое сработало для меня, - просто обслуживать приложение в качестве администратора, если вы

  1. на macили linuxиспользоватьsudo php artisan serve
  2. в Windows попробуйте открыть CMDкак, adminstratorа затем перейдите в каталог проекта и запуститеphp artisan serve


0

Я использовал Laravel 8, это мое решение

Goto: хранилище / framework / cache / данные
каталога разрешений для данных - 777

Это сработало для меня


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.