cUrl отлично работает на localhost, но не работает на сервере и показывает только пустую страницу - PullRequest
3 голосов
/ 26 января 2020

Когда я запускаю приведенный ниже код на сервере, он показывает только пустую страницу и внезапно останавливает дальнейшее выполнение, я также проверял 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 Ответ

1 голос
/ 26 января 2020

Последнее обновление!

В ваших кодах более 1 ошибки,

вы используете FTPS в URL, который требует проверки SSL, и его false в ваших кодах.

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 не поддерживает true, поэтому они должны быть похожи на следующие в @dharman warn в другом ответе.

Но чтобы установить ssl в true, потребуется другая настройка, например cacert file et c. также

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. Ваш URL не является истинным URL $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 error 28: Превышено время ожидания соединения

ошибка cURL 28 возникает при запросе cURL не завершено в определенное количество времени.

Это происходит, когда значение тайм-аута 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.
...