84669 orang belajar
152542 orang belajar
20005 orang belajar
5487 orang belajar
7821 orang belajar
359900 orang belajar
3350 orang belajar
180660 orang belajar
48569 orang belajar
18603 orang belajar
40936 orang belajar
1549 orang belajar
1183 orang belajar
32909 orang belajar
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的渲染结果,做缓存之类用的。