Прогресс загрузки cURL в PHP не работает? - PullRequest
4 голосов
/ 21 декабря 2009

Я новичок в PHP и пытаюсь добавить индикатор прогресса в существующий скрипт PHP, используя следующий метод:

$ch=curl_init() or die("ERROR|<b>Error:</b> cURL Error");
curl_setopt($ch, CURLOPT_URL, $c);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_FILE, $fp);

//####################################################//
// This is required to curl give us some progress
// if this is not set to false the progress function never
// gets called
curl_setopt($ch, CURLOPT_NOPROGRESS, false);

// Set up the callback
curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, 'callback');

// Big buffer less progress info/callbacks
// Small buffer more progress info/callbacks
curl_setopt($ch, CURLOPT_BUFFERSIZE, 128);
//####################################################//

curl_exec($ch);
curl_close($ch);
fclose($fp);

Функция обратного вызова:

    function callback($download_size, $downloaded, $upload_size, $uploaded)
{
    $percent=$downloaded/$download_size;
  // Do something with $percent
  echo "$percent";      
}

Теперь я буквально скопировал этот пример с сайта PHP, но это не работает ?? Моя версия PHP 5.2.11, пожалуйста. подсказать что может быть не так ??

Редактировать: я вызываю этот php-скрипт из другого скрипта.

Информация: я застрял в ветке 5.2.X, так как мой веб-хостинг говорит, что cPanel еще не поддерживает ветку 5.3.x, какие-либо решения для этого ??

Ответы [ 2 ]

8 голосов
/ 21 декабря 2009

Кажется, что нет CURLOPT_PROGRESSFUNCTION до php 5.3.

Взгляните на http://cvs.php.net/viewvc.cgi/php-src/ext/curl/interface.c?view=log, и вы найдете две записи - [DOC] MFH: #41712, implement progress callback. Один для php5.3 и один для ветви php6.

edit: с php 5.2.x вы сможете установить stream_notification_callback

function foo() {
  $args = func_get_args();
  echo join(', ', $args), "\n";
}

$ctx = stream_context_create(null, array('notification' =>'foo'));
$fpIn = fopen('http://php.net/', 'rb', false, $ctx);
file_put_contents('localfile.txt', $fpIn);
2 голосов
/ 14 мая 2010

Что касается последнего комментария, то для указанного кода требуется 5.3, поскольку второй параметр stream_context_create () был добавлен в 5.3. Однако замена этой строки на следующие работает в 5.2:

$ctx = stream_context_create();
stream_context_set_params($ctx, array("notification" => "stream_notification_callback"));

А в связанных новостях документация stream_notification_callback () в руководстве по PHP содержит пример, который полностью использует / создает индикатор выполнения, поэтому проверьте его.

http://php.net/stream_notification_callback

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...