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

Qwest-fx

Профессор
Регистрация
3 Апр 2007
Сообщения
134
Реакции
41
Существует библиотека
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
$curl --version

curl 7.37.1 (x86_64-unknown-linux-gnu) libcurl/7.37.1 OpenSSL/1.0.1h zlib/1.2.8 libssh2/1.4.3
Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftp
Features: AsynchDNS GSS-Negotiate IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP
$ php -v

PHP 5.5.15 (cli) (built: Jul 25 2014 19:24:48)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
with Xdebug v2.2.5, Copyright (c) 2002-2014, by Derick Rethans

Метод запуска 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
 

Вложения

  • multicurl-2010-11-07.zip
    7,4 KB · Просмотры: 4
Последнее редактирование:
Есть такое. Сам неоднократно вешал сервак этим. Попытки решить вылились в ужасные костыли и решилось установкой другого курла и пхп Для просмотра ссылки Войди или Зарегистрируйся
On php 5.3.18+ be aware that curl_multi_select() may return -1 forever until you call curl_multi_exec().
See Для просмотра ссылки Войди или Зарегистрируйся for more information.
 
Насколько правильно использовать такой вариант?
PHP:
    protected function checkSessions() {
        foreach ($this->sessions as $i => $sess) {
            if (curl_multi_select($sess[0]) == -1) {
                usleep(100);
            }
            $this->execSession($i);
        }
    }
Т.е. что меньшее зло, сборка старой версии или такой вариант?
И ещё всетаки хочется окончательно выяснить, что и почему.
Есть такой вариант багрепорта
Для просмотра ссылки Войди или Зарегистрируйся
Обратите внимание на статус, Not a bug
Поясните, кто разбирается в английском языке
 
Последнее редактирование:
Назад
Сверху