PHP函数问题

Posted blogcccc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP函数问题相关的知识,希望对你有一定的参考价值。

有时候,运行nginxphp CGI(PHP FPM)web服务的Linux服务器,突然系统负载上升,用top命令查看,很多phpcgi进程的CPU利用率接近100%后来通过跟踪发现,这种情况与PHP的file_get_contents()函数密切相关。

 

 

在大中型网站中,基于HTTP协议的API调用比较常见PHP程序员喜欢使用休闲鹿简单方便的file﹣get﹣contents(“http://example.com/”)函数来获取URL的返回内容但是,如果http://example.com/网站响应缓慢,则文件﹣get﹣contents()将始终停留在那里,并且不会超过时间限制。

 

 

我们知道,马克斯中有一个参数,它可以指定执行时间,它可以设置PHP脚本的最大执行时间。但是,在PHP CGI(PHP FPM)中,这个参数不起作用PHP FPM.CONF配置文件中的下列参数可以真正控制PHP脚本的最大执行时间:

 

查看素描?

 

服务单个请求的超时(以秒为单位),在此之后将终止工作进程

 

应在“max_execution_time”ini选项因某种原因未停止脚本执行时使用

 

“0s”表示“off”

 

<value name=“requestu terminateu timeout”>0s</value>

 

默认值为0秒,这意味着PHP脚本将继续执行这样,当所有的PHP CGI进程都被困在file﹣get﹣contents()函数中时,nginx+PHP web服务器将不再处理新的PHP请求,nginx将向用户返回“502坏网关”有必要修改这个参数来设置PHP脚本的最大执行时间,但是没有必要治愈这些症状。例如,更改为<value name=“request﹣terminate﹣timeout>30s</value>如果file﹣get﹣contents()获取网页内容的速度很慢,这意味着150个PHP CGI进程每秒只能处理5个请求,而webserver也很难避免“502坏网关”。

 

 

要彻底解决这个问题,PHP程序员只能摆脱直接使用文件“get”内容(“http://example.com/”)的习惯,只需稍微修改一下,添加一个超时,然后按照以下方式实现httpget请求如果遇到问题,可以将以下代码封装到函数中。

以上是关于PHP函数问题的主要内容,如果未能解决你的问题,请参考以下文章

php函数调用结构

php中iconv函数问题

PHP 函数。使用另一个函数的函数

从另一个 PHP 函数调用 PHP 函数的逻辑错误

PHP - 函数[重复]

PHP iconv()函数字符编码转换的问题讲解_php技巧 - PHP