我的脚本存在性能问题(如下)。 fread操作需要花费很多时间,我得到的时间如下:
$time_split2 == 0.00135s
$time_split3 == 15.01747s
我已经使用远程脚本测试了它,除了回显OK消息之外什么都不做 - 还有aprox。 15秒执行时间
可能是什么问题,或者我怎么能以另一种方式解决它。 我宁愿不使用curl(会加速吗?)因为curl并不总是用PHP安装,我希望我的代码可以移植
$opts = array('http' =>
array(
'method' => 'POST',
'header' => array('Content-type: application/x-www-form-urlencoded', 'Custom-header: test'),
'content' => $postdata,
'timeout' => 60
)
);
$context = stream_context_create($opts);
$time_split = microtime(true);
$fp = fopen('http://someremotedomain/script.php', 'r', false, $context);
$time_split2 = microtime(true);
while(!feof($fp))
$result .= fread($fp, 4096);
fclose($fp);
$time_split3 = microtime(true);
$time_split2 = round($time_split2 - $time_split, 5);
$time_split3 = round($time_split3 - $time_split, 5);
更新
我已经使用了你的建议 - file_get_contents()+ Connection:close - 它还没有工作 - file_get_contents()使用延迟并返回一个空字符串但是 - 我已经隔离了问题,这里是$ POSTDATA:
$postdata = http_build_query(
array('body' => $mail_html_content,
'from' => 'test <test@test.com>',
'to' => 'test2 <test2@test.com>',
)
);
当我删除&#39; body&#39;从数组 - file_get_contents()工作正常,没有任何延迟 - 这怎么会产生问题 - $ mail_html_content只包含一个简单的HTML字符串,它不是一个大字符串
更新2
我已经更多地隔离了这个问题 - 当$ postdata字符串的长度超过1024个字符时,file_get_contents()开始返回空值,低于该值一切正常,因为方法POST不受长度的限制数据(至少对于如此低的数字)现在可能是什么问题?
答案 0 :(得分:0)
您应该尝试使用file_get_contents()而不是while(!feof($fp))
。
E.g。
/* EDIT: header should be something like that */
$opts = array(
'http' => array(
'method'=>"POST",
'header'=>"Content-Type: text/html; charset=utf-8",
),
);
$context = stream_context_create($opts);
$result = file_get_contents('http://someremotedomain/script.php', false, $context);
有关其他标题信息,请查看here
根据fread文档:
注意强>:
如果您只想将文件内容转换为字符串,请使用file_get_contents()作为 它比上面的代码有更好的性能。