2013-07-17 84 views
1

我正在寻找写一个服务器上的函数来接受从任何其他服务器上传的文件,换句话说就是类似于api。使用CURL接受文件上传php

假设在www.upload.com上有一个上传脚本来上传文件。而不是在该服务器上进行发布和保存,我希望他们在fileserver.com上卷曲我的脚本以保存文件。

我上fileserver.com功能来保存文件看起来像这样

function upload($data) { 

    $uploaddir = '/data/'; 
    $uploadfile = $uploaddir . 'filename.jpg'; 

    if(move_uploaded_file($data['upload_file'], $uploadfile)) { 
     return 'saved successfully'; 
    } else { 
     return 'bad file'; 
    } 

    } 

和upload.com服务器上我测试的例子与此:

if($_POST) { 

$ch=curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'http://fileserver.com/upload.php'); 
curl_setopt($ch, CURLOPT_POST, TRUE); 
curl_setopt($ch, CURLOPT_POSTFIELDS, '[email protected]'.$data['img_file']['tmp_name']); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$result = curl_exec($ch); 
curl_close($ch); 
} 

请记住这是作为一个API的目的,所以执行curl的功能是严格测试的。上传功能是api功能。有谁知道如何做到这一点,或者我做错了什么,甚至有可能。

回答

0

嗯,其实我已经编写的东西是:https://github.com/chris-l/urImgAPI

我的需求是这样的: 我做了一个网站,托管的虚拟机上,在那里我有这样的允许上传图像的形式,但我不想通过提供图像来浪费虚拟机的带宽,因此我得到了一个廉价的共享主机服务(只有php),并在那里安装了PHP开发的RESTful API,这使我能够使用此API从任何地方保存图像。

该API具有安全功能,可防止随机人员通过要求签名将文件保存在我的文件服务器上。签名的工作原理如下:

$signature = md5(md5sum(your_image_file) . "your secret key"); 

而且您必须将请求的签名作为参数传递。这样,您永远不会传输密钥,并有助于防止其他人将图像存储在文件服务器上。

虽然我创建了用于上传图片的API,但它可以轻松更改为托管任何类型的文件。 (也许我会改变它在未来)

是根据AGPL3许可证发布,所以检查它,我希望它可能对你有用。