файл положить содержимое разрешение отказано
Я пытаюсь написать запрос в файл для отладки. Файл находится в database/execute.php
. Файл, который я хочу написать-это database/queries.php
.
Я пытаюсь использовать file_put_contents('queries.txt', $query)
, но я получаю
функции file_put_contents(запросы.тхт) [функция.file-put-contents]: не удалось открыть поток: разрешение отказано
у меня есть queries.txt
файл команду chmod на 777, что может проблема быть?
11 ответов:
попробуйте настроить разрешения каталога.
из терминала запустите
chmod 777 database
(из каталога, содержащего папку базы данных)apache и никто не будет иметь доступ к этому каталогу, если он правильно chmodd'Ed.
другое, что нужно сделать, это эхо "getcwd()". Это покажет вам текущий каталог, и если это не '/что-то.../database/ 'тогда вам нужно будет изменить' запрос.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 имеет встроенную поддержку ведения журнала, вам просто нужно включить ее в своей среде разработки.
взгляните на документацию для "общего журнала запросов":
ребята у меня была эта проблема в течение 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 под идентификатором 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
сбор информации по этой ссылке stackoverflow-Image save не работает с 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, 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 установлен серверов.