curl 跨伺服器同步檔案

航空母艦發表於2015-07-13

有一個需求,情況如下:

兩臺伺服器,一臺測試伺服器[apache],一臺生產伺服器[nginx],產品編輯人員在測試伺服器使用php upload批量上傳產品,圖片,經檢查後,可以同步其所上傳的產品和圖片[打包成zip檔案]到生產伺服器上,但生產伺服器上不接受php upload上傳檔案的,那麼就不能在測試伺服器上直接post到正式伺服器了。

 

暫時想到幾個方法:
1. 使用rsync手動同步過去,但需要配置,並且需要php執行shell命令,但我不想這樣。
2. 可以使用socket來傳送資料,但需要開啟埠,我也不想這麼做,因如果一時忘記在防火牆開放埠,就無法傳送了
3. 測試伺服器傳送訊號到生產伺服器,讓生產伺服器使用php curl從測試伺服器下載檔案並處理
通過比較,還是覺得第3種方法比較妥當,直接全程使用php來處理,至少減少一些不必要的維護麻煩

4.直接通過url全路徑方式呼叫測試伺服器圖片,方法簡單缺陷測試伺服器刪除圖片就沒有辦法

 測試伺服器傳送post請求

<?php
function execUpload(){
    $ch = curl_init();
    //$filePath = 'd:\usr\www\translate\document\Readme.jpg'
    if (class_exists('\CURLFile')) {//php>5.4
        $post_data = array('file' => new \CURLFile($filePath));
    } else {
        $post_data = array('file' => '@' . $filePath);
    }
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch,CURLOPT_BINARYTRANSFER,true);
    curl_setopt($ch, CURLOPT_POSTFIELDS,$post_data);
    curl_setopt($ch, CURLOPT_URL, 'http://www.b.com/handleUpload.php');//正式伺服器處理上傳
    //curl_setopt($ch, CURLOPT_INFILESIZE, filesize($file)); //這句非常重要,告訴遠端伺服器,檔案大小  
    $info= curl_exec($ch);
    curl_close($ch);

    print_r($info);
}

從測試環境下載

function handleUpload(){
print_r($_POST);
echo '===file upload info:';
print_r($_FILES);
}

 

 
 
 
 

相關文章