Я новичок в Laravel. Я пытался открыть, http://localhost/test/public/
и я получил
Ошибка в обработчике исключений.
Я погуглил и изменил разрешение на использование каталога хранилища, chmod -R 777 app/storage
но безрезультатно.
Я изменил debug=>true
в app.php
и посетил страницу и получил Ошибка в обработчике исключений:
Поток или файл "/var/www/html/test/app/storage/logs/laravel.log" не удалось открыть: не удалось открыть поток: отказано в доступе в / var / www / html / test / bootstrap / compiled. PHP: 8423
Затем я изменил права доступа к каталогу хранения с помощью команды chmod -R 644 app/storage
, ошибка «Ошибка в обработчике исключений» исчезла, и страница загружена. Но там я получаю это:
file_put_contents (/var/www/html/laravel/app/storage/meta/services.json): не удалось открыть поток: отказано в разрешении
php artisan cache:clear
потомchmod -R 777 app/storage
наконецphp artisan dump-autoload
Ответы:
Предложение от vsmoraes работало для меня:
Laravel> = 5.4
Laravel <5.4
ПРИМЕЧАНИЕ: НЕ ДЕЛАЙТЕ ЭТОГО НА ЛЮБОМ ДИСТАНЦИОННОМ СЕРВЕРЕ (DEV ИЛИ ПРОИЗВОДСТВЕ)
Когда я задал этот вопрос, это была проблема на моем локальном хосте, работающем на виртуальной машине. Поэтому я подумал, что установка 777 была достаточно безопасной, однако люди правы, когда говорят, что вам нужно искать другое решение. Попробуйте сначала 775
источник
php artisan cache:clear
тогдаchmod -R 777 storage
и потомcomposer dump-autoload
chmod -R 777 storage
вместо этогоphp artisan cache:clear
это правильный ответ. Затемsudo chmod -R ug+rw storage
дает правильные разрешения для меня, не даваяothers
777
это не относится к Laravel, но мыслительный процесс для разработчиков Laravel: «сделай так, чтобы он работал СЕЙЧАС, мне все равно, как», просто так777
). Как правило, никогда, никогда не устанавливайте что-либо,777
чтобы заставить что-то работать. ПОНИМАЙТЕ свой сервер и пользователей / роли и устанавливайте их соответствующим образом; не взламывайте это. Ваши клиенты доверяют вам сделать это правильно.Для Google, которые столкнулись с этой проблемой в Laravel 5.
Это проблема с правами доступа, вызванная тем, что разные пользователи пытаются записать один и тот же файл журнала в
storage/logs
папку с разными разрешениями.Что происходит, если ваша конфигурация laravel, вероятно, настроена на ежедневную регистрацию ошибок, и поэтому ваш веб-сервер (apache / nginx) может создать этот файл под пользователем по умолчанию, в зависимости от вашей среды это может быть что-то вроде
_www
OSX илиwww-data
* NIX, тогда проблема происходит, когда вы могли запустить несколько команд кустарного производства и получить некоторые ошибки, поэтому ремесленник напишет этот файл, но с другим пользователем, потому что PHP на терминале выполняется другим пользователем, фактически вашим пользователем для входа в систему, вы можете проверить это, выполнив эту команду :Если ваш логин-пользователь создал этот файл журнала на вашем веб-сервере, вы не сможете записывать в него ошибки, и наоборот, потому что laravel
655
по умолчанию записывает файлы журнала с разрешениями, которые позволяют владельцу только писать в него.Чтобы исправить это временное состояние, вы должны вручную дать разрешения группе
664
для этого файла, чтобы и ваш логин, и пользователь веб-сервера могли писать в этот файл журнала.Чтобы навсегда избежать этой проблемы, вы можете настроить надлежащие разрешения при создании нового файла
storage/logs
в каталоге, унаследовав разрешения из каталога, этот ответ https://unix.stackexchange.com/a/115632 может помочь вам решить который.источник
Вы не должны давать 777 разрешений. Это риск для безопасности. Для пользователей Ubuntu в Laravel 5 я реже решила сменить владельца хранилища каталогов:
Попробуйте следующее:
В системах на основе Ubuntu www-data является пользователем apache.
источник
chmod 777
ответы. Спасибо ~chmod 777
это полный кошмар.chmod 777
последствия?Для всех, кто использует Laravel 5, Homestead и Mac, попробуйте это:
источник
bootstrap/cache/compiled.php
пытался записать в этот каталог, но он не существовал и в результате выдает ошибку разрешений. Спасибо.несколько раз SELINUX вызывал эту проблему; вы можете отключить selinux с помощью этой команды.
источник
Задача решена
это дает разрешение на запись в приложение, фреймворк, логи. Надеюсь, это поможет
источник
НИКОГДА НЕ ДАЙТЕ ЕГО РАЗРЕШЕНИЕ 777!
перейдите в каталог проекта laravel на вашем терминале и напишите:
Таким образом, вы делаете своего пользователя владельцем и предоставляете привилегии:
1 Выполнить, 2 Запись, 4 Чтение
1 + 2 + 4 = 7 означает (rwx)
2 + 4 = 6 означает (rw)
наконец, для доступа к хранилищу, ug + rwx означает, что вы даете пользователю и группе 7
источник
Для бродячих пользователей решение:
(в бродяге) PHP кеш ремесленника: очистить
(вне бродяги) chmod -R 777 приложение / хранилище
(в бродяге) композитор дамп-автозагрузка
Важно убедиться, что вы используете chmod в вашей локальной среде, а не внутри vagrant!
источник
Попробуйте еще раз с
chmod -R 755 /var/www/html/test/app/storage
. Используйте с sudo дляOperation not permitted
в chmod. Используйте Проверить владельца разрешения, если все еще есть ошибка.источник
В соответствии с Laravel 5.4, который является последним на момент написания этой статьи, если у вас возникнут какие-либо проблемы, вам нужно изменить разрешение. НЕ СЛУШАЙТЕ ТОГО, ЧТОБЫ СКАЗАТЬ, ЧТОБЫ УСТАНОВИТЬ 777 ДЛЯ ЛЮБОГО СПРАВОЧНИКА. Это проблема безопасности. Измените разрешение папки хранения следующим образом
Измените разрешение на загрузочную папку следующим образом
Теперь убедитесь, что вы выполняете обе команды из каталога вашего приложения. В будущем у вас не возникнет проблем с разрешением. 775 не ставит под угрозу безопасность вашей машины.
источник
Предложите правильное разрешение, если для Apache,
источник
Если у вас Laravel 5 и вы ищете постоянное решение, используйте как
php artisan
командную строку, так и сервер Apache:sudo chmod -R 777 vendor storage
echo "umask 000" | sudo tee -a /etc/resolv.conf
sudo service apache2 restart
Смотрите подробное объяснение здесь .
источник
ДЛЯ ЛЮБОГО РАБОТЫ ОС С SELINUX: Правильный способ разрешить httpd писать в папку хранилища laravel:
Затем, чтобы применить изменения немедленно:
С SELinux может возникнуть проблема, но если он присутствует, я бы настоятельно рекомендовал вам изучить его, а не обходить его полностью.
источник
sudo semanage fcontext -a -t httpd_sys_rw_content_t '/path/to/www/storage(/.*)?'
У меня была та же проблема, и следующие шаги помогли мне решить проблему.
<?php echo exec('whoami'); ?>
И запустите файл из веб-браузера. Это дало бы пользователю apache. В моем случае это пользователь ec2, так как я использовал aws с cronjob, установленным в /etc/cron.d/. Это может быть другой пользователь для других.
sudo chown -R ec2-user:<usergroup> /app-path/public
Вам необходимо определить и использовать правильные «пользователь» и «пользовательская группа» здесь.
источник
Если вы используете Linux или Mac, даже вы можете запустить
ssh terminal
. Вы можете использовать терминал для запуска этой команды,Если вы используете Windows, вы можете запустить с помощью
git bash
.Вы можете скачать git форму https://git-scm.com/downloads .
источник
Xampp для использования:
источник
Каждый раз, когда я изменяю app.php, я получаю разрешение на запрещение записи bootstrap / cache / services.json, поэтому я сделал это, чтобы это исправить:
источник
решил это для меня
источник
Установка разрешения на 777, безусловно, ужасная идея!
... но
Если вы получаете ошибку разрешения, связанную с папкой «storage», вот что у меня сработало:
источник
Если вы используете laradock, попробуйте
chown -R laradock:www-data ./storage
в вашем рабочем пространстве контейнеристочник
В моем случае решением было изменить разрешение
app/storage/framework/views
иapp/storage/logs
каталоги.источник
Если кто-то еще сталкивается с подобной проблемой с ошибкой прав доступа к файлу fopen, но достаточно мудро, чтобы не слепо chmod 777, вот мое предложение.
Проверьте команду, которую вы используете для разрешений, которые нужны apache:
'R' означает открытый только для чтения, и если вы не редактируете файл, это то, что вы должны установить. Это означает, что apache / www-data требуется как минимум разрешение на чтение этого файла, которое, если файл создается с помощью laravel, уже будет иметь разрешение на чтение.
Если по какой-либо причине вы должны написать в файл:
Затем убедитесь, что у apache также есть права на запись в файл.
http://php.net/manual/en/function.fopen.php
источник
Просто запустите свой сервер, используя
artisian
php artisian serve
Затем получите доступ к вашему проекту с указанного URL
источник
У меня та же проблема при запуске Vagrant на Mac. решил проблему, изменив пользователя сервера Apache в файле https.conf:
Запустите apache под пользователем php вместо демона пользователя, чтобы решить проблему доступа к файлу с php
теперь созданный php файл кэша может быть прочитан и отредактирован apache без каких-либо ошибок прав доступа.
источник
После долгих проб и ошибок с правами доступа к каталогу я получил прозрение ... в разделе диска не осталось места. Просто хотел поделиться, чтобы убедиться, что никто не настолько глуп, чтобы продолжать искать решение в неправильном направлении.
В Linux вы можете использовать
df -h
для проверки размера вашего диска и свободного места.источник
Эта проблема на самом деле вызвана различными пользователями, которые хотят
write/read
подать, но отказано, вызывают разные права собственности. может быть, вы с правами root установили laravel до того, как войдете на свой сайт как пользователь laravel, где laravel является владельцем по умолчанию, так что это действительно реальная проблема. Таким образом, когда пользователь 'laravel' хочет прочитать / записать весь файл на диске по умолчанию, чтобы ему было отказано, причина в том, что этот файл принадлежит пользователю 'root'.Для решения этой проблемы вы можете следовать так:
sudo chown -hR your-user-name /root /nameforlder
или в моем случае
sudo chown -hR igmcoid /root /sublaravel
Сноска:
root
как имя первого владельца, который устанавливал раньшеyour-user-name
как владелец по умолчанию, который на самом деле писать / читать на сайте.namefolder
В качестве имени папки, которую вы хотите изменить владельца.источник
Надеется, это поможет где-то как-то ...
источник
При работе в Windows 10 с Laragon и Laravel 4, мне казалось, что невозможно было вручную изменить разрешения, так как выполнение
chmod
-команд в Laragon-in-built-Terminal не оказало никакого эффекта.Однако в этом терминале можно было перейти в папку хранилища и вручную добавить нужные папки следующим образом:
cd
-Command в терминале , вы попадете в папку (возможно , потребуется изменить этот путь , чтобы удовлетворить вашу структуру файла). Командаmkdir
-com создаст каталог с заданным именем.У меня не было возможности протестировать этот подход в Laravel 5, но я ожидаю, что подобный подход должен работать.
Конечно, может быть лучший способ, но по крайней мере это был разумный обходной путь для моей ситуации (исправление ошибки:)
file_put_contents(/var/www/html/laravel/app/storage/meta/services.json): failed to open stream
.источник
Я решил свою проблему, сделав это.
источник
Я попытался дать
777
доступ к папке хранения, и у меня есть работа1) перейдите в корневую директорию laravel (
/var/www/html
для меня) и выполните следующую командуисточник