curl 跨服务器同步文件

有一个需求,情况如下:

两台服务器,一台测试服务器[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);
}

猜你喜欢

转载自hudeyong926.iteye.com/blog/2226744