2009-11-12 177 views
1

我發現關於複製文件這個問題(在這裏),而不會覆蓋複製文件夾,而不會覆蓋

How do you copy a file in PHP without overwriting an existing file?

我需要的是一個PHP腳本將所有文件複製在文件夾,有還有一些子文件夾;所以它應該是遞歸的。

我需要通過FTP傳輸它,所以我不知道這對方法有很大的影響。

非常感謝!

+1

我可以問它是什麼,需要這是用PHP編寫的腳本。似乎使用rsync會爲您所付出的努力提供更好的里程。 – 2009-11-12 10:28:12

+0

我需要複製SQL服務器數據庫文件(.bak等),所以非常大的文件。我正在運行腳本的服務器,作爲目標服務器上的文件所在的源服務器是Linux服務器。 我正在考慮PHP,因爲所有其他腳本都在PHP中,但歡迎其他建議。 Thx – laurens 2009-11-12 10:37:07

回答

3

手冊頁面上試試這個,從a commentcopy

function recurse_copy($src,$dst) { 
    $dir = opendir($src); 
    @mkdir($dst); 
    while(false !== ($file = readdir($dir))) { 
     if (($file != '.') && ($file != '..')) { 
      if (is_dir($src . '/' . $file)) { 
       recurse_copy($src . '/' . $file,$dst . '/' . $file); 
      } 
      else { 
       copy($src . '/' . $file,$dst . '/' . $file); 
      } 
     } 
    } 
    closedir($dir); 
} 

注意,該解決方案將愉快地覆蓋中存在的$dst目錄中的任何文件。如果你想避免這種情況,你可以將this question中的代碼封裝到一個函數中,然後調用該函數而不是copy

我不確定你想通過FTP傳輸什麼,如果你澄清我很樂意編輯我的答案。

+0

非常友善,thx的答覆。此解決方案是否適用於FTP? 我想用SQL數據庫文件(相當大的文件...)傳輸幾個文件夾。 我會在不同的服務器上運行腳本,然後運行數據庫所在的服務器。目的地是另一臺服務器。 覆蓋應該完全避免,因爲文件太大了。 提前謝絕! – laurens 2009-11-12 10:17:23

+0

我對你的評論有點困惑 - 抱歉,如果我密集。如果你想從遠程文件夾中獲取文件,那麼你需要做更多的工作(參見'ftp_get'和'ftp_nlist');如果你想把這些文件放到遠程服務器上(所以你需要從源服務器上運行備份過程),那麼請參閱'ftp_put'。但埃德的權利 - PHP絕對不是這項工作的工具。 – 2009-11-12 10:48:18

+0

我的不好。顯然我需要尋找一個bash解決方案(?) – laurens 2009-11-12 10:52:53