色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

php 不等待返回

傅智翔1年前8瀏覽0評論

PHP不等待返回是指在一個腳本執(zhí)行的過程中,在調(diào)用其他程序時,不等待程序返回執(zhí)行結(jié)果,而是繼續(xù)執(zhí)行該腳本的后續(xù)任務(wù)。這種技術(shù)可以極大地提高程序效率,但同時也會帶來一些風(fēng)險。下面我們來深入了解一下這種技術(shù)的原理和應(yīng)用。

在很多需要進(jìn)行批量數(shù)據(jù)處理的程序中,比如需要將大量的圖片進(jìn)行壓縮的程序,使用curl_multi_init()函數(shù)的方式來并行處理會節(jié)省大量的時間。簡單的代碼示例如下:

$threads = curl_multi_init();
foreach ($urls as $key => $url) {
$threads_data[$key] = curl_init($url);
curl_setopt($threads_data[$key], CURLOPT_RETURNTRANSFER, 1);
curl_multi_add_handle($threads, $threads_data[$key]);
}
$active = null;
do {
$return = curl_multi_exec($threads, $active);
} while ($active);
foreach ($urls as $key => $url) {
$results[$key] = curl_multi_getcontent($threads_data[$key]);
if (preg_match('/<title>(.*)<\/title>/s', $results[$key], $matches)) {
echo $matches[1], "\n";
}
curl_multi_remove_handle($threads, $threads_data[$key]);
curl_close($threads_data[$key]);
}
curl_multi_close($threads);

這段代碼采用了異步并行的方式,在多個線程中同時執(zhí)行網(wǎng)絡(luò)請求,并且不等待返回結(jié)果。其中,curl_multi_exec()函數(shù)是用來執(zhí)行所有連接池中的請求,并且返回是否所有請求均已處理完成。如果某一個或多個請求未處理完,該函數(shù)會被調(diào)用阻塞,直到所有請求處理完。curl_multi_getcontent()函數(shù)則用來獲取返回數(shù)據(jù)。這種技術(shù)具有普適性,可以用來處理很多需要大量處理的數(shù)據(jù),例如掃描所有用戶的個人資料,或者批量獲取圖像信息等。

另外一種PHP不等待返回的方式是使用流媒體技術(shù)。在傳統(tǒng)的PHP應(yīng)用程序中,需要在下載文件時一次性完成文件下載,同樣,當(dāng)上傳數(shù)據(jù)時,需要等待數(shù)據(jù)完全上傳后再開始處理請求。而使用流媒體技術(shù)可以把數(shù)據(jù)塊化,在發(fā)送數(shù)據(jù)時不需要等待所有數(shù)據(jù)均傳輸?shù)椒?wù)器端,而是在傳輸?shù)揭欢ǔ潭葧r開始處理這些數(shù)據(jù)。

if (isset($_FILES['file']) && is_uploaded_file($_FILES['file']['tmp_name'])) {
$filename = $_FILES['file']['name'];
$filesize = $_FILES['file']['size'];
$fp = fopen($_FILES['file']['tmp_name'], "rb");
if ($fp) {
header("Content-Type: video/mp4");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".$filesize);
header("Accept-Ranges: bytes");
$buffer = 1024 * 1024;
while (!feof($fp) && ($p = ftell($fp)) <= $filesize) {
if ($p + $buffer > $filesize) {
$buffer = $filesize - $p + 1;
}
set_time_limit(0);
echo fread($fp, $buffer);
flush();
}
fclose($fp);
}
}

在這個例子里,我們使用了PHP的流媒體技術(shù),把文件緩存到服務(wù)器端,并在通過fwrite插入到緩存隊(duì)列中傳輸。需要注意的是,這里沒有使用set_time_limit()函數(shù)來控制上傳時間,服務(wù)器會直接將文件處理到本地文件。

總之,PHP不等待返回技術(shù)是一種非常重要的技術(shù),不僅可以加速程序的執(zhí)行速度,同時也能減輕處理大數(shù)據(jù)量的負(fù)擔(dān),但同時,開發(fā)者也需要注意風(fēng)險。因此,在使用PHP不等待返回技術(shù)時,需要注意代碼的可靠性,并在保證安全性的前提下充分利用這種技術(shù)的優(yōu)勢。