ホームページ  >  記事  >  バックエンド開発  >  php的include和ob函数在循环中导致的,该如何处理

php的include和ob函数在循环中导致的,该如何处理

WBOY
WBOYオリジナル
2016-06-13 10:12:01802ブラウズ

php的include和ob函数在循环中导致的

程序大概如下
...
foreach($arr as $value){
  ob_start();
  include template($value['filename']);
  $message = addslashes(trim(ob_get_contents()));
  ob_end_clean();
}

这种模式执行5000条数据 就会出现

Too many open files的错误 

如果执行数为1000没有问题

怎么解决啊

------解决方案--------------------
Too many open files 是打开文件太多
你应考虑换个思路,而不是 include
------解决方案--------------------
建议你查一下ob_start和ob_end_clean()、ob_get_contents()的用法,理解清楚了就知道怎么回事了

PHP code
ob_start();foreach($arr as $value){  include template($value['filename']);  $message = addslashes(trim(ob_get_contents()));  ob_end_clean();};<br><font color="#e78608">------解决方案--------------------</font><br>foreach($arr as $value){<br> ob_start();<br> include template($value['filename']);<br> $message = addslashes(trim(ob_get_contents()));<br> ob_end_clean();<br>}<br><br>话说你这样是生成静态吗?<br><br>用请求跳转来分批做啊<br><br>伪代码演示<br><br>触发请求:dosomeing.php?page=1&per=1000;<br><br>
PHP code
$arr = $data.limit((page-1)*$per, per)foreach($arr as $value){  ob_start();  include template($value['filename']);  $message = addslashes(trim(ob_get_contents()));  ob_end_clean();}$page++;header('Location: dosomeing.php?page='.$page.'&per='.$per)<br><font color="#e78608">------解决方案--------------------</font><br>php 版本? 5.2.6?  <br>可能是php的bug<br><br>试试把include改为include_once<br><br>http://bugs.php.net/bug.php?id=45133<div class="clear">
                 
              
              
        
            </div>
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。