Ошибка «Не удалось открыть поток: разрешение отказа» – Laravel

Я новичок в laravel. Я пытался открыть http://localhost/test/public/ и я получил

Ошибка в обработчике исключений.

Я googled вокруг и изменил разрешение каталога хранения с использованием chmod -R 777 app/storage но безрезультатно.

Я изменил debug=>true в app.php и посетил страницу и получил ошибку в обработчике исключений:

Не удалось открыть поток или файл «/var/www/html/test/app/storage/logs/laravel.log»: не удалось открыть поток: разрешение отклонено в / var / www / html / test / bootstrap / скомпилировано. PHP: 8423

Затем я изменил права доступа к каталогу хранилища, используя команду chmod -R 644 app/storage и ошибка «Ошибка в обработчике исключений» исчезла, и страница загрузилась. Но там я получаю это:

file_put_contents (/var/www/html/laravel/app/storage/meta/services.json): не удалось открыть поток: разрешение отклонено

Related of "Ошибка «Не удалось открыть поток: разрешение отказа» – Laravel"

Предложение от vsmoraes работало для меня:

Laravel> = 5.4

 php artisan cache:clear chmod -R 777 storage/ composer dump-autoload 

Ларавель <5.4

 php artisan cache:clear chmod -R 777 app/storage composer dump-autoload 

Для гуглеров, столкнувшихся с этой проблемой с Laravel 5.

Это проблема разрешения, вызванная тем, что разные пользователи пытаются писать в том же файле журнала в папке storage/logs с разными разрешениями.

Случается, что ваша конфигурация laravel, вероятно, настроена ежедневно регистрировать ошибки, поэтому ваш веб-сервер (apache / nginx) может создать этот файл под пользователем по умолчанию, в зависимости от вашей среды он может быть чем-то вроде _www на OSX или www-data на * системах NIX , тогда проблема возникает, когда вы, возможно, запускаете некоторые команды ремесленника и получаете некоторые ошибки, поэтому ремесленник будет писать этот файл, но с другим пользователем, потому что PHP на терминале выполняется другим пользователем, фактически вашим пользователем входа, вы можете проверить его выполнив эту команду:

 php -i | grep USER 

Если ваш пользователь входа в систему создал этот файл журнала вашего веб-сервера, вы не сможете писать ошибки в нем, и наоборот, поскольку laravel записывает файлы журналов с 655 правами по умолчанию, которые разрешают владельцу писать в нем.

Чтобы исправить это временное действие, вы должны вручную предоставить разрешения для группы 664 в этот файл, чтобы и ваш пользователь входа в систему, и пользователь веб-сервера могли записывать в этот файл журнала.

Чтобы избежать этой проблемы навсегда, вы можете настроить правильные разрешения при создании нового файла в каталоге storage/logs , наследуя разрешения из каталога, этот ответ https://unix.stackexchange.com/a/115632 может помочь вам чтобы справиться с этим.

Для всех, кто использует Laravel 5, Homestead и Mac, попробуйте следующее:

 mkdir storage/framework/views 

несколько раз SELINUX вызвал эту проблему; вы можете отключить selinux с помощью этой команды.

 sudo setenforce 0 

Задача решена

 php artisan cache:clear sudo chmod -R 777 vendor storage 

это позволяет разрешить запись приложения, рамки, журналов. Надеюсь, это поможет.

Вы не должны давать 777 разрешений. Это риск для безопасности. Пользователям Ubuntu, в Laravel 5, я стараюсь изменить реестр:

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

 sudo chown -R www-data:www-data storage 

В системах на базе Ubuntu www-data является пользователем apache.

Для бродячих пользователей решение:

(в бродячих) php artisan cache: clear

(за пределами бродяг) chmod -R 777 app / storage

(в бродячих) композитор дамп-автозагрузка

Удостовериться, что вы chmod в своей местной среде, а не внутри бродяги, важны здесь!

Повторите попытку с помощью chmod -R 755 /var/www/html/test/app/storage . Использование с sudo для Operation not permitted в chmod. Используйте Проверить разрешение владельца, если все еще есть ошибка.

Если у вас есть Laravel 5 и ищет постоянное решение, применимое как использование командной строки php artisan и сервер Apache, используйте это:

sudo chmod -R 777 vendor storage
echo "umask 000" | sudo tee -a /etc/resolv.conf
sudo service apache2 restart

См. Подробное объяснение здесь .

Предложите правильное разрешение, если для Apache,

 sudo chown -R apache:apache apppath/app/storage 

ДЛЯ ЛЮБОЙ РАБОТЫ ОС С SELINUX: правильный способ разрешить httpd записывать в папку хранения laravel:

 sudo semanage fcontext -a -t httpd_sys_rw_content '/path/to/www/storage(/.*)?' 

Затем немедленно применить изменения:

 sudo restorecon -F -r '/path/to/www/storage' 

SELinux может быть болью, с которой можно справиться, но если он присутствует, я бы настоятельно советовал вам изучать его, а не полностью обходить его.

