разрешение на доступ к файлу запрещено - PullRequest
82 голосов
/ 07 февраля 2011

Я пытаюсь записать запрос в файл для отладки. Файл находится в database/execute.php. Файл, в который я хочу записать, является database/queries.php.

Я пытаюсь использовать file_put_contents('queries.txt', $query)

Но я получаю

file_put_contents (questions.txt) [function.file-put-contents]: не удалось открыть поток: разрешение отказано

У меня есть файл queries.txt chmod'd для 777, в чем может быть проблема?

Ответы [ 13 ]

63 голосов
/ 07 февраля 2011

Попробуйте настроить права доступа к каталогу.

из терминала, запустите chmod 777 database (из каталога, в котором находится папка базы данных)

apache, и никто не будет иметь доступа к этому каталогу, если онchmodd'ed правильно.

Другая вещь, которую нужно сделать, это echo "getcwd ()".Это покажет вам текущий каталог, и если это не '/something.../database/', вам нужно изменить 'query.txt' на полный путь для вашего сервера.

13 голосов
/ 23 мая 2017

Другой вариант

заключается в том, что вы можете сделать Apache (www-data) владельцем папки

sudo chown -R www-data:www-data /var/www

, которая должна заставить file_put_contents работать сейчас.Но для большей безопасности вам лучше также установить права доступа, как показано ниже:

find /var/www -type d -print0 | xargs -0 chmod 0755 # folder
find /var/www -type f -print0 | xargs -0 chmod 0644 # files
  • изменить /var/www на корневую папку ваших файлов php
7 голосов
/ 17 марта 2013

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

Ознакомьтесь с документацией для «общего журнала запросов»:

http://dev.mysql.com/doc/refman/5.1/en/query-log.html

3 голосов
/ 14 июля 2017

Сбор информации по этой ссылке stackoverflow-сохранение изображения не работает с chmod 777 и от пользователя azerafati и Loek Bergman

если вы посмотрите в файл / etc / apache / envvars, вы увидите что-то вроде:

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

Apache запускается под именем пользователя www-data

'0755' означает, что владелец файла может читать / писать / выполнять, но группа и другие пользователи не могут писать. поэтому в вашем терминале перейдите в папку, содержащую папку с изображениями. затем введите:

find images -type d -exec chmod 0755 {} \;
find images -type f -exec chmod 0755 {} \;
sudo chown -R www-data:www-data images

Вы должны сначала изменить разрешения, прежде чем сменить владельца. введите ваш пароль при появлении запроса. это сделает 'www-data' владельцем папки с изображениями.

Ваша загрузка должна работать.

3 голосов
/ 21 декабря 2015

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

Разрешения в Linux могут быть представлены тремя цифрами. Первая цифра определяет разрешение владельца файлов. Вторая цифра - права доступа определенной группы пользователей. Третья цифра определяет права доступа для всех пользователей, которые не являются ни владельцем, ни членом группы.

Предполагается, что веб-сервер будет работать с идентификатором, который является членом группы. Веб-сервер никогда не должен работать с тем же идентификатором, что и владелец файлов и каталогов. В Ubuntu запускается apache под id www-data. Этот идентификатор должен быть членом группы, для которой указаны разрешения.

Чтобы дать каталогу, в котором вы хотите изменить содержимое файлов, необходимые права, выполните оператор:

find %DIR% -type d -exec chmod 770 {} \;

. Это означало бы, что в вопросе OP разрешения для каталога% ROOT% / database должны быть изменены соответствующим образом. Поэтому важно не иметь файлов в этом каталоге, которые никогда не должны быть изменены или удалены. Поэтому рекомендуется создавать отдельный каталог для файлов, содержимое которых необходимо изменить.

Разрешения на чтение (4) для каталога означают возможность собирать все файлы и каталоги с их метаданными в каталоге. Права на запись (2) дают разрешение на изменение содержимого каталога. Подразумевается добавление и удаление файлов, изменение разрешений и т. Д. Разрешение на выполнение (1) означает, что у вас есть право войти в этот каталог. Без последнего невозможно углубиться в каталог. Веб-серверу нужны разрешения на чтение, запись и выполнение, когда необходимо изменить содержимое файла. Для этого нужна группа цифра 7.

Второе утверждение касается вопроса ФП:

find %DOCUMENT_ROOT%/database -type f -exec chmod 760 {} \;

Требуется умение читать и писать документ, но не обязательно выполнять файл. 7 дается владельцу файлов, 6 - группе. Веб-серверу не нужно иметь разрешение на запуск файла, чтобы изменить его содержимое. Эти разрешения на запись должны предоставляться только файлам в этом каталоге.

Всем другим пользователям не следует давать никаких разрешений.

Для каталогов, которые не требуют изменения своих файлов, достаточно групповых прав доступа 5. Документация о разрешениях и некоторые примеры:

https://wiki.debian.org/Permissions

https://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions

http://www.linux.org/threads/file-permissions-chmod.4094/

3 голосов
/ 06 февраля 2014

Ребята, у меня была эта проблема в течение 1 месяца, и я сделал все, но не смог ее исправить, но теперь я знаю решение.

Я использую общий Linux-хостинг, когда мой администратор изменил php до 5.3, я получил много ошибок для кода "file_put_contents".попробуйте проверить мой план:

На вашем хосте создайте файл типа mytest.php, вставьте этот код и сохраните:

<?php        mail('Your-EMail','Email-Title','Email-Message');        ?>

Откройте URL-адрес "www.your-domain.com / mytest.php "один раз, а затем проверьте свою электронную почту.у вас должно быть электронное письмо от вашего хоста с информацией, которую вы ввели в mytest.php, проверьте имя отправителя.если это из Никто , у вас есть проблема с «Отказано в доступе», потому что что-то не определено, и если имя отправителя похоже на мой идентификатор: iietj8qy@hostname5.netly.net, у вас нет проблем.

Мой админ изменил сервер и снова установил хост, я думаю, и проблема была решена, сообщите администрации хоста то, что я вам сказал, и, возможно, они найдут ответ.

надеюсь, это поможет вам!

0 голосов
/ 14 мая 2019

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

php artisan cache:clear

Иногда это может быть просток хитрости, если ваше приложение работало до git pull

0 голосов
/ 25 апреля 2019

Это можно решить, выполнив следующие действия:

1. $ php artisan cache:clear

2. $ sudo chmod -R 777 storage

3. $ composer dump-autoload

Надеюсь, это поможет

0 голосов
/ 13 марта 2018

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

Я продолжал получать сообщение об ошибке «Не удалось открыть поток: отказано в доступе», даже после перехода на 777 chmoding и проверки того, что все родительские папки имеют разрешения на выполнение для пользователя apache.Оказывается, моя проблема была в том, что selinux был настроен на принудительное выполнение (я на centos7), это devbox, поэтому я отключил его.

0 голосов
/ 12 января 2017

Есть 2 способа решения этой проблемы
1.используйте chmod 777 path-to-your-directory.
, если не работает, то
2.просто укажите полный путь к вашему файлу query.txt.

...