В PHP на OSX 10.5 fopen = Отказано в доступе

Я запускаю стандартную установку PHP и Apache на OSX 10.5.8, а настройки CHMOD папки, которую я пытаюсь открыть (заказы), — 777, группа — _WWW.

$filename = 'orders/54c9942b.txt';

if (!$handle = fopen($filename, 'w')) {
    return(false);
}

Я получаю следующее:

Warning: fopen(orders/54c9942b.txt) [function.fopen]: failed to open stream: Permission denied in /Users/New/Sites/thisisnothere/order-save.php on line 36

*Изменить: я протестировал его на своем веб-сервере (за который я плачу, а не настраиваю), и он работает так, как я ожидал. Это наводит меня на мысль, что это проблема с конфигурацией моего сервера, может быть, проблема с доступом в Apache? или пхп? Я совершенно не знаком с настройкой Apache.


person Jason D    schedule 21.04.2011    source источник


Ответы (4)


Попробуйте использовать полный путь к файловой системе в вашей команде fopen() и посмотрите, работает ли это. Попробуйте это в другом месте, которое, как вы знаете, тоже сработает (возможно, /tmp).

person Sam    schedule 21.04.2011
comment
Это работает, когда я пытаюсь писать в /tmp, это похоже на прогресс. Однако полный путь не работает. - person Jason D; 22.04.2011
comment
Я дважды проверил, и в конце концов CHMOD папки, в которую я пытался записать, не был 777. Д'о. Спасибо за совет по проверке записи в /tmp, это дало мне понять, что ошибка не в PHP! - person Jason D; 22.04.2011

Разрешение, которое имеет значение, - это разрешение файла, а не каталога, в котором он находится. Я уверен, что именно в этом ваша проблема.

person Tyler Eaves    schedule 21.04.2011
comment
Однако файл еще не существует - я пытаюсь создать его с помощью fopen. Разве это не то, как я должен создавать новый файл? - person Jason D; 22.04.2011

«Если вы пытаетесь запустить эту программу и у вас возникают ошибки, вы можете проверить, предоставили ли вы доступ к файлу PHP для записи информации на жесткий диск», взятого из tizag.com Похоже, вы должны установить разрешения для самого файла php, как заявил Тайлер.

person ftw    schedule 21.04.2011
comment
Файл PHP, который выполняет вызов, - это CHMOD 777, разве это не дает ему разрешения? Владелец тот же (имя моего компьютера), а группа _WWW в файле php. (То же самое, что и папка, в которую я пытаюсь писать). - person Jason D; 22.04.2011

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

Это имеет значение, если вы вызываете php самостоятельно непосредственно на консоли или вызываете тот же файл php через локальный веб-сервер. Я обнаружил, что мой Mac (лев) запускает php через веб-сервер как пользователь «localaccounts».

Тогда я решил проблему следующим образом:

Шаг 1: Измените группу текущего каталога и файлов, которые необходимо изменить, через веб-сервер на группу под названием «localaccounts». Например. Введите следующую команду в терминале, чтобы применить ее к текущему каталогу, подкаталогу «user images» и файлу foo.sqlite.

chgrp -R localaccounts . foo.sqlite user\ images/

Шаг 2: Предоставьте членам группы разрешение на запись с помощью запятой

chmod g+w -R . foo.sqlite user\ images/

Обратите внимание, что точка означает текущий каталог.

Я попробовал то же самое на своем веб-хостинге, но они не позволяют этого делать. Вместо этого они посоветовали мне использовать PHP CGI. Затем PHP будет выполняться, как мой доступ к FTP-пользователю. Я думаю, что это более безопасно, но я еще не пробовал.

person Kağan Kayal    schedule 03.01.2012