cUrl отлично работает на локальном хосте, но не работает на сервере и показывает только пустую страницу

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

person Haq Nawaz    schedule 26.01.2020    source источник
comment
прочитайте файл error_log и включите отчеты об ошибках в сообщениях об ошибках curl или php if(curl_errno($ch)){ throw new Exception(curl_error($ch)); }   -  person Dlk    schedule 26.01.2020
comment
отчеты об ошибках уже включены error_reporting(E_ALL); ini_set('display_errors', 1);   -  person Haq Nawaz    schedule 26.01.2020
comment
Тогда у вас должна быть ошибка, используйте мой код, указанный в комментарии, и прочитайте файл error_log   -  person Dlk    schedule 26.01.2020
comment
Я использовал его, но ничего не показывает   -  person Haq Nawaz    schedule 26.01.2020
comment
Попробуйте это в своем URL curl -u user:password 'ftps://mysite/%2fusers/myfolder/myfile/csv' -o ~/folder/link.csv   -  person Dlk    schedule 26.01.2020
comment
Я не думаю, что вы можете получить что-либо с этого URL-адреса ftps://'.'server/Voorraadtonen link.csv   -  person Dlk    schedule 26.01.2020
comment
У вас есть что-нибудь в $error_no?   -  person Nigel Ren    schedule 26.01.2020
comment
Нет, я ничего не получаю в $error_no   -  person Haq Nawaz    schedule 26.01.2020


Ответы (1)


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

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

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

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 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. Ваш 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 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.
person Dlk    schedule 26.01.2020
comment
@HaqNawaz обновите вопрос и покажите, что вы сделали, пожалуйста - person Dlk; 26.01.2020
comment
Я запускаю тот же код на локальном хосте, который работает и загружает данные, но на сервере он не работает, даже если он не показывает никаких ошибок, и я включил отчеты об ошибках и увеличил время выполнения, но ничего не показывает. - person Haq Nawaz; 26.01.2020
comment
Localhost и live-серверы работают по-разному, 1 из них SSL localhost не требуется, но live-серверы нужны, CURLOPT_RETURNTRANSFER должен быть включен на live-сервере, но не обязателен на локальном, http-заголовки могут потребоваться на live-сервере, есть масса вещей, которые я могу скажите, так вы хотите, чтобы это работало? отредактируйте свой вопрос и добавьте последний код, который вы пробовали. и используйте пример в моем вопросе, он работает нормально, я проверил его лично. и добавляйте другие шаг за шагом, чтобы вы могли найти, что не так, мы не можем догадаться о вашей настройке и ваших кодах, если вы не покажете нам и не попробуете то, что мы говорим. - person Dlk; 26.01.2020
comment
Я внес в него изменения, и он дает мне 28 по ошибке. - person Haq Nawaz; 27.01.2020
comment
@HaqNawaz Хорошо хоть что-то нам показать. вы должны попробовать мой код, ошибка означает тайм-аут соединения, поэтому 1. вставьте этот curl_close($ch); под $curl error_no и удалите exit; в своем коде, может быть, ваш завиток работает бесконечно. 2.Установите тайм-аут curl_setopt($ch, CURLOPT_TIMEOUT, 500);. 3. Иногда заголовки также вызывают эту проблему, поэтому установите для заголовков значение false и посмотрите результат, если это вызывает проблему. Я обновил свой ответ, добавил тайм-аут. и, пожалуйста, добавьте последний код, который вы пробовали, и получите ошибку 28. - person Dlk; 27.01.2020
comment
Спасибо за ответ, я ценю это. Я также увеличил время ожидания до 500, но тогда он ничего не показывает curl_setopt($curl, CURLOPT_TIMEOUT, 500); - person Haq Nawaz; 27.01.2020
comment
@HaqNawaz попробуйте второй код в ответе, так как он ничего не меняет, просто укажите путь к вашему файлу и информацию для входа и посмотрите, работает ли он. - person Dlk; 27.01.2020