Согласно Laravel 5.4, который является последним, поскольку я пишу это, если у вас есть какие-либо проблемы, подобные этому, вы должны изменить разрешение. НЕ СЛУШАЙТЕСЬ К ЛЮБОЙ КТО РАССКАЗЫВАЕТ ВАМ УСТАНОВИТЬ 777 ДЛЯ ЛЮБОГО СПРАВОЧНИКА. У этого есть проблема безопасности. Измените разрешение папки хранения как это

 sudo chmod -R 775 storage 

Изменить разрешение папки для начальной загрузки

 sudo chmod -R 775 bootstrap/cache 

Теперь убедитесь, что вы выполняете обе команды из своего каталога приложений. Вы не столкнетесь с проблемами в будущем относительно разрешения. 775 не ставит под угрозу безопасность вашей машины.

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

  1. Узнайте пользователя apache – создайте файл test.php в общей папке с кодом

<?php echo exec('whoami'); ?>

И запустите файл из веб-браузера. Это даст пользователю apache. В моем случае это ec2-user, поскольку я использовал aws с cronjob, установленным в /etc/cron.d/. Это может быть другой пользователь для других.

  1. Выполните команду ниже в командной строке.

sudo chown -R ec2-user:<usergroup> /app-path/public

Вам нужно определить и использовать правильные «пользовательские» и «пользовательские группы» здесь.

 rm storage/logs/laravel.log 

решил это для меня

Xampp для использования:

 cd /Applications/XAMPP/htdocs chmod -R 775 test/app/storage 

Каждый раз, когда я меняю app.php, я получаю разрешение, запрещающее писать bootstrap / cache / services.json, поэтому я сделал это, чтобы исправить это:

 chmod -R 777 bootstrap/cache/ 

Если кто-то еще сталкивается с аналогичной проблемой с ошибкой прав доступа fopen, но достаточно разумно, чтобы не слепо chmod 777, вот мое предложение.

Проверьте команду, которую вы используете для разрешений, необходимых Apache:

 fopen('filepath/filename.pdf', 'r'); 

«R» означает открытый для чтения, и если вы не редактируете файл, это то, что вы должны установить. Это означает, что apache / www-data требует, по крайней мере, разрешения на чтение этого файла, который, если файл создается через laravel, уже получит разрешение на чтение.

Если по какой-либо причине вы должны написать в файл:

 fopen('filepath/filename.pdf', 'r+'); 

Затем убедитесь, что у apache также есть права на запись в файл.

http://php.net/manual/en/function.fopen.php

В моем случае решение заключалось в изменении разрешения на app/storage/framework/views и каталогов app/storage/logs .

Просто запустите свой сервер, используя artisian

php artisian serve

Затем получите доступ к вашему проекту с указанного URL:

введите описание изображения здесь

Если вы используете ларадок, попробуйте chown -R laradock:www-data ./storage

У меня такая же проблема при запуске брандмауэра на mac. решила проблему, изменив пользователя сервера Apache в файле https.conf:

 # check user for php [vagrant] ubuntu ~ $ php -i | grep USER USER => ubuntu $_SERVER['USER'] => ubuntu [vagrant] ubuntu ~ $ 

Запустите apache под пользователем php вместо демон пользователя, чтобы решить проблему доступа к файлу с помощью php

 # change default apache user from daemon to php user sudo sed -i 's/User daemon/User ubuntu/g' /opt/lampp/etc/httpd.conf sudo sed -i 's/Group daemon/Group ubuntu/g' /opt/lampp/etc/httpd.conf 

теперь созданный php файл кеша может быть прочитан и отредактирован apache, не показывая никакой ошибки разрешения доступа.

У меня была аналогичная проблема. (Разрешение разрешено при разрешении, если оно настроено правильно) с Laravel 5.2 и 5.5

Проблема заключалась в том, что был включен SELinux, который не позволяет Apache записывать файлы даже с режимом 777. См. Ответ Solve 500 Laravel (Uncaught UnexpectedValueException: Laravel.log) для ответа на вопрос и ответ.

Возможно, это решает проблему и для вас.

После большого количества проб и ошибок с разрешениями на каталоги я оказался в эпифани … на диске не осталось места. Просто хотел поделиться, чтобы никто не был глуп, чтобы продолжать искать решение в неправильном направлении.

В Linux вы можете использовать df -h чтобы проверить размер вашего диска и свободное пространство.

Установка разрешения на 777 – это, безусловно, ужасная идея!

… но

Если вы получаете ошибку разрешения, связанную с папкой «storage», это то, что сработало для меня:

1) Установите для «хранения» и его вложенных папок разрешение 777 с

 sudo chmod -R 777 storage/ 

2) В браузере перейдите на страницу laravel laravel / public / (laravel создаст необходимые начальные файлы для хранения)

3) Разрешение на возврат 775 на хранение и его подпапки

 sudo chmod -R 775 storage/ 

Для LARAVEL 5 попытайтесь создать папки кэша , сессий и представлений в хранилище / фреймворке с разрешением 777.

Я попытался предоставить 777 доступ к папке хранения, и у меня есть работа для меня

1) зайдите в свой корневой каталог laravel ( /var/www/html для меня) и выполните следующую команду

 chmod 777 -R storage