файл put contents разрешение отказано

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

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

, но я получаю

функции file_put_contents(запросы.тхт) [функция.файл-положить-содержание]: не удалось открыть поток: разрешение отказано

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

11 ответов


попробуйте настроить разрешения каталога.

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

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

другое, что нужно сделать, это эхо " getcwd ()". Это покажет вам текущий каталог, и если это не '/что-то.../ database / ' then you'll need to change 'query.txt ' к полному пути для вашего сервера.


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

что вы можете сделать 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-файлов

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

взгляните на документацию для "общего журнала запросов":

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


ребята у меня была эта проблема в течение 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 у тебя нет проблем.

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

надеюсь, что это помогает тебе!


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

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

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

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

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

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

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

второй утверждение находится в вопросе о OP:

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/


сбор информации по этой ссылке 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' означает, что владелец файла может читать/писать/исполнять, а группа и остальные пользователи не могут писать. Итак, в UR terminal, cd в папку, содержащую папку "Изображения". затем введите:

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

вы должны сначала изменить persmissions перед изменением владельца. введите пароль при появлении запроса. это сделает "www-data" владельцем папки изображений.

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


для тех, кто использует Ubuntu и получает эту ошибку при загрузке страницы локально, но не на веб-хостинге,

Я просто исправил это, открыв nautilus (sudo nautilus) и щелкните правой кнопкой мыши файл, который вы пытаетесь открыть, выберите Свойства > настройки > и дайте прочитать запись "всем остальным"


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

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


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


вот решение. Чтобы скопировать img из URL-адреса. этот URL-адрес: http://url/img.jpg

$image_Url=file_get_contents('http://url/img.jpg');

создать нужный путь закончить имя с .jpg

$file_destino_path="imagenes/my_image.jpg";

file_put_contents($file_destino_path, $image_Url)

кроме того, как говорится в file_put_contents man page на php.net остерегайтесь вопросов именования.

file_put_contents($dir."/file.txt", "hello");

может не работать (даже если это правильно по синтаксису), но

file_put_contents("$dir/file.txt", "hello");

строительство. Я испытал это на разных установленных серверах php.