如何異步調用使得不會超時?
PHP作為主流的Web開發腳本語言,它并不適合執行耗時任務,這一點很重要!另外,exec存在安全隱患,一般線上環境都會把它禁用的。
PHP執行耗時任務超時的原因在LNMP環境中,一個請求如果超過30S以上基本上就會超時了,這個超時主要受Nginx、PHP和PHP-FPM超時時間影響。
1、Nginx超時配置項
nginx.conf里有幾個配置是設置Nginx超時的:fastcgi_connect_timeout、fastcgi_send_timeout、fastcgi_read_timeout。
2、PHP超時設置
php.ini配置文件中超時配置項為:max_execution_time。
3、PHP-FPM超時設置
php-fpm.conf配置文件中的超時項為:request_terminate_timeout。
PHP腳本如何設定不超時?PHP腳本如果想要永不超時,有兩種方案:
1、PHP代碼中設置內存限制及永不超時,代碼如下:
ini_set('memory_limit','3072M');ini_set("max_execution_time", 0);set_time_limit(0);另外PHP-FPM配置文件(php-fpm.conf)將 request_terminate_timeout 值設大,最后修改Nginx超時時間即可。
2、PHP腳本以CLI模式來運行
耗時任務請勿采用PHP來實現實際項目中,如果涉及到耗時任務執行基本上都不會用PHP去做這件事,因為PHP執行耗時任務可能會導致內存使用異常,一般采用的方案有:
1、利用Linux的計劃任務Crontab來執行
借助crontab可以定制計劃任務,周期、定期任務可以用它來管理。
2、借助MQ來實現
借助MQ系統來實現,常用RabbitMQ、ActiveMQ等來異步執行任務。
3、借助Gearman等專業框架來實現
以上就是我的觀點,對于這個問題大家是怎么看待的呢?歡迎在下方評論區交流 ~ 我是科技領域創作者,十年互聯網從業經驗,歡迎關注我了解更多科技知識!上一篇date函數的參數是哪些
下一篇PHP中的中括號什么意思