我的php通过socket 接收服务端传过来的数据, 我看长度和server端传过来的字节数是相等的, 但是就是输出不全, 我通过htmlentities 输出的, 难道网页字节数还有限制么? 每次提交查询返回结果, 输出的信息总是少一些, 还不一定少多少, 比如第一次少1000多个字节, 下次有可能少2000个这样 该怎么解决呢?
我在php+apache环境下试验就正常, 用的xampp. 在linux环境, nginx+php+php-fpm就不行, 输出不全,是什么地方设置有问题么?
回复讨论(解决方案)
有人能指教下是什么问题么?
既不知道你在做什么,也不知道你是怎么做的
这样没头没脑的问题,让人如何解答?
一个php网页, 通过HTML网页的form, post给php代码, 然后通过socket发送一个请求信息给server端, server端接收到信息后, 生成一堆数据, 二进制的, 然后发送给php端, php端接收数据, php在接收数据后, 调用了strlen 测试了一下消息体的长度, 和server端发送的包长度是一样的, 然后在网页上显示出来, 就这样一个过程, 我在webserver为apche的情况下, 测试了一下, 接收是对的, 我用的是xampp. 就是在 nginx+php+php-fpm这种环境下接收后打印输出信息不全. 同样的代码, 目前不知道是什么情况...
也没看懂怎么回事。
但form传值不可能大到网页都要限制,你试下不用htmlentities输出呢,每一步都打出结果来看一下源代码,如果有特殊字符被解析了。
之前遇到过在处理json时有window和linux字符多少不一样的问题,但也就是开头几个字符,截取就行了。
echo htmlentities($data[$i],ENT_NOQUOTES,"utf-8")."
"; 我是用这个输出的, 可每次都输出一部分, 而且有时多有时少... 不知道怎么回事 开头的4个字节的整形数据我已经解析出来了, 然后后面全是二进制字符串,是包括中文的xml数据集合. 关键我现在找不到原因, 我在本地用xampp测试全部正常, 只有放到linux服务器上出错... 没有头绪
既然是 php在接收数据后, 调用了strlen 测试了一下消息体的长度, 和server端发送的包长度是一样的
确认一下,两个服务器环境下长度都是一样的吗?
那么问题就出在显示上了
是的 3太服务器都是这样 是配置问题还是什么地方的问题. 现在就是不好解决 不晓得各位是否遇到过..
如果数据不是很长的话,你可贴出数据的base64编码,以便分析原因
刚刚我截取的数据片段 我测试了一下 可以全部显示出来... 到底该怎么解决呢 多谢
这是一个 XML 字符串,虽然所有 <?xml version="1.0" encoding="utf-8"?>
但是其中的中文是 GBK 编码的(至少你给的这部分是)
你应该检查输出时的处理代码
我处理了.... 呵呵 如下 :
$recv_res = iconv("gbk", "utf-8", $recv_res);
然后echo的时候 做的echo htmlentities($data[$i],ENT_NOQUOTES,"utf-8")."
";
我就怀疑 是不是什么地方限制了字节数的输出.....
能再帮我想想么 多谢 我还没解决呀...
谁能指教下么?
就这么 $recv_res = iconv("gbk", "utf-8", $recv_res); 是可以的吗?
如果它其中的某个成员就是 utf-8 的呢?不就乱套了吗?
贴代码
可是我在apache+php+mysql环境下是正常的.. 都能输出, 而且我把数据量减少, 也能完整输出.. 我觉得不是字符编码的问题, 而且写源数据的时候就已经指定字符编码为gbk的了, 接收的话应该也是这个
有人知道原因么?
有人能告知下原因么 多谢
如果你用的是Nginx,可以查看下是否是Nginx开启反向代理导致反向代理tmp目录缓存没有权限或者缓存过小导致。