Пытаюсь написать запрос к файлу для отладки. Файл находится в формате database/execute.php
. Файл, в который я хочу писать, - это database/queries.php
.
Я пытаюсь использовать file_put_contents('queries.txt', $query)
Но я получаю
file_put_contents (query.txt) [function.file-put-contents]: не удалось открыть поток: в доступе отказано
У меня есть queries.txt
файл chmod'd на 777, в чем может быть проблема?
php
file-io
file-permissions
Hailwood
источник
источник
php.ini
файл на предмет чего-либо, что могло бы препятствовать доступу к файлу?Ответы:
Попробуйте изменить права доступа к каталогу.
с терминала запустить
chmod 777 database
(из каталога, содержащего папку базы данных)apache, и никто не будет иметь доступа к этому каталогу, если он правильно настроен с помощью chmodd.
Еще нужно выполнить команду echo "getcwd ()". Это покажет вам текущий каталог, и если это не «/something.../database/», вам необходимо заменить «query.txt» на полный путь к вашему серверу.
источник
chmod +x /parent/directory
, для каждого родительского каталога цели.chmod +x /parent/directory
,chmod +x /parent
и т. д.Другой вариант
это то, что вы можете сделать
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, проверьте имя отправителя. если это от Никто, у вас есть проблема с "Permission Denied", потому что что-то не определено, и если имя отправителя похоже на мой идентификатор: 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
http://www.linux.org/threads/file-permissions-chmod.4094/
источник
Сбор информации по этой ссылке. Stackoverflow-image save не работает с chmod 777 и от пользователя azerafati и Loek Bergman.
если вы заглянете в файл / etc / apache / envvars, вы увидите что-то вроде:
Apache запускается под именем пользователя www-data.
«0755» означает, что владелец файла может читать / писать / выполнять, но группа и другие пользователи не могут писать. поэтому в терминале ur перейдите в папку, содержащую вашу папку изображений. затем введите:
find images -type d -exec chmod 0755 {} \; find images -type f -exec chmod 0755 {} \; sudo chown -R www-data:www-data images
перед сменой владельца вы должны изменить права доступа. введите свой пароль при появлении запроса. это сделает www-data владельцем папки изображений.
теперь ваша загрузка должна работать.
источник
Для тех, кто использует Ubuntu и получает эту ошибку при загрузке страницы локально, но не на веб-хостинге,
Я просто исправил это, открыв nautilus (
sudo nautilus
) и щелкнув правой кнопкой мыши файл, который вы пытаетесь открыть, щелкните свойства> Настройки> и разрешите чтение и запись всем остальным.источник
была та же проблема; моя проблема заключалась в том, что selinux был настроен на принудительное исполнение.
Я продолжал получать ошибку «Не удалось открыть поток: доступ запрещен» даже после изменения chmoding на 777 и проверки того, что все родительские папки имеют права на выполнение для пользователя apache. Оказывается, моя проблема заключалась в том, что selinux был настроен на принудительное исполнение (я использую centos7), это devbox, поэтому я отключил его.
источник
Это можно решить, выполнив следующие действия:
1. $ php artisan cache:clear 2. $ sudo chmod -R 777 storage 3. $ composer dump-autoload
Надеюсь, это поможет
источник
Если вы загружаете из git с локального компьютера на сервер, вам иногда потребуется очистить кеш из-за файлов просмотра, которые он загружает вместе с ним / или другими кешированными файлами.
Иногда это может просто помочь, если ваше приложение работало до git pull
источник
это может помочь. У меня это сработало. попробуйте в терминале
setenforce 0
источник
Вот решение. Чтобы скопировать 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)
источник
Есть 2 способа решить эту проблему:
1. использовать
chmod 777 path-to-your-directory
.если не работает, то
2. просто укажите полный путь к вашему файлу
query.txt
.источник
Кроме того, как сказано в
file_put_contents man page
вphp.net
остерегайтесь именования вопросов.file_put_contents($dir."/file.txt", "hello");
может не работать (даже если синтаксис верен), но
file_put_contents("$dir/file.txt", "hello");
работает. Я испытал это на разных серверах с установленным php.
источник
$dir."/file.txt"
функционально эквивалентен"$dir/file.txt"
, если предполагается, что$dir
это строка. Более того, это поведение не задокументировано на php.net, как утверждает Kivanc.