我在收到此订单时尝试通过PHPMailer向客户发送电子邮件。 我试着这样做:
$email_page = file_get_contents("email_order_html.php?order=$order_id");
我想将此页面的内容作为字符串获取,因此我可以使用PHPMailer发送此函数但由于其中的变量$ order_id,此函数不会执行该页面,我该如何解决这个问题?
答案 0 :(得分:5)
将file_get_contents
与Url Aware Stream Wrapper一起使用时,您只能添加查询参数,例如它适用于http://localhost/yourfile.php?foo=bar
。这样做会使用指定的查询参数向localhost上的Web服务器发出HTTP Get Request。将处理该请求并返回请求的结果。
当仅使用带有文件名的file_get_contents
时,不会有任何HTTP请求。该呼叫将直接进入您的文件系统。您的文件系统不是Web服务器。 PHP只会读取文件内容。它不会执行PHP脚本,只会返回其中的文本。
您应该include
该文件并调用脚本手动执行的操作。如果脚本取决于order参数,请在包含文件之前通过$_GET['order'] = $orderId
进行设置。
答案 1 :(得分:4)
email_template.php
<body>
<p>{foo}</p>
<p>{bar}</p>
</body>
sendmail.php
../
$mail = new PHPMailer();
//get the file:
$body = file_get_contents('email_template.php');
$body = eregi_replace("[\]",'',$body);
//setup vars to replace
$vars = array('{foo}','{bar}');
$values = array($foor,$bar);
//replace vars
$body = str_replace($vars,$values,$body);
//add the html tot the body
$mail->MsgHTML($body);
/...
希望它可以帮到某人;)
答案 2 :(得分:3)
其中一个更好的方法是使用输出缓冲并结合简单地包含内容创建脚本。
// $order_id is certainly available in place where file_get_contents has been used...
ob_start();
require 'email_order_html.php';
$email_page = ob_get_clean();
答案 3 :(得分:2)
use require("email_order_html.php");
和$order_id
将在您的文件中提供
答案 4 :(得分:1)
正如戈登所说,file_get_contents()
从文件系统中读取文件 - 文本或二进制文件,即不是执行这些文件的结果。
如果您想将脚本移动到单独的服务器,可以使用Curl(docs)来执行此操作。目前,简单地包含文件并将参数直接传递给您想要的函数是一种更敏感的方法。
答案 5 :(得分:0)
$email_page = file_get_contents("email_order_html.php?order=".$order_id);
file_get_contents 也可以读取 url 中的内容,至少在 2021 年,是的。