您好,登錄后才能下訂單哦!
在 PHP 中,要實(shí)現(xiàn)復(fù)制文件時(shí)的進(jìn)度監(jiān)控,可以使用 copy()
函數(shù)結(jié)合 stream_context_create()
和自定義的回調(diào)函數(shù)來實(shí)現(xiàn)。下面是一個(gè)示例代碼:
<?php
function progressCallback($notificationCode, $severity, $message, $messageCode, $bytesTransferred, $bytesMax)
{
static $totalBytes = 0;
switch ($notificationCode) {
case STREAM_NOTIFY_RESOLVE:
echo "解析域名...\n";
break;
case STREAM_NOTIFY_CONNECT:
echo "連接到服務(wù)器...\n";
break;
case STREAM_NOTIFY_FILE_SIZE_IS:
echo "文件大小為:$bytesMax 字節(jié)\n";
break;
case STREAM_NOTIFY_PROGRESS:
$totalBytes += $bytesTransferred;
echo "已傳輸:$totalBytes 字節(jié)(".(int)(($totalBytes/$bytesMax)*100)."%)\n";
break;
case STREAM_NOTIFY_COMPLETED:
echo "文件復(fù)制完成!\n";
break;
}
}
$sourceFile = 'http://example.com/largefile.zip';
$destinationFile = 'localfile.zip';
$context = stream_context_create();
stream_context_set_params($context, array('notification' => 'progressCallback'));
if (copy($sourceFile, $destinationFile, $context)) {
echo "文件復(fù)制成功!\n";
} else {
echo "文件復(fù)制失敗!\n";
}
?>
這段代碼首先定義了一個(gè)名為 progressCallback
的回調(diào)函數(shù),該函數(shù)會根據(jù)不同的通知代碼($notificationCode
)顯示相應(yīng)的信息。然后,我們使用 stream_context_create()
創(chuàng)建一個(gè)新的流上下文,并使用 stream_context_set_params()
將回調(diào)函數(shù)添加到上下文中。最后,我們使用 copy()
函數(shù)復(fù)制文件,并將上下文作為第三個(gè)參數(shù)傳遞。
運(yùn)行此腳本后,你將看到文件復(fù)制過程中的實(shí)時(shí)進(jìn)度信息。請注意,這個(gè)示例僅適用于從 URL 復(fù)制文件。如果你需要復(fù)制本地文件,可以直接使用 copy()
函數(shù)而無需設(shè)置流上下文。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。