Я пытаюсь написать запрос к файлу для отладки. Файл находится в database/execute.php
. Файл, который я хочу записать, – это database/queries.php
.
Я пытаюсь использовать file_put_contents('queries.txt', $query)
Но я получаю
file_put_contents (queries.txt) [function.file-put-contents]: не удалось открыть поток: Permission denied
У меня есть файл queries.txt chmod'd до 777, что может быть проблема?
Попробуйте настроить права доступа к каталогам.
с терминала, запустите chmod 777 database
(из каталога, содержащего папку базы данных)
apache, и никто не будет иметь доступ к этому каталогу, если он корректно chmodd.
Другое дело – echo «getcwd ()». Это покажет вам текущий каталог, и если это не «/something…/database/», вам нужно будет изменить «query.txt» на полный путь для вашего сервера.
Поймите, это довольно старый, но нет необходимости вручную записывать запросы в такой файл. У MySQL есть встроенная поддержка ведения журнала, вам просто нужно включить ее в среду разработки.
Взгляните на документацию для «общего журнала запросов»:
заключается в том, что вы можете сделать 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-файлов Ребята, у меня была эта проблема в течение 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, проверить имя отправителя. если у вас ни у кого нет проблемы с «Permission Denied», потому что что-то не определено и если имя отправителя похоже на мой id: iietj8qy@hostname5.netly.net, у вас нет проблемы.
Мой администратор изменил сервер и снова установил узел. Думаю, проблема решена, сообщите администрации вашего хостинга, что я вам сказал, и, возможно, они найдут ответ.
надеюсь, это поможет вам!
Я знаю, что это очень старый вопрос, но я хотел добавить хорошее решение с некоторыми подробными объяснениями. Вам нужно будет выполнить два утверждения по подобным системам Ubuntu, а затем он работает как шарм.
Разрешения в Linux могут быть представлены тремя цифрами. Первая цифра определяет разрешение владельца файлов. Вторая цифра – права определенной группы пользователей. Третья цифра определяет разрешения для всех пользователей, которые не являются владельцем или членом группы.
Предполагается, что веб-сервер будет выполняться с идентификатором, который является членом группы. Веб-сервер никогда не должен запускаться с тем же идентификатором, что и владелец файлов и каталогов. В Ubuntu работает apache под ID-данными id. Этот идентификатор должен быть членом группы, для которой указаны разрешения.
Чтобы предоставить директорию, в которой вы хотите изменить содержимое файлов, соответствующие права, выполните оператор:
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
Для тех, кто использует Ubuntu и получает эту ошибку при загрузке страницы локально, но не в веб-хостинге,
Я только что установил это, открыв nautilus ( sudo nautilus
) и щелкнув правой кнопкой мыши на файл, который вы пытаетесь открыть, нажмите «Свойства»> «Настройки»> и дайте прочитать запись «всем остальным»,
Сбор информации из этой ссылки. Хранилище stackoverflow-image не работает с 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 в папку, содержащую вашу папку «images». затем введите:
find images -type d -exec chmod 0755 {} \; find images -type f -exec chmod 0755 {} \; sudo chown -R www-data:www-data images
вы должны сначала изменить восприятие перед изменением владельца. введите свой пароль при появлении запроса. это сделает владелец www-data в папке с изображениями.
ваша загрузка должна теперь работать.
Там 2 пути решения этих проблем
1. используйте chmod 777 path-to-your-directory
.
если он не работает, тогда
2. просто укажите полный путь к файлу query.txt
.
Здесь решение. Чтобы скопировать img из URL-адреса. этот URL: http://img.ruphp.com/file-permissions/img.jpg
$image_Url=file_get_contents('http://img.ruphp.com/file-permissions/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.