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 (клацніть правою кнопкою миші на папці-> властивості)
educolo

@educolo Я не думаю, що проблема полягає в правах каталогів, тому що кілька місяців це було нормально.
Євгеній

Відповіді:


148

Найкращий спосіб вирішити цю проблему - перейти в каталог laravel/bootstrap/cacheі видалити config.phpфайл. або ви можете перейменувати його так само, як config.php.old І вашу проблему буде вирішено. Щасливого кодування :-)


7
Так, це допомогло б, але очищення кеш-пам'яті може зробити цю роботу. Запуск поза Vagrant Box php artisan config:cacheвідновить шляхи для додатків. Коли ми запускаємо додаток всередині бродячого вікна, шляхи, наприклад, відрізняються від шляхів для сутінкових тестів.
George Mylonas

Чому конфігурація 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.

Тож я вручну створив папку сеансу та оновив браузер, і він працював.

Тож будь-яку з відсутніх папок, якщо ми видалимо цю проблему, можна вирішити.



7

Зазвичай такий тип проблем виникає під час міграції одного сервера на інший, однієї папки до іншої. Laravel зберігає кеш і конфігурацію (ім'я файлу), коли ця папка відрізняється, тоді ця проблема виникає.

Рішення Виконати наступну команду:

php artisan config:cache

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


6

Apache + WSL на вікнах

Це безглузда помилка та інша відповідь порівняно з іншими, але я додаю її, бо це сталося зі мною.

Якщо ви використовуєте 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

Спробуйте скористатися цими командами, які були корисними для цих помилок

path \ project \ storage \ framework \ views ...

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 config: clear
  2. кеш ремісників php: очистити
  3. php artisan config: кеш

І з якоїсь дивної причини я не можу змінити дозвіл власника на каталоги, тому моє рішення запускало мою IDE (Visual Studio Code) як адміністратор, і все працює.

Мій проект знаходиться у шляху F: / іншого диска.


1

Можливо, є проблема з вашим файлом композитора. Ви можете спробувати:

  • composer install встановлює пакунки постачальника відповідно до composer.lock (або створює composer.lock, якщо його немає),
  • оновлення композитора завжди регенерує composer.lock та встановлює останні версії доступних пакетів на основі composer.json

  • композитор дамп-автозавантаження нічого не завантажує. Він просто відновлює список усіх класів, які повинні бути включені в проект (autoload_classmap.php). Ідеально підходить для нових класів у вашому проекті. В ідеалі ви виконуєте композитор dump-autoload -o для швидшого завантаження ваших веб-сторінок. Єдина причина, що це не за замовчуванням, полягає в тому, що генерування займає трохи більше часу (але це лише трохи помітно)

джерело


На жаль, це не допомогло. Я спробую всі ваші поради.
Євген

Вибачте :( Ви сказали у своєму початковому дописі, що вважаєте, що це можуть бути права / дозволи. Цей допис містить багато інформації про зміну прав на файли та папки, якщо ви вважаєте, що це може бути проблемою. Я не працюю з windows, тому я не знаю багато про це. Сподіваюся, у вас це вийде
Рейчел МакКейган

Я не думаю, що проблема в правах на каталоги, тому що кілька місяців це було нормально. Як я пам’ятаю, я раніше оновлював деякі пакети Laravel, а потім він перестав працювати. Але наступного дня в офісі проект розпочався чудово.
Євгеній

1

Причиною цієї проблеми є файли кешу в localhost. Відповідно до цього я спробував кілька речей, як описано нижче, щоб очистити кеш-пам’ять у своєму проекті, але кожного разу я зазнавав невдачі.

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

Отже, я знайшов рішення цієї проблеми після того, як кожен із зазначених вище кроків не вдався, і він спрацював для мене ідеально. Я видалив файл cache.php у каталозі host_route / bootstrap / cache .

Я думаю, що ця відповідь допоможе вашій проблемі.


1

У моєму випадку це не було нічим, що можна було б виправити за допомогою команд php artisan. Проблема полягала в дозволах папки для папки / storage. Помилка не дала зрозуміти цього.


1

Якщо ви запускаєте laravel всередині докера, то отримайте доступ до його файлової системи

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

Далі перейдіть до кореневого каталогу проектів laravel. Переконайтеся, що у вас є внутрішня папка сховища / фреймворку :

  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


0

Я використовував Laravel 8, це моє рішення

Перейти: storage / framework / cache / data
set дозволів даних каталогу є 777

Це спрацювало для мене


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.