簡體   English   中英

cUrl 在 localhost 上工作正常,但在服務器上不起作用,只顯示空白頁

[英]cUrl working fine on localhost but it's not working on server and only shows blank page

當我在服務器上運行以下代碼時,它只顯示空白頁面並突然停止進一步執行,我還檢查了已安裝的服務器上的 cUrl。

這是我的代碼。

$ftp_server = 'ftps://'.'server/Voorraadtonen link.csv'; 
$ch = curl_init(str_replace(" ","%20",$ftp_server));
curl_setopt($ch, CURLOPT_URL, $ftp_server);
curl_setopt($ch, CURLOPT_USERPWD,'username'.':'.'password');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_FTP_SSL, CURLFTPSSL_TRY);
curl_setopt($ch, CURLOPT_FTPSSLAUTH, CURLFTPAUTH_TLS);
//curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_PORT, 990);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0');
curl_setopt($ch, CURLOPT_VERBOSE,true);
$output = curl_exec($ch);
$error_no = curl_errno($ch);
echo $output; exit;

最新更新!

您的代碼中有 1 個以上的錯誤,

您在需要 SSL 驗證的 url 中使用 FTPS,並且在您的代碼中使用 FTPS。

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
//Dont use try! you shouldnt use
curl_setopt($ch, CURLOPT_FTP_SSL, CURLFTPSSL_TRY);

它們應該是真的: SSL不支持真,所以它們應該像在另一個答案中關注@dharman 警告一樣。

但是將 ssl cacert true 將需要另一個設置,例如cacert文件等。

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
//and include cacert.pem
curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');

在此處下載 cacert 文件: https ://curl.haxx.se/docs/caextract.html

2.您的網址不是真正的網址$ftp_server = 'ftps://'.'server/Voorraadtonen link.csv'; , 這個 url 什么也得不到,但它應該至少在error_log文件中返回一個錯誤,正如你所說的所有錯誤報告都已啟用

3.你的代碼應該是這樣的

$curl = curl_init();
$file = fopen("link.csv", 'w');
curl_setopt($curl, CURLOPT_URL, "ftp://ftp.site.com/link.csv"); 
//Make sure for correct url
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($curl, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');
//Make sure for correct url
curl_setopt($curl, CURLOPT_FILE, $file); 
curl_setopt($curl, CURLOPT_USERPWD, "$_FTP[username]:$_FTP[password]");
//Make sure for your ftp credentials
curl_setopt($curl, CURLOPT_TIMEOUT, 20); //20 seconds will be enough
curl_exec($curl);
echo curl_errno($ch);
echo curl_error($ch);
curl_close($curl);
fclose($file);

不應需要另外 1 個左側標題,但以防萬一。

curl_setopt($curl, CURLOPT_HEADER, false); //Or
curl_setopt($curl, CURLOPT_HEADER, true);

現在它應該可以正常工作了

注意:示例代碼是一個工作示例,您可以根據需要對其進行編輯

更新:修改后你說你在你的代碼中做了(仍然沒有向我們展示),最后我們得到一個錯誤。 我再次要求您將修改后的代碼添加到您的問題中。

Error_no 28 cURL 錯誤 28:連接超時

當 cURL 請求未在一定時間內完成時,會發生 cURL 28 錯誤。

當 cURL 超時值設置得太低或防火牆阻止 cURL 請求時會發生這種情況。

另一種可能性是安全模塊,例如 Apache mod_security 模塊。

要修復 cURL 錯誤 28,您可以聯系您的托管服務提供商。

所以基本上!

您的服務器被阻塞。 您的憑據與所需的憑據不匹配。 服務器需要 SSL,但您沒有設置它。 您的函數運行最大服務器內存限制設置。

    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, "ftp.site.com/link.csv"); 
//make sure your path to file is correct
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($curl, CURLOPT_USERPWD, "$_FTP[username]:$_FTP[password]");
//make sure your login credentials correct
    curl_setopt($curl, CURLOPT_TIMEOUT, 500);
//Set timeout for connection
    curl_exec($curl);
    echo curl_errno($ch);
    echo curl_error($ch);
//Get errors
    curl_close($curl);
//Importand close curl connection.

暫無
暫無

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

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