一个php网页, 通过HTML网页的form, post给php代码, 然后通过socket发送一个请求信息给server端, server端接收到信息后, 生成一堆数据, 二进制的, 然后发送给php端, php端接收数据, php在接收数据后, 调用了strlen 测试了一下消息体的长度, 和server端发送的包长度是一样的, 然后在网页上显示出来, 就这样一个过程, 我在webserver为apche的情况下, 测试了一下, 接收是对的, 我用的是xampp. 就是在 nginx+php+php-fpm这种环境下接收后打印输出信息不全. 同样的代码, 目前不知道是什么情况...

解决方案 »

  1.   

    也没看懂怎么回事。
    但form传值不可能大到网页都要限制,你试下不用htmlentities输出呢,每一步都打出结果来看一下源代码,如果有特殊字符被解析了。
    之前遇到过在处理json时有window和linux字符多少不一样的问题,但也就是开头几个字符,截取就行了。
      

  2.   

    echo htmlentities($data[$i],ENT_NOQUOTES,"utf-8")."<br>"; 我是用这个输出的, 可每次都输出一部分, 而且有时多有时少... 不知道怎么回事 开头的4个字节的整形数据我已经解析出来了, 然后后面全是二进制字符串,是包括中文的xml数据集合. 关键我现在找不到原因, 我在本地用xampp测试全部正常, 只有放到linux服务器上出错... 没有头绪
      

  3.   

    既然是 php在接收数据后, 调用了strlen 测试了一下消息体的长度, 和server端发送的包长度是一样的
    确认一下,两个服务器环境下长度都是一样的吗?
    那么问题就出在显示上了
      

  4.   

    如果数据不是很长的话,你可贴出数据的base64编码,以便分析原因
      

  5.   

    这是一个 XML 字符串,虽然所有 <?xml version="1.0" encoding="utf-8"?>
    但是其中的中文是 GBK 编码的(至少你给的这部分是)
    你应该检查输出时的处理代码
      

  6.   

    我处理了.... 呵呵 如下 :
    $recv_res = iconv("gbk", "utf-8", $recv_res);然后echo的时候 做的echo htmlentities($data[$i],ENT_NOQUOTES,"utf-8")."<br>";
    我就怀疑 是不是什么地方限制了字节数的输出.....
      

  7.   

    就这么 $recv_res = iconv("gbk", "utf-8", $recv_res); 是可以的吗?
    如果它其中的某个成员就是 utf-8 的呢?不就乱套了吗?
      

  8.   

    可是我在apache+php+mysql环境下是正常的.. 都能输出, 而且我把数据量减少, 也能完整输出.. 我觉得不是字符编码的问题, 而且写源数据的时候就已经指定字符编码为gbk的了, 接收的话应该也是这个
      

  9.   

    如果你用的是Nginx,可以查看下是否是Nginx开启反向代理导致反向代理tmp目录缓存没有权限或者缓存过小导致。