84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
ob_start在手册里是这么描述的:
此函数将打开输出缓冲。当输出缓冲激活后,脚本将不会输出内容(除http标头外),相反需要输出的内容被存储在内部缓冲区中。
那么按照我的理解是这样的:
<?php ob_start(); echo 'ob_start'; // 按理说ob_start不应该输出啊。但是确实输出了。
为什么和手册里描述的不一样。
学习是最好的投资!
应当理解为,不会立刻输出到上级缓冲区,可以通过ob_*的相关操作进行缓冲区的获取、冲出、清除 等,此时可以将输出进行统一,比如正则处理,数据包装等。
页面静态化可以使用php提供的ob缓存技术手动将缓存内容提交的apche等服务器处理
$id = isset($_GET['id'])?$_GET['id']-0:0; $filename = "html/".date("Ymd")."/news-id".$id.".html"; if(!file_exists("html/".date("Ymd"))){ mkdir("html/".date("Ymd")); } echo $filename; if(!file_exists($filename) || filemtime($filename)+60<time()){ ob_start(); require "conn.php"; $sql = "select * from news where id='$id'"; $res = $db->query($sql); $row = $res->fetch_assoc(); if($row){ echo "<table border='1'>"; echo "<tr>"; echo "<td>ID</td>"; echo "<td>标题</td>"; echo "<td>内容</td>"; echo "</tr>"; echo "<tr>"; echo "<td>".$row['id']."</td>"; echo "<td>".$row['title']."</td>"; echo "<td>".$row['content']."</a></td>"; echo "</tr>"; echo "</table>"; }else{ echo "没有数据"; } $content = ob_get_contents(); ob_end_clean(); file_put_contents($filename,$content); } require $filename;
那是因为你脚本执行完了缓冲就输出来了你可以在echo 后面加一句ob_end_clean();缓冲就会清掉了
完了不输出那才怪呢。。。ob 只是让我们可以获取到php的渲染结果,做缓存之类用的。
应当理解为,不会立刻输出到上级缓冲区,可以通过ob_*的相关操作进行缓冲区的获取、冲出、清除 等,此时可以将输出进行统一,比如正则处理,数据包装等。
页面静态化可以使用php提供的ob缓存技术手动将缓存内容提交的apche等服务器处理
那是因为你脚本执行完了
缓冲就输出来了
你可以在echo 后面加一句ob_end_clean();
缓冲就会清掉了
完了不输出那才怪呢。。。ob 只是让我们可以获取到php的渲染结果,做缓存之类用的。