使用PHP在我的Owncloud服务器上上传文件

最近我创建了自己的云服务器,我需要能够从PHP表单上传文件,将文件从我的电脑传输到我自己的云服务器.所以我尝试使用Curl,像这样:

<?PHP
    $url = "5.25.9.14/remote.PHP/webdav/plus.png";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_CUSTomrEQUEST, "PUT"); // -X PUT
    curl_setopt($ch, CURLOPT_USERPWD, "root:root"); // --user
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, TRUE); // --data-binary
    curl_setopt($ch, CURLOPT_POST,1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, array(
        'img/plus.png' => '@'.realpath('img/plus.png')
        )
    );
    $output = curl_exec($ch);
    curl_close($ch);
?>

我一直受到this post和这个命令的启发:

curl -X PUT "http://server.com/owncloud/remote.PHP/webdav/file.zip" --data-binary @"/Users/Root/Downloads/file.zip"

命令行,他正在工作,但不是我的PHP.我成功上传文件,但文件已损坏,我不知道原因:/.也许我错过了MIME类型?获取损坏的文件是否足够?

你看到我错了吗?
最好的问候,Zed13

编辑:当我创建我上传文件文件时,它是类型数据而不是png,奇怪……

解决方法:

我也有上传到owncloud的问题.有相同的症状,命令行curl工作,但不是PHP curl调用.

感谢你的帖子,我能够让它运作起来.这对我有

// upload backup
$file_path_str = '/tmp/' . date('Ymd') . '.tar.gz';

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'http://server/remote.PHP/webdav/backups/' . basename($file_path_str));
curl_setopt($ch, CURLOPT_USERPWD, "user:pass");
curl_setopt($ch, CURLOPT_PUT, 1);

$fh_res = fopen($file_path_str, 'r');

curl_setopt($ch, CURLOPT_INFILE, $fh_res);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($file_path_str));

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, TRUE); // --data-binary

$curl_response_res = curl_exec ($ch);
fclose($fh_res);

不同之处是:

> CURLOPT_PUT而不是CURLOPT_CUSTomrEQUEST
> CURLOPT_INFILE和CURLOPT_INFILESIZE而不是CURLOPT_POSTFIELDS

谢谢你的帮助.
//

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...