cURL下载PHP的进展不起作用?

时间:2009-12-21 09:11:32

标签: php curl scripting

我是一名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 个答案:

答案 0 :(得分:8)

在php 5.3之前似乎没有CURLOPT_PROGRESSFUNCTION。

查看http://cvs.php.net/viewvc.cgi/php-src/ext/curl/interface.c?view=log,您会发现两个条目- [DOC] MFH: #41712, implement progress callback。一个用于php5.3,另一个用于php6分支。

编辑:使用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);

答案 1 :(得分:2)

关于最后一条评论,所述代码需要5.3,因为在5.3中添加了stream_context_create()的第二个参数。但是,用5.2中的以下内容替换该行:

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

在相关新闻中,PHP手册中的stream_notification_callback()文档有一个完全利用/创建进度条的示例,请查看它。

http://php.net/stream_notification_callback