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.