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. Просмотры

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

Бимал
источник
1

Я решил эту проблему, создав storage\framework\sessionsпапку.

тясирд
источник
0

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

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

Сергей Хмелевской
источник
0

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

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

Очистка содержимого storage/framework/cacheпомогла мне. Больше ничего не работало ...

Карсай Петер
источник
0

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

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

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

Infomaster
источник
0

Это творило для меня волшебство. chmod -Rf 0777 хранилище

Уникальный
источник