鍍金池/ 問(wèn)答/Java  PHP  Linux  網(wǎng)絡(luò)安全  Office/ php執(zhí)行300多秒連接就會(huì)斷開(kāi)

php執(zhí)行300多秒連接就會(huì)斷開(kāi)

環(huán)境:
win2008 r2(64位) iis7.5 php5.5.38(nts-vs11-x86)
php運(yùn)行方式:fastcgi。

測(cè)試代碼

$start = microtime(true);

set_time_limit(0); //不限制執(zhí)行時(shí)間
@ini_set('memory_limit', '-1');//不限制內(nèi)存

$file = './' . time() . '.txt';
for($i = 0; $i < 350; $i++){
    echo "$i\n";
    ob_flush();
    flush();
    sleep(1);
    file_put_contents($file, $i . ':'. round(microtime(true) - $start, 3)."秒\n", FILE_APPEND);
}

file_put_contents($file, $i . "finished\n", FILE_APPEND);
echo 'finished';

問(wèn)題描述:
php腳本執(zhí)行300多秒后(300~320秒),tcp連接就會(huì)斷開(kāi)(cmd中執(zhí)行"netstat -ano | findstr 'ip地址'"命令,300多秒連接消失),此時(shí)php-cgi.exe還在繼續(xù)執(zhí)行(iis工作進(jìn)程中可以看到,測(cè)試代碼還在不斷寫(xiě)文件)。等到測(cè)試代碼執(zhí)行完畢(向文件中寫(xiě)出了"finished"),瀏覽器還是一直處于加載狀態(tài)(使用wireshark抓取數(shù)據(jù)包,沒(méi)有發(fā)現(xiàn)服務(wù)器發(fā)送響應(yīng)數(shù)據(jù)與斷開(kāi)握手包,300秒內(nèi)的代碼正常)。

相關(guān)配置:
iis應(yīng)用程序池:
應(yīng)用程序池

連接超時(shí):
連接超時(shí)

fastcgi:
圖片描述

還嘗試將注冊(cè)表項(xiàng)"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters\KeepAliveTime"的值改為了7200000,關(guān)閉防火墻與其他安全防護(hù)軟件,都是一樣的情況。

但完全相同的軟件與配置,在另一臺(tái)win2008 r2服務(wù)器上連接就不會(huì)中斷。

wireshark抓包(在300多秒服務(wù)器連接消失后,未收到來(lái)自服務(wù)器響應(yīng)與斷開(kāi)握手包,瀏覽器一直處于加載狀態(tài)):
wireshark抓包

回答
編輯回答
使勁操

你可以在cli 模式下,沒(méi)有限制超時(shí)鏈接

2018年5月5日 04:16
編輯回答
焚音

如果是必須瀏覽器執(zhí)行,那就需要零時(shí)改動(dòng)執(zhí)行時(shí)間, 可以使用 set_time_limit 函數(shù) 設(shè)置。

2017年7月27日 21:30
編輯回答
晚風(fēng)眠

沒(méi)用過(guò)IIS,但感覺(jué)是IIS會(huì)有個(gè)超時(shí)限制,因?yàn)閚ginx或Apache都有這樣的限制,php設(shè)置了time_limit后php不會(huì)超時(shí),你這也確實(shí)沒(méi)有超時(shí),但是瀏覽器沒(méi)有響應(yīng),說(shuō)明應(yīng)該就是web server的問(wèn)題,你可以查查看

2018年2月14日 23:46