Ошибка PHP fopen (): не удалось открыть поток: отказано в разрешении

Я учусь писать плагин для WordPress. Мне нужна помощь в записи данных в XML-файл. Я нахожусь на своем локальном компьютере, Mac с MAMP. У меня PHP 5.2.13. В моем плагине есть:

$file_handle = fopen('markers.xml', 'w');
$stringdata = "Test Info";
fwrite($file_handle, $stringdata);
fclose($file_handle);

Выполнение вышеуказанного дает мне следующую ошибку:

Предупреждение: fopen (markers.xml) [function.fopen]: не удалось открыть поток: в разрешении отказано в /Users/my_name/Sites/my_site/wp-content/plugins/my_plugin_folder/my_plugin_main_file.php в строке 73

Предупреждение: fwrite (): предоставленный аргумент не является допустимым ресурсом потока в /Users/my_name/Sites/my_site/wp-content/plugins/my_plugin_folder/my_plugin_main_file.php в строке 75

Предупреждение: fclose (): предоставленный аргумент не является допустимым ресурсом потока в /Users/my_name/Sites/my_site/wp-content/plugins/my_plugin_folder/my_plugin_main_file.php в строке 76

Я пробовал использовать абсолютный путь в строке $ file_handle: http://my_site/wp-content/plugins/my_plugin_folder/markers.xml. Но это не сработало.

Я также попытался изменить разрешения для markers.xml следующим образом:

(Я): Чтение и запись (неизвестно): Только чтение для всех: Чтение и запись

По какой-то причине мой Mac не позволял мне изменить (неизвестно) на чтение и запись. Я не уверен, что это имеет значение. Я щелкнул файл правой кнопкой мыши и выбрал «Получить информацию», чтобы изменить разрешения.

В phpInfo () у меня есть:

«Зарегистрированные потоки PHP https, ftps, compress.zlib, compress.bzip2, php, file, data, http, ftp»

Проблема с настройками WordPress? или это просто проблема с PHP?

Есть предложения, как решить эту проблему?

Спасибо.


person Laxmidi    schedule 05.10.2011    source источник
comment
Возможный дубликат PHP - не удалось открыть поток: нет такого файл или каталог   -  person Vic Seedoubleyew    schedule 11.09.2016


Ответы (2)


Возможно, вам потребуется изменить разрешения как администратор. Откройте терминал на своем Mac, а затем откройте каталог, в котором находится markers.xml. Затем введите:

sudo chmod 777 markers.xml

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

person Chris    schedule 05.10.2011
comment
Привет @Chris, Спасибо за сообщение. Я установил для markers.xml значение 777, но все равно получаю сообщение об ошибке. Если я изменю каталоги, перемещаясь вверх на mysite, не возникнет ли проблем с безопасностью? Любой совет? Спасибо. - person Laxmidi; 05.10.2011
comment
Привет @Chris, я изменил chmod на 777 на один уровень выше. Я также использовал абсолютный путь на локальном компьютере вместо абсолютного пути хоста. Теперь это работает! Спасибо. - person Laxmidi; 06.10.2011
comment
Спасибо! В этом очень нуждаются: D - person cwiggo; 27.11.2014
comment
CHMOD 777 очень небезопасен и не должен использоваться - person Black; 26.01.2016
comment
@EdwardBlack Что является более безопасной альтернативой? Будет ли работать chmod -u www-data markers.xml? - person Ayaskant Mishra; 16.11.2016
comment
@AyaskantMishra, ты можешь использовать chmod 760 markers.xml. У владельца есть все разрешения, у группы есть права на чтение и запись, а у всех остальных нет разрешения вообще. - person Black; 16.11.2016

[function.fopen]: failed to open stream

Если у вас есть доступ к вашему файлу php.ini, попробуйте включить Fopen. Найдите соответствующую строку и установите для нее значение «on»: & если в wp, например, localhost / wordpress / function.fopen в php.ini:

allow_url_fopen = off
should bee this 
allow_url_fopen = On

And add this line below it:
allow_url_include = off
should bee this 
allow_url_include = on
person Shaun Palmer    schedule 19.06.2013
comment
Это полная чушь. Вместо решения проблемы вы вводите дыру в безопасности. Если бы вы внимательно прочитали вопрос, вы бы увидели, что он хочет открыть ЛОКАЛЬНЫЙ файл: fopen ('markers.xml', 'w'); Но вам нужно allow_url_fopen = On только для открытия УДАЛЕННЫХ файлов! Например, для fopen ('example.com/....xml'); См. antary.de/2011/05/ 26 / - person Elmue; 01.12.2014