13

我有一个包含 HTML 标记的文档文件。我想将整个文件的内容分配给 PHP 变量。

我有这行代码:

$body = include('email_template.php');

当我做一个var_dump()我得到string(1) "'"

是否可以将文件的内容分配给变量?

[注意:这样做的原因是我想将邮件消息的正文部分与邮件脚本分开——有点像模板,因此用户只需修改 HTML 标记而无需关心我的邮件脚本。所以我将文件作为整个身体段包括在内mail($to, $subject, $body, $headers, $return_path);

谢谢。

4

7 回答 7

23

如果有需要执行的 PHP 代码,你确实需要使用include. 但是,include不会返回文件的输出;它将被发送到浏览器。您需要使用称为输出缓冲的 PHP 功能:它捕获脚本发送的所有输出。然后,您可以访问和使用这些数据:

ob_start();                      // start capturing output
include('email_template.php');   // execute the file
$content = ob_get_contents();    // get the contents from the buffer
ob_end_clean();                  // stop buffering and discard contents
于 2012-06-27T15:58:14.347 回答
13

你应该使用file_get_contents()

$body1 = file_get_contents('email_template.php');

include包含并在您的当前文件中执行,并存储toemail_template.php的返回值。include()$body1

如果需要在 of 文件中执行 PHP 代码,可以使用输出控制

ob_start();
include 'email_template.php';
$body1 = ob_get_clean();
于 2012-06-27T15:52:54.283 回答
2

file_get_contents()

$file = file_get_contents('email_template.php');

或者,如果你了:

ob_start();
include('email_template.php');
$file = ob_end_flush();
于 2012-06-27T15:53:13.363 回答
1

正如其他人发布的那样,file_get_contents如果不需要以任何方式执行该文件,请使用。

或者,您可以让您的 include 使用 return 语句返回输出。

如果您的 include 使用 echo [ed: 或离开 PHP 解析模式] 语句进行处理和输出,您还可以缓冲输出。

ob_start();
include('email_template.php');
$body1 = ob_get_clean();

TimCooper 打败了我。:P

于 2012-06-27T15:57:25.550 回答
0

尝试使用 PHP 的file_get_contents()函数。

在此处查看更多信息:http: //php.net/manual/en/function.file-get-contents.php

于 2012-06-27T15:53:08.207 回答
0

是的,你可以很容易。

在要使用变量的文件中放置这个

require_once ‘/myfile.php';
if(isset($responseBody)) {
    echo $responseBody;
    unset($responseBody);
}    

在您正在调用的文件中 /myfile.php 放置这个

$responseBody = 'Hello world, I am a genius';

谢谢丹尼尔

于 2015-02-03T18:00:52.573 回答
0

你有两个可选的选择

[选项1]

  1. 创建一个名为'email_template.php'
  2. 在文件中添加一个像这样的变量

    $body = '<html>email content here</html>';

  3. 在另一个文件中require_once 'email_template.php'

  4. 然后echo $body;

[选项 2]

$body = require_once 'email_template.php';
于 2019-02-28T21:30:32.297 回答