Проверить работу билиотеки MultiCurl

Тема в разделе "PHP", создана пользователем Qwest-fx, 4 авг 2014.

Модераторы: latteo
  1. Qwest-fx

    Qwest-fx Постоялец

    Регистр.:
    3 апр 2007
    Сообщения:
    133
    Симпатии:
    40
    Существует библиотека
    PHP:
    <?php
    /**
    * MultiCurl class provides a convenient way to execute parallel HTTP(S)
    * requests via PHP MULTI CURL extension with additional restrictions.
    * For example: start 100 downloads with 2 parallel sessions, and get only
    * first 100 Kb per session.
    *
    * This library is free software; you can redistribute it and/or
    * modify it under the terms of the GNU Lesser General Public
    * License as published by the Free Software Foundation; either
    * version 3.0 of the License, or (at your option) any later version.
    *
    * This library is distributed in the hope that it will be useful,
    * but WITHOUT ANY WARRANTY; without even the implied warranty of
    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    * See the GNU Lesser General Public License for more details.
    *
    * @author    Vadym Timofeyev <tvad@mail333.com> http://weblancer.net/users/tvv/
    * @copyright 2007-2010 Vadym Timofeyev
    * @license   http://www.gnu.org/licenses/lgpl-3.0.txt
    * @version   1.07
    * @since     PHP 5.0
    * @example   examples/example.php How to use MultiCurl class library.
    Далее смотри вложение.

    Версия php и curl
    Метод запуска cli(!)
    Проблемный участок кода.
    PHP:
    <?php
        
    /**
         * Waits CURL milti sessions.
         */
        
    public function wait() {
            while (
    count($this->sessions)) {
                
    $this->checkSessions();
            }
        }

        
    /**
         * Executes all active CURL multi sessions.
         */
        
    protected function checkSessions() {
            foreach (
    $this->sessions as $i => $sess) {
                if (
    curl_multi_select($sess[0]) != -1) {
                    
    $this->execSession($i);
                }
            }
        }
    Если сделать var_dump(curl_multi_select($sess[0]) );
    Всегда возвращает -1, while крутится в бесконечном цикле!

    Просьба пояснить, знающим людям. Почему там происходит?
    Проблема наблюдалась и на Windows.
    PS. Интересует именно запуск через командную строку(!), версия php от 5.4
     

    Вложения:

    Последнее редактирование: 4 авг 2014
  2. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    890
    Симпатии:
    562
    Есть такое. Сам неоднократно вешал сервак этим. Попытки решить вылились в ужасные костыли и решилось установкой другого курла и пхп http://php.net/manual/en/function.curl-multi-select.php#110869
     
  3. Qwest-fx

    Qwest-fx Постоялец

    Регистр.:
    3 апр 2007
    Сообщения:
    133
    Симпатии:
    40
    Насколько правильно использовать такой вариант?
    PHP:
        protected function checkSessions() {
            foreach (
    $this->sessions as $i => $sess) {
                if (
    curl_multi_select($sess[0]) == -1) {
                    
    usleep(100);
                }
                
    $this->execSession($i);
            }
        }
    Т.е. что меньшее зло, сборка старой версии или такой вариант?
    И ещё всетаки хочется окончательно выяснить, что и почему.
    Есть такой вариант багрепорта
    https://bugs.php.net/bug.php?id=61141
    Обратите внимание на статус, Not a bug
    Поясните, кто разбирается в английском языке
     
    Последнее редактирование: 5 авг 2014