我雇了一个人在PHP和MySQL中为我编写一个API,现在必须自己维护它。我不知道PHP以及其他语言。ob_start()没有ob_flush()
我注意到在他们最有PHP文件的开头:
ob_start();
我明白,这将打开一个新的输出缓冲。问题是他们从不冲洗缓冲区。代码一直工作正常,但我有很多优化问题,服务器响应缓慢等。
它是如何,他们不需要刷新缓冲区,但响应仍然返回?
一个例子是:
ob_start();
include "nusoap.php";
include "config.php";
require_once "class.Database.php";
$client = new nusoap_client($config['apiURL'].'/server.php',false, false, false, false, false, 600, 600);
... process the $_GET and build a $result ...
print_r($result);
显然... process ...
是敞开的事情。但是我并没有在那里看到有任何刷新或读取ob内容的地方。我也搜索了所有的内容,也没有看到那里的内容。
我检查和设置为
Off
此服务器上。由于我们确实将该代码从另一台服务器移到了该服务器上。但目前这个API仍在使用这个服务器。当有人问是否有ob_get_contents()时,我说“不是我可以找到”的原因是因为有包含其他文件的包含文件(包括nusoap.php),同时我已经通过它们并试图追查他们,我可能错过了一些东西,并仍在寻找。但到目前为止,在我看来,并没有发生flush或get_contents事件。
一个可能的答案是说“NO,必须有或者是在php.ini文件中的implicit_flush集,或implicit_flush()命令的地方,或其他清洗命令的地方,或获取的内容某处的缓冲区 - 或内容永远不会输出。“对我来说,这是手册的建议。但有时候会有漏洞,而PHP似乎是漏洞的语言。
解决
事实上,我做了一个简单的测试:
<?php
ob_start();
echo "Whats Up Doc!";
?>
,并在浏览器中输出看到。
'ob_get_contents'? 'ob_get_clean'? –
nope ...不是我能找到的。我在“ob_”的所有文件中搜索了一下所有的东西。 – badweasel
@badweasel“不是我可以找到的”..任何IDE(甚至文本编辑器)都应该有一个ctrl + f功能 –