Страницы

Поиск по вопросам

суббота, 21 декабря 2019 г.

Как отключить сообщения cURL?

#php #curl #ftp


Добрый день. Есть код на PHP который получает список файлов с FTP сервера. Код работает
через прокси, который поддерживает режим FTP over HTTP. Вот
сам код

$proxy_host = "1.1.1.1";  
$proxy_port = 8080;  
$curl = curl_init();  
$ftp_url = 'ftp://login:password@ftp:21/dir'; 
curl_setopt($curl,CURLOPT_TIMEOUT,10); 
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl,CURLOPT_FTPLISTONLY,1);
curl_setopt($curl,CURLOPT_PROXYTYPE,CURLPROXY_HTTP);
curl_setopt($curl,CURLOPT_PROXY,$proxy_host);
curl_setopt($curl,CURLOPT_PROXYPORT,$proxy_port);
curl_setopt($curl,CURLOPT_PROXYUSERPWD,'login_proxy:password_proxy');
curl_setopt($curl,CURLOPT_URL,$ftp_url); 
curl_setopt($curl,CURLOPT_VERBOSE,FALSE);
curl_setopt($curl,CURLOPT_HEADER,0);  
$content=curl_exec($curl);
echo $content;


Код работает прекрасно, однако вывод списка файлов всегда предваряет сообщение
curl 230 OK. Current restricted directory is /. Это сообщение присутствует даже тогда
когда я пытаюсь скачать файлы. То есть содержимое всех скачанных файлов содержит это
диагностическое сообщение. Как отключить вывод этого сообщения?

Дополнение
Параметр CURLOPT_VERBOSE (true,false,отсутствует) никак не влияет на сообщение. Есть
подозрение что он включен по умолчанию и не отключается.

Еще дополнения
пробовал на версиях PHP 5.3.13 и 5.6.30
версия curl (из phpinfo) 7.24.0
Важно то, что без proxy сервера все работает отлично.  
    


Ответы

Ответ 1



curl 230 OK. Current restricted directory is / Это сообщение выводится не из php, а из прокси-программы через которую вы отправляете запрос. Я не знаю что за софт там стоит может быть это 'Pure-FTPd' или что-то в этом роде. Но похоже что это он делает STDOUT перед показом того что вы запросили.. и соответственно ваш курл уже все это и подтягивает. Нужно уже смотреть в сторону как это заглушить, отправить в > /dev/null, смотреть конфиги и т.д.

Ответ 2



Попробуйте опции CURLOPT_HEADER или CURLINFO_HEADER_OUT (а, вероятно, и обе вместе) поставить в false. Тут описаны дополнительные опции, пошарьтесь в них если не помогло.

Ответ 3



Если внимательно прочитать CURLOPT_VERBOSE : TRUE для вывода подробной информации. Записывает вывод в STDERR или файл, указанный с помощью CURLOPT_STDERR. По скольку CURLOPT_VERBOSE - FALSE ничего не сказано, и притом в вашем случае он не соответствует логическому продолжению,то думаю что с использованием опции CURLOPT_STDERR поможет решить вашу проблему. Замените: ..... curl_setopt($curl,CURLOPT_VERBOSE,FALSE); ..... На: Заранее создайте файл curl.txt ..... $stderr = fopen("curl.txt", "w"); curl_setopt($curl, CURLOPT_VERBOSE, TRUE); curl_setopt($curl, CURLOPT_STDERR, $stderr); .....

Комментариев нет:

Отправить комментарий