为什么我不应该使用 shell_exec 而不是输出缓冲到 'include' 一个文件到一个变量中?
Why shouldn't I use shell_exec rather than output buffering to 'include' a file into a variable?
我有一个模板可以处理在每一页上重复出现的各种内容。问题是,所有不同的东西都进入了模板的中间。大多数人对此都很熟悉,但这里有一些伪标签作为视觉辅助:
<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, which suggests using shell_exec
。虽然我大体上理解 shell_exec
的作用,但我并不真正熟悉它的使用。我这样试过:
$different_stuff = shell_exec('php different_stuff.php');
include 'template.php';
它确实有效,我喜欢它只是因为它是一个声明而不是三个。不过,这感觉像是一个坏主意(主要是因为我认为如果这是一个好主意,我会看到它被更频繁地使用,这是我第一次看到它)但我对 shell_exec
想知道为什么。
我认为这听起来像是一个基于意见的问题,但我真的不是在征求意见。我想知道 objective,不使用这种方法的明显原因。
您正在以这种方式启动新的 shell 环境和 PHP 的新实例,而不是利用 PHP 实例,您的代码已经 运行 .因此存在性能和内存影响。
许多服务器都有单独的 php.ini 文件用于命令行 PHP(您的 shell_exec 调用)和基于 FPM 的 PHP(大多数现代网络服务器调用) .
而且,shell_exec 不会传回任何错误信息,因此您将很难检测到问题并进行故障排除。
我有一个模板可以处理在每一页上重复出现的各种内容。问题是,所有不同的东西都进入了模板的中间。大多数人对此都很熟悉,但这里有一些伪标签作为视觉辅助:
<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, which suggests using shell_exec
。虽然我大体上理解 shell_exec
的作用,但我并不真正熟悉它的使用。我这样试过:
$different_stuff = shell_exec('php different_stuff.php');
include 'template.php';
它确实有效,我喜欢它只是因为它是一个声明而不是三个。不过,这感觉像是一个坏主意(主要是因为我认为如果这是一个好主意,我会看到它被更频繁地使用,这是我第一次看到它)但我对 shell_exec
想知道为什么。
我认为这听起来像是一个基于意见的问题,但我真的不是在征求意见。我想知道 objective,不使用这种方法的明显原因。
您正在以这种方式启动新的 shell 环境和 PHP 的新实例,而不是利用 PHP 实例,您的代码已经 运行 .因此存在性能和内存影响。
许多服务器都有单独的 php.ini 文件用于命令行 PHP(您的 shell_exec 调用)和基于 FPM 的 PHP(大多数现代网络服务器调用) .
而且,shell_exec 不会传回任何错误信息,因此您将很难检测到问题并进行故障排除。