2015-05-19 44 views
2

最近我創建了我自己的雲服務器,我需要能夠從一個php文件上傳文件,將文件從我的電腦傳輸到我自己的雲服務器。所以我試圖用捲曲,像這樣:使用PHP上傳我的個人雲服務器上的文件

<?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,奇怪的......

回答

3

我是有上傳到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

代替感謝您的幫助。 //

相關問題