Hprose for php 1.5.4 對傳圖檔 出現php執行超時錯誤

allenplay 发布于 2015/05/22 12:00
阅读 446
收藏 0
Hprose for php Version 1.5.4,

二台不同的服務器 對傳圖檔 會有 php執行超時 30 秒的錯誤訊息出現.

二台服務器之間的網路通信 確定是正常的使用之前的版本則是可以順利完成.

謝謝.
加载中
0
andot
andot

问题找到了,是 hprose 的 curl 客户端的一个 bug 造成的,原因是当服务器返回 100 响应码时,因为参数名写错了,导致不断处理同一条消息,陷入了死循环,现在下载 master 里面的最新版本就可以解决这个问题了。

0
andot
andot
有没有安装 hprose for pecl 1.5.3?另外,能否贴一下问题重现的代码。
0
a
allenplay
主機沒有安裝hprose for pecl,我寫的代碼如下:
// 来源主机程式码
$srcfile = $_SERVER["DOCUMENT_ROOT"]."/".$picData[0]["name"]; // $srcfile => 图档完整路径(含档名)
$bin_code = file_get_contents($srcfile);
$rs = $client->sync_file_to_target($_SESSION["no"], basename($picData[0]["name"]), $bin_code);
// 目的主机
function sync_file_to_target($mis_no ,$img_filename, $img_bin_content)
{    //跨主机传档案
  $file_dir = $_SERVER["DOCUMENT_ROOT"]."/files/".$mis_no;
  // 检查以编号为目录名称的 目录是否存在
  if (!file_exists($file_dir)) {
    mkdir($file_dir, 0777, true);
  }

  $full_filename = $file_dir."/".$img_filename;
  // 同步的档案名称是否存在    
  if (!file_exists($full_filename)) {
        $file = fopen($full_filename, "w+");
        fwrite($file, $img_bin_content);
        return fclose($file);
    }
    else 
    {
        return true;
    }    
}
0
andot
andot
$bin_code = file_get_contents($srcfile);

这一句改为:

$bin_code = new HproseBytesIO();
$bin_code->load($srcfile);



试试看,这种方式下,$bin_code 传递时是以二进制字符串方式传递的,不再判断是否是utf8编码,对于大的二进制文件可以提速近百倍。
0
a
allenplay
可以正常運作了,非常感謝!
返回顶部
顶部