㈠ php-fpm - 啟動參數及重要配置詳解
php-fpm的啟動參數與重要配置詳解
php-fpm的運行過程中,理解並調整關鍵配置參數至關重要。首先,我們來看看啟動參數:
1. request_terminate_timeout: 這個參數控制了PHP腳本的最大執行時間,防止因file_get_contents等函數響應過慢導致的資源問題。默認為0,可能導致502 Bad Gateway錯誤。建議設置一個合理的值,如10秒,同時考慮給file_get_contents添加超時限制。
2. max_requests: 當一個子進程處理的請求數超過指定值(如1000)時,會自動重啟,以防止內存泄漏。然而,這可能導致間歇性502錯誤。在高並發場景下,設置較大的值能減少重啟頻率,但需根據實際情況調整。
3. request_slowlog_timeout 和 slowlog: 這些配置用於記錄執行過慢的PHP進程,對於異常排查和問題定位非常有用。通過監控慢日誌,可以定位網路讀取和資料庫查詢等延遲問題。
這些參數的調整需要根據實際項目需求和性能監控來決定,以確保Web伺服器的穩定運行。在php-fpm配置中,找到適合的平衡點是提高性能和避免錯誤的關鍵。想要獲取更多PHP相關資源,可以關注公眾號:PHP開源社區,獲取2021金九銀十大廠面試題集、PHP技術文章合集等資源。
㈡ php執行cmd腳本超時,不能去改ini因為超時期間頁面一直在等待,怎麼才能
PHP腳本執行超時的解決辦法
在php中默認腳本執行超時時間為30秒了,如果未進行設置30秒之後如果你的腳本還未執行完就會超時了,下面我來給大詳解解決PHP腳本執行超時的方法。
php.ini 中預設的最長執行時間是 30 秒,雖然可以通過調整 php.ini 中 max_execution_time的值來達到目的,但有些情況是沒有條件修改php.ini的,如何解決這個問題呢。
一種方法是在 PHP 腳本中加入
代碼如下
ini_set('max_execution_time', '0');
將運行時間設置成0(無限值);
另一種方法是在命令行下執行腳本,使用命令行執行腳本時,最大運行時間被設置為了無限值。
修改php.ini的腳本執行時間限制
編輯php.ini,修改max_execution_time值:
代碼如下
max_execution_time=500
//此修改需要重新載入php.ini,需要重啟web伺服器生效。
通過.htaccess 文件設置腳本執行時間
代碼如下
php_value max_execution_time 500
在腳本中設置執行的最大時間
代碼如下
ini_set('max_execution_time', 500);
用php的函數取消腳本的時間限制
代碼如下
set_time_limit(0);
set_time_limit用來設置腳本的超時時間,此函數規定從該句運行時起程序必須在指定秒數內運行結束,超時則程序出錯退出。
下面是一個例子. 有10000條數據, 要修改其中某些數據, 運用PHP分步執行處理, 代碼如下:
action.php
代碼如下
<?php
$stid = isset($_GET['stid'])?$_GET['stid']:0;
$endid = $stid + 100;
$maxid = 10000;
function dosomething(){
//要時間比較多的操作
……
}
$sql_string=」select * from `table` where id>』$stid』 and id<=』$endid』 order by id」;
$datas = getdata_bysql($sql_string);
foreach($datas as $data){
//處理數據
…..
echo $id.」 處理完成. <br />」;
if($id>=$maxid){exit;}
}
if($stid<=$maxid){
$stid = $stid + 100;
$url=」action.php?stid=$stid」;
echo $url;
echo 『<script language=」javascript」>location=」『.$url.』」; </script>』;
}
?>
其中的dosomething()是一個耗時操作. 這里我們通過限制id范圍來減少運行時間, 運行完後通過javascript的跳轉來自動運行下一步
現在dedecms生成html頁面時就是這樣做
㈢ PHP中三種設置腳本最大執行時間的方法
探討PHP設置腳本最大執行時間的三種方法
在PHP中,設置腳本最大執行時間是關鍵。默認情況下,腳本最長執行時間為30秒,這在php.ini文件中由max_execution_time變數決定。當腳本運行時間超出這個限制時,需要調整這個設置。
實現調整的方法主要有三種:
1、直接修改php.ini文件
在php.ini中,找到max_execution_time設置並修改其值。這種方法適用於網站維護人員對代碼結構不熟悉,需要進行調整的情況。
2、利用PHP的ini_set函數
使用ini_set函數來設置腳本的最大執行時間。通過調用ini_set("max_execution_time", $seconds),將腳本執行時間限制為$seconds秒。然而,這種方法不推薦在生產環境使用,因為ini_set函數可能被禁用。
3、應用set_time_limit函數
使用set_time_limit函數可以為當前腳本設置執行時間限制。通過set_time_limit($seconds),可以將執行時間限制為$seconds秒。這種方法更加靈活且適用於寫代碼階段進行調整。
綜上所述,根據實際情況選擇合適的方法進行腳本執行時間的調整。對於後期維護,修改php.ini文件更為實用;而在代碼編寫過程中,應用set_time_limit函數更為推薦,避免了可能存在的ini_set函數禁用問題。
㈣ php定時執行任務的幾個方法
PHP定時執行的三種方式實現
1、windows 的計劃任務 2、linux的腳本程序 3、讓web瀏覽器定時刷新
具體實現
1、windows計劃任務
PHP很少在win伺服器上跑,具體實現也不再深究,看網上實現的原理大概是寫bat腳本,然後讓window任務添加執行這個bat腳本。
2、linux 的腳本實現
這里主要使用到crontab這個命令,
使用方式 :
復制代碼 代碼如下:crontab filecrontab [ -u user ] [ -u user ] { -l | -r | -e }
說明 :
crontab是用來讓使用者在固定時間或固定間隔執行程式之用
使用crontab寫shell腳本,然後讓PHP調用shell,這個是利用linux的特性,應該還不算PHP自身語言的特性
3、PHP實現定時執行計劃任務
使用php讓瀏覽器刷新需要解決幾個問題
PHP腳本執行時間限制,默認的是30m 解決辦法:set_time_limit();或者修改PHP.ini 設置max_execution_time時間(不推薦)
如果客戶端瀏覽器關閉,程序可能就被迫終止,解決辦法:ignore_user_abort即使關閉頁面依然正常執行
如果程序一直執行很有可能會消耗大量的資源,解決辦法使用sleep使用程序休眠一會,然後在執行
PHP定時執行的代碼:
<?php ignore_user_abort();//關掉瀏覽器,PHP腳本也可以繼續執行. set_time_limit(3000);// 通過set_time_limit(0)可以讓程序無限制的執行下去 $interval=5;// 每隔5s運行 //方法1--死循環 do{ echo '測試'.time().'<br/>'; sleep($interval);// 等待5s }while(true); //方法2---sleep 定時執行 require_once './curlClass.php';//引入文件 $curl = new httpCurl();//實例化 $stime = $curl->getmicrotime(); for($i=0;$i<=10;$i++){ echo '測試'.time().'<br/>'; sleep($interval);// 等待5s } ob_flush(); flush(); $etime = $curl->getmicrotime(); echo '<hr>'; echo round(($etime-stime),4);//程序執行時間
測試的時候發現這個效率並不是很高。
總結:
個人感覺PHP定時執行任務的效率不是很高,建議關於定時執行任務的工作還是交給shell來做吧。
㈤ php 如何判斷執行時間
要計算代碼的執行時間,在PHP來講是十分簡單的,首先,你需要知道,PHP是一種順序執行的腳本語言,所以,可以按照以下步驟來計算代碼的執行時間:
<?php
functiongetmicrotime()
{
list($usec,$sec)=explode("",microtime());
return((float)$usec+(float)$sec);
}
//記錄開始時間
$time_start=getmicrotime();
//這里放要執行的PHP代碼,如:
//echocreate_password(6);
//記錄結束時間
$time_end=getmicrotime();
$time=$time_end-$time_start;
//輸出運行總時間
echo"執行時間$timeseconds";