PHP 的输出缓存
首先明确PHP的输出顺序
1.开启php输出缓存:echo,print -> php -> -> ->
2、php输出缓存未开启:echo,print -> -> ->
另外,浏览器的输出缓存:IE是,也是。 只有当输出数据达到这个长度或者脚本结束时,浏览器才会在页面上输出数据。
它是一个内存地址空间。 Linux系统默认的大小一般是4096(4kb),也就是一个内存页。 主要用于存储速度不同步的设备或优先级不同的设备之间的数据传输区域。 通过这样做,进程可以减少彼此等待的时间。 这是一个更一般的例子。 当你打开文本编辑器编辑文件时,每输入一个字符,操作系统不会立即将该字符直接写入磁盘,而是先将其写入磁盘。 当满了时,只有调用内核函数flush()时才会将数据写入磁盘。 当调用内核函数flush()时,必须将脏数据写回磁盘。
同样的,当执行echo和print时,输出并不是立即传递到客户端浏览器进行显示,而是将数据写入到php.ini中。 PHP的机制意味着之前创建了一个新的队列,数据必须经过该队列。 当一个PHP写满后,脚本进程会将PHP中的输出数据交给系统内核,传递给浏览器显示。 因此,数据会依次写入这些地方:echo/print -> php -> ->
php
默认情况下,php是开启的,默认值为4096,即4kb。 您可以在 php.ini 配置文件中找到该配置。 当echo、print等输出用户数据时,会将输出数据写入php,直至写满,然后将数据传输到浏览器进行显示。 还可以通过()手动激活php机制,这样即使输出超过4kb的数据,数据也不会真正传递到浏览器,因为()将php空间设置得足够大。 在脚本结束或调用函数之前,数据不会发送到客户端浏览器。
当我们将php.ini中的设置设置为On时,意味着设置了无限空间。
假设我们将其设置为Off,那么php代码:
echo "php";
header("content-type:text/html;charset='utf-8'");
echo 'ok';
是一条错误消息: - 发送者
根据以上内容分析原因:
PHP在echo 'php'时已经向浏览器发送了一个头信息,再次出现时("-type:text/html;='utf-8'");
我看到了另一个标题信息。 此时,上面的头信息已经被打回来了。 无法更改并且发生错误。
上述问题可以通过以下方法解决:
1、输出前检查是否有内容输出
2. 使用
... HTML 代码...
解决方案
3. ( | ); 只是不要在这里显示
没有显示错误(但错误仍然存在)
4.是否有编辑php.ini的权限
将 = 设置为打开或特定大小。
5.将文件转换为UTF-8 BOM编码文件
今天修改代码提交到服务器时,发现日志文件有错误:
发送...
检查以查找文件中记录的错误
应用\代码\核心\Mage\Core\\\Http.php
if (!$this->canSendHeaders()) {
Mage::log('HEADERS ALREADY SENT: '.mageDebugBacktrace(true, true, true));
return $this;
}
跟踪功能
在 lib\Zend\\\.php 中
public function canSendHeaders($throw = false)
{
$ok = headers_sent($file, $line);
if ($ok && $throw && $this->headersSentThrowsException) {
#require_once 'Zend/Controller/Response/Exception.php';
throw new Zend_Controller_Response_Exception('Cannot send headers; headers already sent in ' . $file . ', line ' . $line);
}
return !$ok;
}
可以看到使用了该函数。我们也可以通过该函数来查找错误发生在哪里
其实这个错误和php提示错误-发送者是一样的
应该是一个问题
我找到了php.ini并修改了它
=4096 已解决 On 错误,
但是这里的问题是我打开了但是还是出现这个错误?是不是大小不够呢?
我只是尝试给1M,结果没有错误。
所以我的猜测是:(如果知道请告诉我具体原因,谢谢!)
输出内容比较大。 PHP 缓冲区大小为 4kb。 当满了的时候,就会输出到,但是这4kb之后
还有就是对头信息进行修改,比如()函数,但是头信息已经发送出去了,所以报错。而且如果修改了大小
On 表示如果无穷大,则误差消失。
-------------------------------------------------- - - - - - - - -是这样吗? - - - - - - - - - - - - - - - - -----------------------------------------------------------
-------------------------------------------------- -------------- 续订------------------------------------ ------------------------------------------
正确答案在这里\("▔□▔)/
参考: