Я пытаюсь написать код с файлом загрузки и вернуть статус (загруженные байты). Для загрузки файла я использую 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()));
Но это не работает.
Вы должны попробовать
stream_context_set_params($ctx, array( "notification" => array($this, 'stream_notification_callback') ));
Вы проверили php.net , так как там упомянутые имена параметров «уведомление» – имя определяемой пользователем функции обратного вызова, вызываемой всякий раз, когда поток инициирует уведомление.