LINUX.ORG.RU
ФорумAdmin

nginx + php + curl


0

2

Подскажите по настройке этой связки плиз.
Система Debian GNU/Linux, стоят пакеты:
nginx 0.7.67-3
php5 5.3.3-4
php5-cgi 5.3.3-4
php5-cli 5.3.3-4
php5-common 5.3.3-4
php5-curl 5.3.3-4
php5-gd 5.3.3-4
php5-imagick 3.0.0~rc1-1
php5-mcrypt 5.3.3-4
php5-memcache 3.0.4-4
php5-mysql 5.3.3-4
php5-recode 5.3.3-4
php5-suhosin 0.9.32.1-1
curl 7.21.2-1
libcurl3 7.21.2-1

Все вроде настроено, проблема в следующем:
Есть php скрипт использующий curl_init(), curl_setopt(), curl_exec().
Если я вызываю его как php -f test.php то он прекрасно отрабатывает,
если я вызываю wget 'http://127.0.0.1:80' то он ОТРАБАТЫВАЕТ но возвращает ошибку curl_exec...


php -f это пакет php5-cli, когда мы заходим по http то дергаем nginx а он уже /usr/bin/php5-cgi из пакета php5-cgi...

как, что и где донастроить чтобы оно взлетело и из под nginx ?
сам php повторюсь работает (условно печатает «hello world»), но функции curl из него не работают будучи запущенными из nginx-php-cgi а не из php-cli...

★★★★

э

мона скрипт глянуть ? мот он юзает ченьть не то.

mcdir
()

Какую ошибку хоть возвращает то?

Настройки php5-cli и php5-cgi лежат в разных инишниках. Курл прописан в обоих?

iSage ★★★★
()

вот скрипт test.php:

<?php

    echo "\nstart\n";

    $url = 'http://xxx.xxxxxxx.ru/xxxxxx.php';

    $ch = curl_init($url);
    if ($ch == FALSE) { echo "FALSE0"; }

    $rc = curl_setopt($ch, CURLOPT_POST, true);
    if ($rc == FALSE) { echo "FALSE1"; }

    $rc = curl_setopt($ch, CURLOPT_POSTFIELDS, 'shit');
    if ($rc == FALSE) { echo "FALSE2"; }

    $rc = curl_setopt($ch, CURLOPT_HTTPGET, false);
    if ($rc == FALSE) { echo "FALSE3"; }

    $rc = curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    if ($rc == FALSE) { echo "FALSE4"; }

    $rc = curl_setopt($ch, CURLOPT_TIMEOUT, 5);
    if ($rc == FALSE) { echo "FALSE5"; }

    $result = curl_exec($ch);

    $err    = curl_errno( $ch );
    $errmsg = curl_error( $ch );

    if ($err != 0)
    {
        echo 'ERROR[curl_exec()]: '.$errmsg;
    }

    echo '['.$result.']';

    echo "\nstop\n";
    flush();
?>

quest ★★★★
() автор топика

$ php -f test.php

start
[дынные ответа удаленного сервера]
stop

quest ★★★★
() автор топика

Возможно юзеру, от имени которого работает php-cgi запрещено устанавливать внешние соединения.

FatBastard ★★
()
Ответ на: комментарий от ventilator

>Скорее всего в конфиге nginx нет сервера с server_name 127.0.0.1
он слушает на 127.0.0.1:80 я же показывал выхлоп wget где видно что php в принципе работает, curl в нем не работает...

quest ★★★★
() автор топика
Ответ на: комментарий от quest

Таймаут указывает либо на проблемы с днс (возможно пхп в рамках нгинкса не может получить адреса днс-серверов), либо на запрещение в фаерволе.

FatBastard ★★
()
Ответ на: комментарий от quest

У вас задан CURLOPT_TIMEOUT, а ответ на запрос в этот период не поступает («Operation timed out»). Как начсёт увеличить таймаут?
Хотя, если запрос потенциально очень долгий, то наверное стоит переосмыслить то, что вы таким образом пытаетесь с удалённым сервером сделать.

Ещё не понял, зачем так щепетильно анализировать результаты curl_setopt()? И когда задаёте CURLOPT_POST = true, то CURLOPT_HTTPGET = false уже писать не обязательно, это подразумевается.

anonymous
()
Ответ на: комментарий от FatBastard

На этот счёт можно дополнительно задать опцию CURLOPT_CONNECTTIMEOUT (CURLOPT_CONNECTTIMEOUT < CURLOPT_TIMEOUT), тогда всё будет понятно.

anonymous
()
Ответ на: комментарий от anonymous

проставлялся CURLOPT_CONNECTTIMEOUT, увеличивался он до двух минут и CURLOPT_TIMEOUT до двух минут - дело не в этом, если запускать как php -f то отрабатывает мгновенно - дело явно в связке nginx - php -curl

quest ★★★★
() автор топика
Ответ на: комментарий от anonymous

>Ещё не понял, зачем так щепетильно анализировать результаты curl_setopt()?

если ошибка может быть возвращена - она должна быть обработана

quest ★★★★
() автор топика
Ответ на: комментарий от quest

Пробовали анализировать на предмет успешности выполнения curl_exec() её собственный результат, а не сразу curl_errno?
Через fopen url какой-нибудь запрос пробовали сделать?

frozen_twilight ★★
()
Ответ на: комментарий от frozen_twilight

>Пробовали анализировать на предмет успешности выполнения curl_exec() её собственный результат, а не сразу curl_errno?
Да.

Обновил php и похоже все заработало, видимо какой то баг php...

quest ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.