【发布时间】:2016-11-14 13:04:15
【问题描述】:
出于 ajax 的目的,我试图在没有任何视图的情况下从 Cakephp (2.8.5) 控制器呈现字符串。为此,我通常会编写代码,然后在return 之前使用$this->render = false,它可以正常工作。
我在 OVH(一家法国互联网服务提供商)上上传了网站,但出了点问题,呈现的字符串没有按应有的方式运行。在达到一定大小之前,它不会按预期显示。
为了演示这个问题,我在线准备了一个动态页面(您可以将 15 更改为任意数字,低于 15 会生成问题): http://darxnake.fr/nadau3/pages/test/15
代码很简单:
PagesController.php:
class PagesController extends AppController {
public function test($nb=1) {
$str = "";
$char = "o";
$upper = true;
for ($i=0; $i < $nb; $i++) {
$str .= $upper ? strtoupper($char) : strtolower($char);
$upper = $upper ? false : true;
}
$this->autoRender = false;
return $str;
}
}
将最后一个return 更改为die 会显示完整的字符串,但我不喜欢控制器中的die,感觉不应该这样做。
此代码在我的计算机 (Windows / uWamp) 上脱机工作,我不明白出了什么问题。我怀疑来自 OVH 的一些东西,但不能确定也不知道去哪里找。这是此主机的 phpinfo:http://darxnake.fr/nadau3/pages/info/
你能帮我看看是怎么回事吗?谢谢。
编辑:
终于找到了导致问题的原因。 Cakephp2 在每次响应时都会发送一个名为 Content-Length 的 HTTP 标头。虽然传递的大小是准确的(在代码中询问 14 个字符的 14 个传递到标题),但呈现的字符串被剥离。如果我在 CakePhp 库 (/lib/Cake/Network/CakeResponse.php) 中禁用此标头,则渲染字符串是固定的。
在我的本地电脑上,这个标头没有发送(不知道为什么),而在 OVH 上进行了相同的测试,但使用 CakePhp 3,这个标头也没有发送。
所以我禁用了它,lib 代码和问题消失了,但如果有人能解释会发生什么,如果我做错了什么禁用它。我对 HTTP 标头不是很熟悉...
【问题讨论】:
标签: php view controller cakephp-2.0 ovh