пятница, 12 декабря 2008 г.

Как решить проблемы с доступом к файлам площадки, созданным PHP-скриптами?

Дело в том, что PHP-сценарии, запущенные модулем mod_php, выполняются от имени пользователя wwwserver. Соответственно, если на чтение/модификацию не были выставлены разрешения для всех (достаточно 666 — для файлов, 777 — для каталогов), то модификация созданных такими скриптами файлов (каталогов) пользователю uXXXX (id площадки) будет запрещена (при доступе по SSH, по FTP).

Исключить проблему можно, установив достаточные для модификации файлов посредством функции chmod.

Сделать это рекурсивно можно, исполнив PHP-сценарий: function chmod_R($path, $perm) {

$handle = opendir($path);
while (
false !== ($file = readdir($handle)) ) {
if ( (
$file !== ".") && ($file !== "..") ) {
if (
is_file($path."/".$file) ) {
chmod($path . "/" . $file, $perm);
}
else {
chmod($path . "/" . $file, $perm);
chmod_R($path . "/" . $file, $perm);
}
}
}
closedir($handle);
}

$path = $_SERVER["QUERY_STRING"];

if (
$path{0} != "/" ) {
$path = $_SERVER["DOCUMENT_ROOT"] . "/" . $path;
}

chmod_R($path, 0777);
echo
$path;
?>

Разместите этот файл на площадке, в директории, доступной веб-серверу, например, как domain.tld/www/chmod.php
где domain.tld/www — корневая директория (DocumentRoot) вашего сайта на сервере.

Вызывать скрипт нужно так: http://domain.tld/chmod.php?путь_к_нужной_директории
или так: http://domain.tld/chmod.php?
/home/uXXXXX/domain.tld/www/путь_к_нужной_директории

В первом случае указывается путь относительно DocumentRoot для вашего сайта (domain.tld/www/ в данном примере). Во втором случае (uXXXXX — идентификатор вашей площадки) — абсолютный путь от корневой директории сервера.

При запуске скрипта без параметров будут изменены права для всех файлов и директорий, располагающихся в DocumentRoot.

Комментариев нет:

Отправить комментарий