Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Прогресс бар для curl
Форумы портала PHP.SU » » Вопросы новичков » Прогресс бар для curl

Страниц (1): [1]
 

1. rafaello9 - 09 Января, 2016 - 13:58:31 - перейти к сообщению
Здравствуйте!
Есть сервис для проверки уникальности контента онлайн. http://www[dot]content-watch[dot]ru/text/
Там можно ввести для пробы любой произвольный текст и проверить, это бесплатно. Кстати, там можно увидеть импровизированный прогресс бар в виде круга.
На этом сервисе есть API.
Я буду взаимодействовать с сервисом через API. После того, как мой скрипт сделал запрос, мне необходимо вывести наглядно прогресс бар, так как сам процесс запрос занимает некоторое время.
Они предоставили код для подключения:
PHP:
скопировать код в буфер обмена
  1. $post_data = array(
  2.     'key' => 'EC5AvamfYHlWV', // ваш ключ доступа (параметр key) со страницы http://www.content-watch.ru/api/request/
  3.     'text' => $text,
  4.     'test' => 0 // при значении 1 вы получите валидный фиктивный ответ (проверки не будет, деньги не будут списаны)
  5.     );
  6.  
  7. $curl = curl_init();
  8. curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
  9. curl_setopt($curl, CURLOPT_POST, TRUE);
  10. curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
  11. curl_setopt($curl, CURLOPT_URL, 'http://www.content-watch.ru/public/api/');
  12. $return = json_decode(trim(curl_exec($curl)), TRUE);
  13. curl_close($curl);
  14. // далее идет обработка ответа

После того я добавил две строки. Получилось так:
PHP:
скопировать код в буфер обмена
  1. $curl = curl_init();
  2. curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
  3. curl_setopt($curl, CURLOPT_POST, TRUE);
  4. curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
  5. curl_setopt($curl, CURLOPT_NOPROGRESS, false );
  6. curl_setopt( $ch, CURLOPT_PROGRESSFUNCTION, 'progressCallback' );
  7. curl_setopt($curl, CURLOPT_URL, 'http://www.content-watch.ru/public/api/');
  8. $return = json_decode(trim(curl_exec($curl)), TRUE);
  9. curl_close($curl);

Далее моих мозгов не хватает. Пожалуйста, помогите!
Как прописать функцию progressCallback();
А самое главное, как увязать эту функцию с выводом на экран. Вот примеры:
http://falbar[dot]ru/article/id/66
http://sergey-oganesyan[dot]ru/javas[dot][dot][dot]_javascript[dot]html

В сети я нашел готовые решения, но они все для отправки/загрузки файла, а у меня немного другая ситуация...
2. Viper - 10 Января, 2016 - 00:09:53 - перейти к сообщению
rafaello9 а смысл делать прогресбар для того, что нельзя заведомо просчитать?
Сервер может ответить в течение 1 минуты, а может и за доли секунд, и каким же макаром(раком) вы решили это время узнавать?
3. rafaello9 - 10 Января, 2016 - 02:22:27 - перейти к сообщению
Так в том то и дело, что если бы я знал, то не спрашивал бы...
Согласно документации http://php.net/manual/ru/functio....curl-setopt.php
в параметре CURLOPT_PROGRESSFUNCTION есть несколько параметров.
Я предполагаю два варианта:
1. Как тот использовать эти параметры
2. Зацепиться за момент окончания процесса. То есть, при самом процессе прогресс бар будет показывать что нибудь, а в момент окончания процесса тут же сообщит об этом...
4. Viper - 10 Января, 2016 - 09:41:15 - перейти к сообщению
https://gist[dot]github[dot]com/bdunogier/1030450
Правда делать это на клиенте больше на костыль похоже.
5. rafaello9 - 10 Января, 2016 - 11:30:31 - перейти к сообщению
Спасибо за помощь.
Все таки я остановился на решении.
Тупо влепить прогресс бар без привязки к curl. Как только процесс закончится, выходит сообщение об успешном окончании или об ошибке.
Ну и что, что он не будет совпадать с реальным процессом. Это не так страшно.

Viper! Спасибо за помощь!
К сожалению количества моих сообщений не хватает, чтобы щелкнуть ссылку Спасибо.

 

Powered by ExBB FM 1.0 RC1