
正文
php接口返回数据 php获取接口返回值
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
php进程超时接口返回504错误分析
在一次接口测试中,发现返回的http 504 time out 的错误,然后查看了php-fpm的错误日志,发现了如下错误
从表现上看,是php进程超时导致的进程被kill了,那么这个超时时间以及kill的机制是跟哪些参数有关呢,这里系统这里一下。
Nginx服务一般因为php的错误或者超时会有两种错误码502 bad Gateway 或者 504 Gateway Time-out
一种情况是php产生了语法错误,比如循环调用、变量作用域错误、方法不存在等,如果开启错误日志输出的话,这种错误在php-fpm的错误日志中是可以看到调用栈信息的。
另外一种情况可能就是超时引起的php-fpm主动kill的情况,在php.ini和php.fpm中有两个配置项,用来管理php脚本的最大执行时间
当php脚本的执行时间超过这个时间时,PHP-FPM不只会终止脚本的执行,还会终止执行脚本的Worker进程。所以Nginx会发现与自己通信的连接断掉了,就会返回给客户端502错误。
以顶部的错误为例,当报502错误是,nginx的errorlog中有如下日志,:
所以只需将这两项的值调大一些就可以让PHP脚本不会因为执行时间长而被终止了。request_terminate_timeout可以覆盖max_execution_time,
所以如果不想改全局的php.ini,那只改PHP-FPM的配置就可以了。
此外要注意的是Nginx的upstream模块中的max_fail和fail_timeout两项。这两个配置表示在fail_timeout事件内,如果fail的测试达到max_fail,那么在接下来的fail_timeout时间内,Nginx都会认为上游服务器挂掉了,都会返回502错误。
所以可以将max_fail调大一些,将fail_timeout调小一些。
PHP-FPM设置的脚本最大执行时间已经够长了,但执行耗时PHP脚本时,发现Nginx报错从502变为504了。这是为什么呢?
因为我们修改的只是PHP的配置,Nginx中也有关于与上游服务器通信超时时间的配置
以Nginx超时时间为90秒,PHP-FPM超时时间为300秒为例,报504 Gateway Timeout错误时的Nginx错误访问日志如下:
调高这三项的值(主要是read和send两项,默认不配置的话Nginx会将超时时间设为60秒)之后,504错误也解决了。
而且这三项配置可以配置在http、server级别,也可以配置在location级别。担心影响其他应用的话,就配置在自己应用的location中吧。
要注意的是factcgi_connect/read/send_timeout是对FastCGI生效的,而proxy_connect/read/send_timeout是对proxy_pass生效的。
参考链接: 感谢分享!
相关问答
Q1: PHP 后台接口返回小程序端的数据,在数据前面出现了乱码情况,怎么解决
这种情况发生在以UTF-8编码格式传输数据的时候,这开头的三个字节叫做BOM(Byte Order Mark,字节顺序标记),小程序接收到php端返回的数据后,把开头的三个字节去掉即可。
更彻底的解决办法是把php文件保存为 不带BOM的UTF-8 文件,这样返回的数据就不带BOM了
Q2: PHP 接口返回值带
php 部署到 centos 里,出现返回值中间有个空字段。
在正常运行环境中没有发现,但当我们与对方进行接口压力测试的时候,对方的环境用xml对json进行了一次转换,造成压测出现不解析的状况,对方反复测试,发现出现多余空格。
处理办法:
1、centos命令处理
2、编码处理,用Notepad++ 对php文件进行一下格式转换
不要到BOM,重新上传
Q3: php接口根据不同用户返回不同数据
token只能用来验证登陆,无法区别不同用户。每次登陆后token是变化的。不然就不安全了。
要区分用户要么用用户分组,要么直接id区分开(这个不好控制,量大的时候,特殊的可以用这个),根据你的业务逻辑来设计。
你还是先理清楚逻辑吧。
Q4: Php给网站做接口,是返回xml还是json
返回的数据是php去决定的,xml和json都是可以的,
你可以和使用接口的一方定好规则,到底要xml格式数据还是json格式的数据。
当然你也可以更灵活点,当别人请求你的接口的时候,带上参数。你在接口里面接受,如果参数是1,你就返回json,如果是2,你就返回xml这样做显得更灵活。这都是在乎你在接口中怎么去写的。
Q5: PHP写数据返还接口--追加分
这不难啊, 既然php接口返回数据你也有例子了,就再细化一下,比如在结果输出后加个表示结束的变量, 或者加个error数量的变量,为0则是没发生错误. php接口返回数据你有什么不明白的?
======
以php接口返回数据我做接口的经验,程序主要有几部分:
1.接收数据,验证数据合法性
这你已经有例子了, 就是用get方法,程序直接接收get的query,而支付宝,银行那些网关除了接收这些必要数据外,还会和商户约定一个key,是这字符串, 约定好每次发送的数据通过某种方式,比如连接的方式和这个key组成一个大的字串,再以MD5加密,附上这个hash给接口,用来判断这个请求的合法性,key是事先约定的,商户和接口都知道
2.处理数据
这个没什么好说的,数据入库,计算等等
3.返回数据
如果是以http协议的话,就直接输出header,然后输出
值名=值+换行符
这样的数据就可以了
银行接口网关,财付通,支付宝,域名注册接口php接口返回数据我都做过,我只能提示到这里,具体要我做就不是200分的问题了,这需要时间调试
关于php接口返回数据和php获取接口返回值的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







