fsockopen

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

fsockopen

Сообщение caHek2x »

в чем может быть беда ...
делаю:

Код: Выделить всё

    public static function query($url, $options)
    {
        //echo $url;
        //die;
        //return;
        $errno = 0;
        $errstr = "";
        $parts = parse_url($url);

        //if (!$fp = fsockopen("tcp://" . $parts['host'], isset($parts['port']) ? $parts['port'] : Yii::$app->params['SSL_PORT'], $errno, $errstr)) {
        if (!$fp = fsockopen("ssl://" . $parts['host'], isset($parts['port']) ? $parts['port'] : Yii::$app->params['SSL_PORT'], $errno, $errstr)) {
            Yii::warning("Не смог открыть сокет: [$errno], [$errstr]");
            return false;
        }

        $options[Yii::$app->request->csrfParam] = Yii::$app->request->getCsrfToken();

        $data = http_build_query($options, '', '&');
        fwrite($fp, "POST " . (!empty($parts['path']) ? $parts['path'] : '/') . " HTTP/1.1\r\n");
        fwrite($fp, "Host: " . $parts['host'] . "\r\n");
        fwrite($fp, "Content-Type: application/x-www-form-urlencoded\r\n");
        fwrite($fp, "Content-Length: " . Str::len($data) . "\r\n");
        fwrite($fp, "Connection: Close\r\n\r\n");
        fwrite($fp, $data);
        fclose($fp);

        return true;
    } 
если я делаю запрос на адрес telegram/manual/manual/send-after-moderated-doc
Thread::query(Url::toRoute(['/telegram/manual/manual/send-after-moderated-doc'], true), ['doc_id' => 7]);

то в логах yii вообще пусто ... как будето я туда и не делал запрос ...

сначала думал в ф-ции проблема ...

но в логах nginx/access.log
ip - - [20/Aug/2016:01:56:58 +0300] "POST /telegram/manual/manual/send-after-moderated-doc HTTP/1.1" 499 0 "-" "-"

думаю а дай попробую обратиться к более простому адресу:
Thread::query(Url::toRoute(['/doc'], true), ['doc_id' => 7]);

и тут чудо ... в логах yii он отобразился ...
так почему же предыдущий не отрабатывает ... ? чтото с настройками nginx ? или с путями чтото ... но тогда же ошибку должен выдать ... ?

а да и самое главное ... если ввести в браузере путь site.../telegram/manual/manual/send-after-moderated-doc
все прекрасно отрабатывает !!!
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: fsockopen

Сообщение caHek2x »

попробовал даже поствить https://github.com/krissss/yii2-thread/ ... /README.md
все в точности как и у меня: в access log данные есть в yii log тишина ...
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: fsockopen

Сообщение caHek2x »

хм ... очень странно ... на
/telegram/manual/manual/send-after-moderated-doc
у меня была ошибка ... о ней я знал ... не установлена либа ...завтра админ прийдет и её установит ...
но когда переходишь в браузере в yii логах переход пишется и логирует ошибку ...
через fsockopen я ожидал такого же поведения ... и тогда бы я считал что все работает осталось только библиотеку установить и всё ...
но через fsockopen почемуто не логируется ... хотя переходит правильно ...
с чего я взял что всеже все работает: я в actionSendAfterModeratedDoc закоментировал все и сделал просто echo 1 и все прекрасно стало работать ... странное поведение ... у когото есть обьяснение ?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: fsockopen

Сообщение zelenin »

а че, о чем вообще речь? зачем fsockopen? curl/file_get_contents+context или обертки над ними (guzzle).
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: fsockopen

Сообщение caHek2x »

zelenin писал(а):а че, о чем вообще речь? зачем fsockopen? curl/file_get_contents+context или обертки над ними (guzzle).
суть вопроса не в этом, а в этом: почему запрос идет но не отображается в логах yii ?
на вопрос зачем: мне надо отправить запрос и не дожидаться его ответа curl/file_get_contents это не подходит ...
и вопрос касается yii2 ... ведь это его логи не видят запрос ... почему тема перенесена ?
0x706870
Сообщения: 1
Зарегистрирован: 2017.05.08, 16:02

Re: fsockopen

Сообщение 0x706870 »

Не знаю актуально ли ещё, но недавно столкнулся с такой же проблемой. Yii фреймворк здесь ни при чем.
Суть в следующем:
caHek2x писал(а): 2016.08.20, 16:28 ...мне надо отправить запрос и не дожидаться его ответа...
caHek2x писал(а): 2016.08.20, 02:14 но в логах nginx/access.log
ip - - [20/Aug/2016:01:56:58 +0300] "POST /telegram/manual/manual/send-after-moderated-doc HTTP/1.1" 499 0 "-" "-"
Код состояния nginx'а 499 означает, - что клиент(ваш скрипт) закрыл соединение не дожидаясь ответа от сервера. В данном случае nginx прекращает дальнейшие действия в отношении запроса клиента.

В моём случае проблема заключалась в том, что nginx использовался для проксирования запросов.
Решением было установление директивы proxy_ignore_client_abort в значение on в контексте http, server, location конфигурационного файла nginx'a(nginx.conf): https://nginx.org/ru/docs/http/ngx_http ... ient_abort
Ответить