0

アップロードされた画像を取得し、ディレクトリが存在する場合はディレクトリを作成し、そのディレクトリに画像をアップロードするステージング サイトでスクリプトを実行しています。

作成されたディレクトリをライブサイトに変更しようとしていますが、うまくいきません。ライブ URL ではなく、まだステージング 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 が格納されていても、作成またはアクセスしたいディレクトリがまだステージング ディレクトリで作成/アクセスされていることにあります。

4

2 に答える 2

0

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

代わりにパスとして使用するため、ステージング領域内で開始するのではなく、「ライブ」バージョンで動作します。

于 2010-10-05T20:21:54.173 に答える
0

Hey Guys、助けてくれてありがとう...エラーは実際にはphp.ini設定のopen_basedirから発生しています。サブドメイン ディレクトリの下にいるため、ディレクトリを書き込むことができません。

于 2010-10-06T19:59:25.810 に答える