проблема создания каталогов с помощью chmodDirectory - PullRequest
0 голосов
/ 05 октября 2010

У меня есть сценарий, запущенный на промежуточном сайте, где он берет загруженное изображение, создает каталог (если он существует) и загружает изображение в указанный каталог.

Я пытаюсь сменить каталог, который создается, на живой сайт, но безуспешно. Совершенно уверен, что именно этот блок кода все еще ищет промежуточный URL вместо живого.

function chmodDirectory( $path = '.', $level = 0 ){  
$ignore = array( 'cgi-bin', '.', '..' ); 

$dh = @opendir( $path ); 


while( false !== ( $file = readdir( $dh ) ) ){ // Loop through the directory 
  if( !in_array( $file, $ignore ) ){
    if( is_dir( "$path/$file" ) ){
      chmod("$path/$file",0777);
      chmodDirectory( "$path/$file", ($level+1));
    } else {
      chmod("$path/$file",0777); // desired permission settings
    }//elseif 

  }//if in array 

}//while 

closedir( $dh ); 

} // функция

?> Заранее спасибо за любую помощь!

РЕДАКТИРОВАТЬ: Проблема заключается в том, что, хотя я изменил пути и база данных хранит правильные URL-адреса, каталог, к которому я хочу создать или получить доступ, все еще создается / доступен в промежуточном каталоге.

Ответы [ 2 ]

0 голосов
/ 06 октября 2010

Привет, ребята, спасибо за вашу помощь ... ошибка на самом деле происходит из open_basedir в настройках php.ini.Я не могу написать каталог, потому что я нахожусь в каталоге поддоменов.

0 голосов
/ 06 октября 2010

Все команды, связанные с файлами в PHP, все знают о «текущем рабочем каталоге».Вы начинаете свой chmodDirectory() с . в качестве пути, что означает «текущий рабочий каталог», то есть по умолчанию каталог, в котором находится скрипт.

Если вы запускаете промежуточный сайт какподкаталог «живого» сайта, нет возможности иметь функцию «как есть», указывать на действующие каталоги, когда вы уходите от относительного «.»каталог и только копать глубже.Например, если ваш скрипт находится в:

/home/sites/example.com/htdocs/staging/v1.1/upload.php

, тогда первый обработанный каталог будет

/home/sites/example.com/htdocs/staging/v1.1/

Если вы хотите запустить процесс в «живой» области, вы 'нам придется вызывать функцию с исходным путем:

chmodDirectory('../..'); // start two directories above the current working dir

или еще лучше:

chmodDirectory('/home/sites/example.com/htdocs/'); // start at this absolute path

в качестве пути вместо этого, так что он будет работать "живым"версия вместо запуска в пределах рабочей области.

...