Laravel 4: не удалось открыть поток: отказано в разрешении

У меня проблема с настройкой Laravel 4. У меня возникает эта ошибка при открытии страницы индекса:

file_put_contents (/Users/laravel/app/storage/meta/services.json) [function.file-put-contents]:
не удалось открыть поток: в доступе отказано.

Что мне здесь не хватает?


person Bryan P    schedule 10.06.2013    source источник


Ответы (6)


Каталог storage должен быть доступен для записи пользователю веб-сервера.

person Franz    schedule 10.06.2013
comment
Как я могу это сделать? Это будет chmod? - person Bryan P; 10.06.2013
comment
Сначала я должен был сделать 777. Затем я вернулся к 755, и это сработало. Я не мог заставить 644 работать. - person Dynelight; 19.02.2014
comment
И bootstrap dir, в моем случае - person Mladen Janjetovic; 14.09.2015

Я думаю, что chmod -777 - плохая практика.

Чтобы решить проблему с разрешениями в Laravel, я сделал это (с пользователем root):

cd app/

chown -R www-data:www-data storage

cd storage/

find . -type d -exec chmod 775 {} \; && find . -type f -exec chmod 664 {} \;

И всегда в каталоге приложения / хранилища:

chown your_user:user_group .gitignore cache/.gitignore logs/.gitignore meta/.gitignore sessions/.gitignore views/.gitignore

Теперь выйдите из корневого пользователя, и все в порядке.

РЕДАКТИРОВАТЬ: это было для Laravel4. Это не работает для Laravel5 из-за другой структуры.

person François    schedule 05.03.2014
comment
Спасибо, это было полезно. Для получения дополнительной информации в OSX 10.9 пользователь и группа по умолчанию, в которых используется apache (apache, поставляемый с OSX) - это _www и _www, поэтому я сделал chown -R _www: _www storage / - person jonprasetyo; 27.09.2014
comment
+1 Только изменения для Laravel 5 заключаются в том, что вы не выполняете cd app первым, а последняя команда должна быть chown vagrant:www-data .gitignore framework/cache/.gitignore logs/.gitignore app/.gitignore framework/sessions/.gitignore framework/views/.gitignore - person Simon; 20.08.2015
comment
Наверное, проще было бы использовать chmod вместо find: chmod -R ug=rwX,o=r app/storage - person antonbormotov; 14.06.2016

Лучше не менять разрешения, просто измените owner:group папки хранилища на owner:group apache с помощью chown, это сложнее, но безопаснее, и вы скоро к этому привыкнете. можно найти в httpd.conf

MAMP:

/Applications/MAMP/conf/apache/httpd.conf

XAMMP:

/Applications/XAMPP/xamppfiles/etc/httpd.conf

Откройте httpd.conf в предпочитаемом вами редакторе и найдите User/Group. После поиска вы увидите эти строки под выделенной строкой, которую вы искали:

User someuser
Group somegroup

Как только вы уже знаете пользователя и группу, перейдите в каталог laravel и выполните chown:

chown -R someuser:somegroup app/storage

P.S: Если вы получаете разрешение при выполнении chown, попробуйте следующее:

sudo chown -R someuser:somegroup app/storage

Затем он запросит ваш пароль, введите его и сделайте.

person Community    schedule 04.11.2013
comment
В debian 7 вы должны изменить пользователя / группу в / etc / apache2 / envvars, а затем изменить владельца / var / lock / apache2. Я полагаю, что в других Linux на основе Debian должно быть похоже. - person Salvador P.; 22.03.2015

Просто столкнулся с этой проблемой на centos 7. Блокировщиком были не права доступа к папкам, а политика selinux, блокирующая nginx / php для доступа к / var / www. Итак, если вышеперечисленное не работает, попробуйте отключить selinux в качестве теста, чтобы проверить, можете ли вы повторно запустить composer без каких-либо проблем с разрешениями.

person user3670777    schedule 08.10.2014
comment
На это у меня ушел почти целый день. Вот ссылка на дополнительную информацию об этой программе, а также на то, как ее отключить. . Для быстрого ознакомления используйте следующую команду: setenforce 0 - person Drellgor; 18.11.2014
comment
Вы НЕ должны отключать selinux. Вы можете решить свою проблему здесь: stackoverflow.com/a/27377624/2570054 - person Sky; 09.12.2014

Если вы используете Apache в Ubuntu, папки хранилища и начальной загрузки / кеша должны быть доступны для записи пользователю веб-сервера.

sudo chgrp -R www-data storage bootstrap/cache
sudo chmod -R ug+rwx storage bootstrap/cache

Это позволит пользователям веб-сервера разрешить запись в эти папки.

person Ajnas Kt    schedule 04.03.2017

В моем случае возникла эта ошибка:

fopen (php: // stdout): не удалось открыть поток: операция не удалась

Я использую виртуальный хост в Wamp. поэтому я добавил эту строку в свой блок <VirtualHost> -> <Directory> в httpd-vhosts.conf файле:

Require all granted

и мой блок:

<VirtualHost *:80>
    ServerName laravel
    DocumentRoot d:/wamp/www
    <Directory  "d:/wamp/www/">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

тогда проблема решена!

person ivahidmontazer    schedule 02.12.2015