PHP ob_仅在第一次启动骨架时工作
我浏览了推荐的标题,找到了一些答案,但没有找到真正有效的答案,所以我转向你 我有一个函数,它使用PHP ob_仅在第一次启动骨架时工作,php,time,ob-start,Php,Time,Ob Start,我浏览了推荐的标题,找到了一些答案,但没有找到真正有效的答案,所以我转向你 我有一个函数,它使用ob_start()调用一个文件,其中的内容用作骨架。一旦检索到内容,我就使用ob\u end\u clean() 我似乎只是在第一次调用函数时才得到输出,之后就什么都没有了。我已经包括了一个代码转储,以防我做错了什么 我还包括了一个从数据库调用返回的示例($dl->select…) 我还确保数据确实从我期望的数据库传回 Array ( [0] => Array ( [r
ob_start()
调用一个文件,其中的内容用作骨架。一旦检索到内容,我就使用ob\u end\u clean()
我似乎只是在第一次调用函数时才得到输出,之后就什么都没有了。我已经包括了一个代码转储,以防我做错了什么
我还包括了一个从数据库调用返回的示例($dl->select…
)
我还确保数据确实从我期望的数据库传回
Array
(
[0] => Array
(
[rev_id] => 7
[rev_temp_tree_id] => 2
[rev_tree_id] =>
[rev_status] =>
[rev_last_updated_by] => 0
[rev_authorized_by] =>
[rev_date_updated] => 1334600174
[rev_date_reviewed] =>
[rev_update_type] => 1
[temp_tree_id] => 2
[temp_tree_bag_size] => 250
[temp_tree_botanical_id] =>
[temp_tree_stem_size] => 0
[temp_tree_crown] => 0
[temp_tree_price] => 0
[temp_tree_height] => 0
[temp_tree_plant_date] => 0
[temp_tree_review_id] =>
[temp_tree_comments] =>
[temp_tree_marked_move] => 0
[temp_tree_initial_location] =>
[temp_tree_coord] =>
[temp_tree_name] => TEST
[temp_tree_sale_status] => 0
[temp_tree_open_ground] =>
[temp_tree_block] => 0
[temp_tree_row] => 0
)
)
而代码
<?php
function print_trees($trees){
$return = '';
ob_start();
include_once('skeletons/tree.html');
$tree_skeleton= ob_get_contents();
ob_end_clean();
$search=array("[tree_id]", "[tree_name]", "[Classes]", "[rev_id]");
foreach($trees as $t){
$replace=array($t['temp_tree_id'], $t['temp_tree_name'].' ['.$t['temp_tree_id'].']', 'temp_tree', $t['rev_id']);
$return.=str_replace($search,$replace,$tree_skeleton);
}
return $return;
}
switch ($_GET['mode']){
case 'trees' :
$db_status = '';
$new_trees = $dl->select('tree_review AS tr LEFT JOIN temp_tree_trees AS tt ON tr.rev_temp_tree_id=tt.temp_tree_id', 'tr.rev_update_type="1"');
echo '<h2>New Trees</h2>';
if($dl->totalrows>0){
echo print_trees($new_trees);
}
else{
echo 'no new trees for review';
}
echo '<br /><br />';
$new_trees = $dl->select('tree_review AS tr LEFT JOIN temp_tree_trees AS tt ON tr.rev_tree_id=tt.temp_tree_id', 'tr.rev_update_type="2"');
echo '<h2>Updated Trees</h2>';
if($dl->totalrows>0){
echo print_trees($new_trees);
}
else{
echo 'no update trees for review';
}
echo '<br /><br />';
$new_trees = $dl->select('tree_review AS tr LEFT JOIN temp_tree_trees AS tt ON tr.rev_tree_id=tt.temp_tree_id', 'tr.rev_update_type="3"');
echo '<h2>Moved Trees</h2>';
if($dl->totalrows>0){
echo print_trees($new_trees);
}
else{
echo 'no moved trees for review';
}
echo '<br /><br />';
$new_trees = $dl->select('tree_review AS tr LEFT JOIN temp_tree_trees AS tt ON tr.rev_tree_id=tt.temp_tree_id', 'tr.rev_update_type="4"');
echo '<h2>Duplicated Trees</h2>';
if($dl->totalrows>0){
echo print_trees($new_trees);
}
else{
echo 'no duplicated trees for review';
}
break;
}
?>
我相信这可能是两件事之一:
在HTML文件中将多维数组表示为字符串,然后尝试使用字符串替换对其进行操作时,可能会遇到问题。您最好将文件表示为一个数据结构(XML、JSON)并以这种方式分开进行解析——这样可以完全跳过输出缓冲
或者,我不确定$new_trees是一个对象数组还是其他东西。如果它是一个对象数组,那么foreach()循环将无法正常工作,即它应该是$t->temp\u tree\u id vs.$t['temp\u tree\u id']我相信这可能是两件事之一:
在HTML文件中将多维数组表示为字符串,然后尝试使用字符串替换对其进行操作时,可能会遇到问题。您最好将文件表示为一个数据结构(XML、JSON)并以这种方式分开进行解析——这样可以完全跳过输出缓冲
或者,我不确定$new_trees是一个对象数组还是其他东西。如果它是一个对象数组,那么foreach()循环将无法正常工作,即它应该是$t->temp\u tree\u id而不是$t['temp\u tree\u id']谢谢您的评论
我发现了问题所在,事实上这很愚蠢。我作为骨架导入的文件使用include_包含了一次,因此,一旦我再次尝试调用它,它将不允许我
@minitech我按照你的建议更新了代码,谢谢
@gadhra骨架文件中的内容是纯html,im使用关键字将db中的内容替换为html。我应该把html和我的代码放在一起
再次感谢:)谢谢您的评论
我发现了问题所在,事实上这很愚蠢。我作为骨架导入的文件使用include_包含了一次,因此,一旦我再次尝试调用它,它将不允许我
@minitech我按照你的建议更新了代码,谢谢
@gadhra骨架文件中的内容是纯html,im使用关键字将db中的内容替换为html。我应该把html和我的代码放在一起
再次感谢:)代码提示:您可以执行$tree\u skeleton=ob\u get\u clean()代码>而不是两个步骤。代码提示:您可以执行$tree\u skeleton=ob\u get\u clean()代码>而不是两个步骤。