aore2010 发表于 2013-05-23 15:40

php信息输出不全


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

satrun7 发表于 2013-05-23 17:51

贴出接收的代码。初猜测可能原因是fastcgi超时了。

aore2010 发表于 2013-05-23 18:00

代码量很大...
主要过程是 post完毕后, post给后台php代码, 然后转码并输出
在接收完毕后 echo "strlen is ===>".strlen($recv_res);长度和 server端发送的数据长度是一致的,
然后 $data = iconv("GBK", "UTF-8//IGNORE", $recv_res);

然后再html语句中代码如下:
<?php
        $data = split("\n",$recv_res);
        $i = 0;
        ob_start();
        for ($i = 0; $i<count($data); $i++)
                echo htmlentities($data[$i],ENT_NOQUOTES,"UTF-8")."<br>";
        echo "total ".($i-1)."<br>";
        ob_end_flush();
?>

量少还行, 数据量大就输出不出来了 接收数据的长度是 strlen is ===>378520 这个在我本机 xampp下都是正常的,唯独放到服务器378520个字节这个数据量不行 服务器上是 nginx + php + php-fpm的, 放到了/data01/cgi目录下跑的

satrun7 发表于 2013-05-24 09:50

你用phpinfo检查一下你php-fpm环境,对比你本机查看post_max_size ,memory_limit, max_execution_time参数值;
然后用ini_set设置为你xampp机子的值;
你的代码要改一下:
split 最好改用 explode;
循环时
for ($i = 0 , $size = count($data); $i < $size; $i++ ){
//代码
}

aore2010 发表于 2013-05-24 16:27

memory_limit = 128M 两个文件是一样的
post_max_size = 128M 服务上的
post_max_size = 8M xampp上的

max_execution_time = 30 服务器上的
xampp没有这个变量

以上您看会影响什么么?

提交后server端处理大概也就5秒左右就有数据返回

satrun7 发表于 2013-05-24 17:05

本帖最后由 satrun7 于 2013-05-24 17:06 编辑

回复 6# aore2010
max_execution_time, PHP解释器最大脚本执行时间,默认是30s;建议你在你接收的脚本设置为60s,<?php
ini_set("max_execution_time", 60);
?>服务器nginx配置的fastcgi_read_timeout时间值也留意一下,
最后,最后在你本地在打开php所有错误,执行的控制器的头部<?php
error_reporting ( E_ALL );
?>细心找找原因。
   

aore2010 发表于 2013-05-24 17:54

在服务器上 试了一下 还是不行 输出还是跟原来一样 少字节.... 我找了好长时间了 各种方法全湿了 都不行 郁闷
麻烦问下 error_reporting ( E_ALL ); 这个怎么才能看到错误呢?

aore2010 发表于 2013-05-23 17:11

有人知道么 别沉了呀
页: [1]
查看完整版本: php信息输出不全