2012-01-03 92 views
0

我有一個定製的CMS一組文件,而現在的客戶羣實際上是越來越大,我需要某種類型的自動更新,將通過每個cron作業做也許是晚上。指引自動化PHP腳本更新

基本上它需要更換所有的文件下/管理(包括.php然後,因爲它是指在主域的所有時間.js文件,沒有的CSS文件)。

我想知道做到這一點的最好方法是什麼 - 我的文件不在任何類型的公共github存儲庫上,所以我只需手動ZIP和上傳,或者只是在服務器上執行它文件管理器來gzip嗎?

我只是需要如何去一些這方面的指導方針,以減少安全問題等,這是最好的方法?要下載壓縮文件,然後解壓縮它?解壓縮文件時,會自動覆蓋現有文件嗎?

我不想使用這個命令行工具,因爲一些賬目的坐在我的服務器之外,所以我不能真正做任何類型的文件複製通過SSH或諸如此類的事。

謝謝你的幫助。

回答

1

你可以嘗試運行一個cron PHP腳本,通過對客戶的構建目標目錄循環,造成其內容的哈希值,然後把它比作你的主副本:

$files = array(); 
if ($handle = opendir('/path/to/files')) { 
    while (false !== ($entry = readdir($handle))) { 
     if ($entry != "." && $entry != "..") { 
      $file_hash = md5(file_get_contents('/path/to/files'.$entry)); 
      compare_and_get_contents('/path/to/files'.$entry, $file_hash); 
     } 
    } 
    closedir($handle); 
} 

的compare_and_get_contents( )函數看起來是這樣的:

function compare_and_get_contents($file_path,$hash){ 
    $get_code = file_get_content('http://mysite.com/compare?path='.urlencode($file_path).'&hash='.$hash); 
    if (strlen($get_code)>0){ 
     file_put_contents($file_path,$get_code); 
    } 
} 

你只需要編寫一個頁面(http://mysite.com/compare)相比的客戶端版本的散列的父版本的散列和打印父版本的代碼,如果它們不匹配。如果這是一個問題,您可能還想在數據傳輸時加密數據。顯然,這個代碼將需要一些修訂工作,並有幾個潛在的安全和權限問題,但它可以完成這項工作,這將是比周圍路過整個事情作爲一個zip文件帶寬不夠密集。

+0

我最終做了這樣的事情 - 從母服務器獲取文件,然後放入zip文件,然後解壓縮! – jeffkee 2012-03-26 19:26:03

1

使用VCS喜歡的git你可以創建一個cron,每天晚上將調用CVS像

git pull 

它不是必需的,該庫是公共的,但服務器需要訪問。

+0

偉大的想法 - 但給服務器訪問,我需要一個更大的GIT帳戶。我希望使用PHP文件下載器的更簡單的解決方案,類似於Wordpress的做法。 – jeffkee 2012-01-03 20:49:18

+0

@jeffkee只需在您自己的服務器上託管git存儲庫? – 2012-01-03 20:58:19

+0

不知道,你的意思是「GIT帳號」。您只需要一個帶有可選大小的硬盤和已安裝的SSH服務器的系統。這就是所有的git需求。 – KingCrunch 2012-01-03 21:02:05