2011-08-03 4 views
0

나는 이것을 행운으로 처리하려고 노력해 왔습니다. 나는 파일을 다운로드하고 UNZIPS하는 PHP 스크립트를 가지고있다. 여기에 문제 없습니다.디렉토리 내용을 얻고 PHP를 사용하여 다른 디렉토리로 이동하는 방법

그런 다음 압축 해제 된 파일을 가져와 루트 디렉토리의 모든 파일을이 폴더의 파일로 바꿔야합니다. 문제는 폴더가 루트 디렉토리에 있다는 것입니다. 내가 필요로하는 디렉토리

/update/--UNZIPED STUFF-- 

의 루트에 폴더라는 업데이트 할 수있는 아카이브의 압축을 풀고 내 다운로드 스크립트를 실행 한 후

예 : 내 디렉토리를 .:

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

같은 것입니다 거의 모든 파일/dirs 루트 디렉토리에서 추측 업데이트 파일을 제외하고 몇 가지 다른 파일을 삭제하고 파일/폴더를 dir의 루트에 업데이트 폴더 내부로 이동합니다.

아이디어가 있으십니까?

UPDATE

좋아, 그래서 바로 것 같다 코드를 만든 적이 있지만 연결을 해제하거나 이름을 사용하는 경우에 파일 권한을 많이 얻을. 어떻게해야할까요? 여기

코드의 비트 내가
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는 비어 있지 않은 폴더 tho와 작동하지 않습니다. 그래서 내가 뭘 찾았는지에서 재귀 적으로 비어 있지 않은 폴더의 내용을 삭제해야합니까? –

+0

정확하게.디렉토리 자체를 제거하기 전에 디렉토리의 모든 내용을 삭제해야합니다. – lamelas

0

루트 아래의 모든 디렉토리/파일 목록을 가져온 다음 "backup"디렉토리를 무시하면서 링크를 사용하여 삭제하십시오. 다음은 PHP 복사 또는 shell_exec mv * 명령을 실행하여 파일을 백업에서 루트로 이동할 수 있습니다.

+0

쉘 exec을 실행할 수 없습니다. PHP가 명령 줄에 액세스하는 것을 허용하지 않습니다. 그렇지 않으면 아마 내 프로젝트에 git pull을 사용할 것입니다. –

관련 문제