簡體   English   中英

從動態鏈接卷曲PHP獲取/下載文件

[英]Curl PHP getting/download file from dynamic link

需要使用cURL從動態生成的鏈接下載

鏈接:something.com/fileid=hgkjfdhgfhdg

如果直接訪問鏈接,它將顯示下載框(文件保存選項)。

但如果使用CURL或file_get_contents,則僅返回文件名。

$URL = https://somewebsite.com/fileid=hgkjfdhgfhdg
$fp = fopen("test.txt", 'w');
$c = curl_init($URL);
curl_setopt($c, CURLOPT_FILE, $fp);  
curl_setopt($c, CURLOPT_FOLLOWLOCATION, 1);  
$contents = curl_exec($c);
$info = curl_getinfo($c);
curl_close($c); 
fclose($fp);

動態鏈接(test.txt)中的文件名是已知的。

網址= https://storage-ec2-32.sharefile.com/download.ashx?dt=dtca3192857a45452c84bd14e7500c7f46

問題是由於您正在連接到HTTPS URL,而cURL庫無法找到證明ShareFile證書的真實性所需的根CA證書捆綁包。 結果,cURL在安全方面起作用,並在啟動文件傳輸之前中止連接。

解決此問題的最佳方法是將php.ini中的curl_cainfo PHP配置開關設置為包含您所需的所有CA證書的文件的絕對路徑(根據描述cURL配置開關PHP幫助頁面 ),然后重新啟動服務器。

如果您無法執行此操作,則可以通過添加來完全禁用SSL證書驗證

curl_setopt($c, CURLOPT_SSL_VERIFYPEER, FALSE);

到您的代碼,就在$contents = curl_exec($c);上方$contents = curl_exec($c); 線。

提防最后的解決方案是不安全的,並且可能會在中間攻擊時向人敞開大門-將其用作最后的手段。

首先,應將CURLOPT_HEADER設置為0,以防止在輸出中出現標頭。 其次,您確定要打開的文件可寫嗎? 您應該檢查fopencurl_setopt的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM