Библиотека программиста

19.10.2021 - Проблемы с доступом к файлам, созданным PHP-скриптами?

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

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

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

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

}

$path $_SERVER["QUERY_STRING"];

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

chmod_R($path0777);
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.
Опубликовано на сайте: http://www.coders-library.ru
Прямая ссылка: http://www.coders-library.ru/index.php?name=news&op=view&id=330