2013-10-27 4 views
0

Для моего веб-сайта мне нужно скопировать одну папку из основной учетной записи на моем VPS в (автоматически) новую созданную учетную запись cPanel. Я пытался сделать это с помощью PHP, через FTP, используя следующий код (функция):PHP каталог копирования FTP рекурсивный

function ftp_sync ($dir) { 
    global $conn_id; 

    if ($dir != ".") { 
      if (ftp_chdir($conn_id, $dir) == false) { 
       echo ("Change Dir Failed: $dir<BR>\r\n"); 
       return; 
      } 
      if (!(is_dir($dir))) 
       mkdir($dir); 
     chdir ($dir); 
    } 

     $contents = ftp_nlist($conn_id, "."); 
    foreach ($contents as $file) { 

      if ($file == '.' || $file == '..') 
      continue; 

      if (@ftp_chdir($conn_id, $file)) { 
        ftp_chdir ($conn_id, ".."); 
        ftp_sync ($file); 
     } 
      else 
      ftp_get($conn_id, $file, $file, FTP_BINARY); 
     } 
    } 

    foreach (glob("*") as $file) 
    { 
     if(substr_count($file, ".") > 0) 
     { 
      $source_file = $file; 
      $destination_file = $file; 
      $upload = ftp_put($conn_id, "public_html/".$destination_file, $source_file, FTP_BINARY); 
      echo "<br />"; 
      // check upload status 
      if (!$upload) { 
       echo "FTP upload has failed!"; 
      } else { 
       echo "Uploaded $source_file to $ftp_server as $destination_file"; 
      } 
     }else{ 
      ftp_sync($dir); 
     } 
    } 


    ftp_chdir ($conn_id, ".."); 
     chdir (".."); 

} 

Однако это не похоже на работу (нет новых каталогов не будут созданы и загружены) ... Кто-нибудь знает, почему это не работает и как я могу заставить его работать?

Заранее благодарен!

С наилучшими пожеланиями, Skyfe.

EDIT: Я забыл упомянуть, что я запускаю сценарий как скрипт cronjob, также убедившись, что он имеет все права, поскольку он выполняется с основного сервера.

ответ

1

Прежде всего, убедитесь, что ваш каталог на целевом сервере доступен для записи. Временный chmodding его до 0777 должен помочь. Остальная часть вашего скрипта, похоже, в порядке. Вы можете попробовать установить журнал ошибок на все ошибки (просто добавьте error_reporting(E_ALL); в начале вашего скрипта). Затем PHP должен выводить каждую ошибку, предупреждение или уведомление, которое может предоставить вам больше информации.

+0

Благодарим за сообщение, однако ошибка оказалась проблемой хоста/сервера (в конфигурации php.ini), которую они исправили для меня сейчас. Однако chmodding не проблема, но я сделал свою собственную функцию для загрузки файлов рекурсивных файлов ftp и заставил их работать! – Skyfe

0

Не получил функцию, поэтому я воссоздал ее по-своему и получил ее работу!

... 
ftp_mkdir($conn_id, "public_html/".$dir); 
ftp_upload($dir); 

// close the FTP stream 
ftp_close($conn_id); 

function ftp_upload($dir) { 
    global $conn_id; 
    if($handle = opendir($dir)) 
    { 
    while(false !== ($file = readdir($handle))) 
    { 
     if($file != "." && $file != ".." && $file != "...") { 
     if(substr_count($file, ".") > 0) 
     { 
      $full_dir = "public_html/".$dir; 
      $source_file = $file; 
      $destination_file = $file; 
      $upload = ftp_put($conn_id, $full_dir."/".$destination_file, $dir."/".$source_file, FTP_BINARY); 
      echo "<br />"; 
      // check upload status 
      if (!$upload) { 
       echo "FTP upload has failed!"; 
      } else { 
       echo "Uploaded ".$source_file." to ".$ftp_server." as ".$destination_file; 
      } 
     }else{ 
      ftp_mkdir($conn_id, "public_html/".$dir."/".$file); 
      ftp_upload($dir."/".$file); 
     } 
     } 
    } 
    } 

} 

Теперь осталось только следить за тем, чтобы он работал и с большими структурами каталогов (без огромного времени загрузки)!

Смежные вопросы