下载文件file_put_contents,其中包含进度

时间:2015-12-15 15:00:55

标签: php callback file-put-contents

我尝试用下载文件编写代码并返回状态(下载的字节)。 要下载文件,我使用file_put_contents及其工作。

function downloadLink($link,$destination)
{
    $ctx = stream_context_create();
    stream_context_set_params($ctx, array("notification" => "stream_notification_callback"));
    $mb_download = file_put_contents($destination, fopen($link, 'r'),null,$ctx);
    return $mb_download;
}

function stream_notification_callback($notification_code, $severity, $message, $message_code, $bytes_transferred, $bytes_max) {
    file_put_contents( 'progress.txt', '' );
    $fp = fopen('progress.txt', 'a' );
    fputs( $fp,$bytes_transferred);
    fclose( $fp );
    echo 1;
}

这是我的职责。我有使用回调函数的问题,因为所有函数都在同一个类中。现在没有使用stream_notification_callback。我尝试将变更声明发送到

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

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

但它没有用。

2 个答案:

答案 0 :(得分:1)

你应该试试

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

答案 1 :(得分:0)

在执行Matei Mihai所说的内容之后,它实际上仍然不起作用,因为上下文在file_put_contents()函数中使用,而在fopen()函数中则使用。

因此,此:

$mb_download = file_put_contents($destination, fopen($link, 'r'),null,$ctx);

实际上应该是这样:

$mb_download = file_put_contents( $destination, fopen( $link, 'r', null, $ctx) );

然后它将起作用!