Php 下载文件按进度放置内容

Php 下载文件按进度放置内容,php,callback,file-put-contents,Php,Callback,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_c

我尝试用下载文件和返回状态(下载字节)编写代码。 要下载文件,我使用文件内容和它的工作

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_context_set_params($ctx, array("notification" => "$this->stream_notification_callback()"));

但是它不起作用。

你应该试一下

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

在实现Matei Mihai所说的内容之后,它实际上仍然不起作用,因为上下文在
file\u put\u contents()
函数中使用,而它应该在
fopen()函数中使用

因此:

$mb_download = file_put_contents($destination, fopen($link, 'r'),null,$ctx);
实际上应该是这样的:

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

然后它就会工作了

它是否显示任何错误?您的calback语法错误
“$this->stream\u notification\u callback()”
应该是
[$this,'stream\u notification\u callback']
您检查过了吗,因为前面提到了参数名称“notification”-每当流触发通知时要调用的用户定义回调函数的名称。但此解决方案不适用于。在流通知回调中,我使用日志创建文件。但此解决方案不运行函数流\u通知\u回调,因为文件未创建且echo未写入任何内容。它不工作。。。我使用echo检查程序是否在流\通知\回调中,但消息是空的。
$mb_download = file_put_contents( $destination, fopen( $link, 'r', null, $ctx) );