Я новичок в 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, Pls. подскажите, что может быть неправильно?
Изменить: я вызываю этот php-скрипт из другого скрипта.
Информация: Я застрял с ветвью 5.2.X, поскольку мой веб-хост говорит, что cPanel еще не поддерживает ветку 5.3.x, любые решения для этого?
Кажется, что не существует 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);
Что касается последнего комментария, указанный код требует 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 есть пример, который полностью использует / создает индикатор выполнения, поэтому проверьте его.