使用V2在自定义PHP中上传文件到Dropbox

问题描述:

我已经编写了文件上传代码,它在一台服务器上工作正常,但在本地计算机上工作正常。以下是代码:使用V2在自定义PHP中上传文件到Dropbox

<?php 

ini_set("display_errors",1); 

$api_url = 'https://content.dropboxapi.com/2/files/upload'; //dropbox api url 

$token = 'fxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; 

$headers = array('Authorization: Bearer ' . $token, 
    'Content-Type: application/octet-stream', 
    'Dropbox-API-Arg: ' . 
    json_encode(
      array(
       "path" => '/' . basename('image/1st.jpg'), 
       "mode" => "add", 
       "autorename" => true, 
       "mute" => false 
      ) 
    ), 
    'Content-Type: application/octet-stream' 
); 

$ch = curl_init($api_url); 

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($ch, CURLOPT_POST, true); 

$path = 'images/1st.jpg'; 

$fp = fopen($path, 'rb'); 
$filesize = filesize($path); 

curl_setopt($ch, CURLOPT_POSTFIELDS, fread($fp, $filesize)); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_VERBOSE, 1); // debug 

$response = curl_exec($ch); 
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); 

curl_close($ch); 

echo "<pre>response === "; print_r($response); echo "</pre>"; 
echo "<pre>http_code === "; print_r($http_code); echo "</pre>"; 


?> 

当我运行在本地的代码,我得到了以下的输出:

response === 
http_code === 0 

在测试服务器上,它产生的输出如下:

{"name": "1st.jpg", "path_lower": "/1st.jpg", "path_display": "/1st.jpg", "id": "id:UDbOKdE2bKXXXXXXECg", "client_modified": "2017-10-10T10:05:11Z", "server_modified": "2017-10-10T10:05:11Z", "rev": "4075316e33a", "size": 143578, "content_hash": "f30041XXXXXXXXXXX35ee3cXXXXXXe649afe8d"} 
200 

什么都可以这个问题的可能原因?

+0

什么curl_error($ CH );显示? –

+0

SSL证书问题:无法获得本地发行者证书 – RokiE

以下步骤:

1)https://curl.haxx.se/ca/cacert.pem

2下载最新的cacert.pem)增加以下线为php.ini

尝试禁用SSL veryfy主持人: curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

或者更正确的方法是:

https://curl.haxx.se/ca/cacert.pem

下载使用证书的更新列表中的文件

移动下载cacert.pem文件在您的系统中的某些安全位置

更新您的php.ini文件并配置该文件的路径:

对我来说解决问题
; Linux and macOS systems 
curl.cainfo = "/path/to/cacert.pem" 

; Windows systems 
curl.cainfo = "C:\path\to\cacert.pem" 
+0

我认为这不是一个答案,所以应该发布为评论而不是问题。 – RokiE