有一個需求,情況如下:
兩臺伺服器,一臺測試伺服器[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);
}