我有一个模板可以处理每个页面上重复的各种内容。问题是,所有不同的东西都会进入模板的中间。大多数人都熟悉这一点,但这里有一些伪标签作为视觉辅助:
<begin_template>
<top_part_of_template_with_repeated_stuff>
<!--different stuff goes here-->
<bottom_part_of_template_with_more_repeated_stuff>
<end_template>
我知道有各种不同的方法可以解决这个问题。我不喜欢这样做:
include 'top_part_of_template.html';
// output the different part
include 'bottom_part_of_template.html';
因为打开和关闭标签在单独的文档中困扰我。我目前正在做的是这样的模板:
<template>
<?php if (isset($different_stuff)) echo $different_stuff ?>
<more_template>
使用输出缓冲得到不同的东西:
ob_start();
include 'different_stuff.php';
$different_stuff = ob_get_clean();
include 'template.php';
我遇到this answer,建议使用shell_exec
。虽然我通常理解shell_exec
的作用,但我并不熟悉使用它。我试过这样的话:
$different_stuff = shell_exec('php different_stuff.php');
include 'template.php';
它确实有效,我喜欢它只是因为它是一个陈述而不是三个。但这感觉好像是一个坏主意(主要是因为我觉得如果这是一个好主意我会更频繁地使用它,而这是我第一次看到它)但我对此并不熟悉shell_exec
知道原因。
我认为这听起来有点像基于意见的问题,但我真的不是在寻找意见。我想知道不使用这种方法的客观,可证明的理由。
答案 0 :(得分:2)
您正在以这种方式启动新的shell环境和PHP的新实例,而不是利用已运行代码的PHP实例。所以有性能和内存的影响。
许多服务器都有单独的php.ini文件,用于命令行PHP(shell_exec调用)和基于FPM的PHP(大多数现代Web服务器调用)。
并且,shell_exec不会传回任何错误信息,因此您将更难以发现问题并对其进行故障排除。