php.ini 中缺省的最長(zhǎng)執(zhí)行時(shí)間是 30 秒,這是由 php.ini 中的 max_execution_time 變量指定,倘若你有一個(gè)需要頗多時(shí)間才能完成的工作,例如要發(fā)送很多電子郵件給大量收件者,或者要進(jìn)行繁重的數(shù)據(jù)分析工作,服務(wù)器會(huì)在 30 秒后強(qiáng)行中止正在執(zhí)行的程序,如何解決這個(gè)問(wèn)題呢。
解決方法
修改執(zhí)行時(shí)間,php.ini 中 max_execution_time。在php.ini里查找
max_execution_time
默認(rèn)是30秒.改為
max_execution_time = 0
0表示沒(méi)有限制
另一個(gè)辦法是在 PHP 程序中加入 ini_set('max_execution_time', '0'),數(shù)值 0 表示沒(méi)有執(zhí)行時(shí)間的限制
另一種方法是可以在php程序中加入
set_time_limit();
來(lái)設(shè)定頁(yè)面最久執(zhí)行時(shí)間.
set_time_limit(0);//0表示沒(méi)有限制 <?php //max_execution_time=100; ini_set("max_execution_time", 1); //用此function才能真正在運(yùn)行時(shí)設(shè)置 for($i=1; $i< 100000; $i++) { echo "No. {$i}\n"; echo '<br />'; flush(); } ?>
修改內(nèi)存
需要注意的是,memory_limit 的值越高,即單個(gè) PHP 進(jìn)程占用的內(nèi)存越多,系統(tǒng)能夠并發(fā)處理的請(qǐng)求越少。例如,一個(gè) 2G 內(nèi)存的機(jī)器
memory_limit 設(shè)為 128M, 則同時(shí)最多能處理 16 個(gè)請(qǐng)求 memory_limit 設(shè)為 256M, 則同時(shí)最多能處理 8 個(gè)請(qǐng)求 memory_limit 設(shè)為 512M, 則同時(shí)最多能處理 4 個(gè)請(qǐng)求
虛擬主機(jī)的 PHP memory_limit 是 PHP 單個(gè)腳本單次執(zhí)行最大可用內(nèi)存限制。默認(rèn)限制為 256MB,最大可調(diào)整為 512MB。
現(xiàn)已知php7以下,單腳本執(zhí)行最大內(nèi)存限制是2G,php7不限制;
php里只要把memory_limit設(shè)為-1,就不會(huì)限制你跑cli腳本時(shí)的內(nèi)存限制,剩下的就是操作系統(tǒng)ulimit會(huì)限制任何進(jìn)程的最大內(nèi)存。
配置 memory_limit 可以設(shè)置的吧,然后就看你可用物理內(nèi)存了。
調(diào)整PHP腳本單次最大可執(zhí)行時(shí)間為60秒
php_value max_execution_time 60
上述規(guī)則中的60可以替換為你需要的執(zhí)行時(shí)間,單位為秒。我們?cè)试S的最大執(zhí)行時(shí)間為180秒,為確保服務(wù)器性能,執(zhí)行超過(guò)180秒的用戶(hù)進(jìn)程將被強(qiáng)制終止。
修改可執(zhí)行時(shí)間是不推薦的操作。正常速度的網(wǎng)站程序,應(yīng)當(dāng)在2秒內(nèi)完成執(zhí)行。網(wǎng)站程序執(zhí)行時(shí)間越長(zhǎng),訪問(wèn)者等待網(wǎng)站初次響應(yīng)(傳送第一個(gè)字節(jié))的時(shí)間就越長(zhǎng)。如果你的網(wǎng)站在日常訪問(wèn)中經(jīng)常遇到Request Timed Out超時(shí)錯(cuò)誤,請(qǐng)優(yōu)先檢查網(wǎng)站程序設(shè)置和資源使用情況。超過(guò)10秒仍未響應(yīng)的網(wǎng)站,大部分訪問(wèn)者會(huì)選擇關(guān)閉網(wǎng)頁(yè)。不問(wèn)緣由地增大可執(zhí)行時(shí)間,不僅可能無(wú)法提升網(wǎng)站用戶(hù)體驗(yàn),而且可能使異常腳本無(wú)法及時(shí)終止,降低網(wǎng)站的負(fù)荷能力。