2017-05-09 81 views
0

我有一個向電報發送請求的方法,這個函數在我的服務器上按預期正常工作。轉移到客戶服務器後,我收到來自電報的錯誤:Bad Request: URL host is emptyPHP CURL多部分表單數據無法上傳文件(PHP版本5.6)

是通過捲曲發送的數據是:

$data = array(
    "chat_id" => "user_id", 
    "video" => "@/path/to/file/tested/successfully", 
    "caption" => "My Text" 
); 

並且對於捲曲設置的選項是如下:

curl_setopt($ch, CURLOPT_URL, 'URL/TO/TELEGRAM/API'); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0); 
curl_setopt($ch, CURLOPT_TIMEOUT, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-type: multipart/form-data")); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                  
curl_setopt($ch, CURLOPT_POST, TRUE); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

此代碼正常工作我的服務器上,我認爲是有必須在服務器上設置的配置。

另一個應該關聯的問題是:當我提供錯誤的文件路徑時,在第一臺服務器上,我預計從curl得到Error Code: 3, Couldn't open file,但在第二臺服務器上,我將再次得到Bad Request: URL host is empty

所以,也許我可以說,第二臺服務器上的捲曲無法理解video索引是一個文件。

首先服務器是專用的,但第二個被共享主機(2主機測試)(愉1)
第一服務器PHP版本是38年5月5日,但第二個是5.6(愉2 )
改變第二個PHP版本38年5月5日之後,它工作正常(發現3)

任何幫助將不勝感激

回答

1

in php ver 5.5 and above set curl_setopt($ch, CURLOPT_SAFE_UPLOAD, true)並將@/pathToFile更改爲new \CURLFile($pathToFile)。根據PHP changeLog :使用@file語法

上傳,如果CURLOPT_SAFE_UPLOAD選項設置爲FALSE,現在只支持。應該使用CURLFile來代替。

轉向CURLOPT_SAFE_UPLOAD假是不是最好的做法,不贊成
讀取第一個評論here約CURLFile更多信息。

+0

簡短,準確和完整的答案。非常感謝 –

相關問題