2011-08-03 7 views
0

私は運がうまく行かないようにしようとしています。私はファイルをダウンロードし、UNZIPSにPHPスクリプトを持っています。ここでは問題ありません。ディレクトリの内容を取得してPHPで別のディレクトリに移動する方法

その後、解凍されたファイルを取得し、ルートディレクトリのすべてのファイルをこのフォルダのファイルに置き換える必要があります。問題は、フォルダがルートディレクトリにあることです。

例:。:私のディレクトリは、私は私のダウンロード・スクリプトを実行した後、私は私が必要DIR

/update/--UNZIPED STUFF-- 

のルートに更新というフォルダにアーカイブを解凍し、この

/ 
/folder 1 
/folder 2 
/folder 3 
/file.php 
/file2.php 
etc... 

のようなものです私が推測する更新フォルダと他のいくつかのファイルを除いてルートDIRから実質的にすべてのファイル/ディレクトリを削除し、更新フォルダ内のファイル/フォルダをdirのルートに移動します。

アイデア?

UPDATE

[OK]をので、私は右のようだコードを作ったが、私はリンク解除または名前の変更使用しているときに、ファイルのアクセス許可の多くを得ます。それについてどうすればいいですか?ここで

は、コードのビットは、私が

echo '<table>'; 
    $updateContents = scandir('./'); 
    foreach($updateContents as $number=>$fileName){ 
    if($fileName != 'update' && $fileName != 'config.ini' && $fileName != 'layout.php' && $fileName != '..' && $fileName != '.' && $fileName != '.git' && $fileName != '.gitignore'){ 
     if(is_dir($fileName)){ 
      moveDownload($fileName, 'old/'.$fileName); 
     } else { 
      if(rename($fileName, 'old/'.$fileName)){ 
      echo '<tr><td>'.$fileName.' moved successfully </td><td><font color="green">OK</font></td></tr>'; 
      } else { 
      echo '<tr><td>Could not move file '.$fileName.'</td><td><font color="red">ERROR</font></td></tr>'; 
      } 
     } 
     } 
    } 
    echo '</table>'; 

を作ったとmoveDownload機能は、私がどこかここに見られるものです。それは空でないフォルダを移動し、私によって少し修正されました。

function moveDownload($src,$dst){ 
    $dir = opendir($src); 
    while(false !== ($file = readdir($dir))){ 
    if (($file != '.') && ($file != '..') && ($file != 'config.ini') && ($file != 'layout.php') && ($file != 'sbpcache') && ($file !='update')){ 
     if (is_dir($src.'/'.$file)){ 
     if(file_exists($dst.'/'.$file)){ 
      rrmdir($dst.'/'.$file); 
     } 
     } 
     if(@rename($src . '/' . $file, $dst . '/' . $file)){ 
      echo '<tr><td>'.$file.' moved successfully </td><td><font color="green">OK</font></td></tr>'; 
     } else { 
     if(@chmod($src.'/'.$file, 0777)){ 
      if(@rename($src . '/' . $file, $dst . '/' . $file)){ 
       echo '<tr><td>'.$file.' moved successfully </td><td><font color="green">OK</font></td></tr>'; 
      } else { 
       echo '<tr><td>Could not move file '.$file.'</td><td><font color="red">ERROR RENAME</font></td></tr>'; 
      } 
     } else { 
      echo '<tr><td>Could not move file '.$file.'</td><td><font color="red">ERROR CHMOD</font></td></tr>'; 
     } 
     } 
    } 
    } 
    closedir($dir); 
} 

私も同じことをもう一度行いますが、更新フォルダから移動します。

基本的には、まず物事を削除するのではなく、古いものを古いフォルダに移動してから新しい物を移動しようとしますが、どこにでも権限の問題があります。私が 'sudo chmod 777 -R'を持っていても、いくつかのファイルは動いてしまいます。何か案は?

+0

に問題あなたは() '、または'もしくはshell_exec() ''システムへのアクセス権を持っていますか? – Bogdacutu

+0

いいえ、PHPにコマンドラインへのアクセスを許可したくありません。 –

答えて

0

PHPのopendirを使用すると、ルートディレクトリ内のすべてのファイルとディレクトリを反復処理できます。 unlinkを使用してファイルまたはフォルダを削除し、項目を削除するかどうかを確認するif節を追加できます。

+0

それはまさに私が試みてきたことです。 Unlinkは空でないフォルダとはうまく動作しません。だから、私が見つけたことから、空でないフォルダのコンテンツを再帰的に削除する必要がありますか? –

+0

正確に。ディレクトリ自体を削除するには、ディレクトリのすべての内容を削除する必要があります。 – lamelas

0

rootの下にあるすべてのディレクトリ/ファイルの一覧を取得してからループしないでください。「バックアップ」ディレクトリを無視して(リンクを使用して)それらを削除してください。 次に、phpコピーまたはshell_exec mv *コマンドを実行して、ファイルをバックアップからルートに移動することができます。

+0

シェルexecを実行できません。 PHPがコマンドラインにアクセスできるようにしたくない。それ以外の場合は、私のプロジェクトにgit pullを使うだけでしょう。 –

0
  1. 何のためにルートフォルダを使用しますか。 /tmp
  2. 使用しているものunlink/rmdir
関連する問題