PHP - file_get_contents () с переменной в строке? - PullRequest
4 голосов
/ 15 июля 2011

Я пытаюсь отправить заказ по электронной почте с помощью PHPMailer, когда этот заказ получен.Я попытался сделать это следующим образом:

        $email_page = file_get_contents("email_order_html.php?order=$order_id");

Я хочу получить содержимое этой страницы в виде строки, чтобы я мог отправить это с PHPMailer, но эта функция не будет выполнять страницу из-за переменной $ order_id в ней,Как я могу это исправить?

Ответы [ 5 ]

5 голосов
/ 15 июля 2011

Вы можете добавлять параметры запроса только при использовании file_get_contents с Url Aware Stream Wrapper, например, это будет работать для http://localhost/yourfile.php?foo=bar. Это приведет к выдаче HTTP-запроса на получение веб-серверу на локальном хосте с указанными параметрами запроса. Запрос будет обработан, и результат запроса будет возвращен.

При использовании file_get_contents только с именем файла никаких HTTP-запросов не будет. Вызов поступит напрямую в вашу файловую систему. Ваша файловая система не является веб-сервером. PHP будет только читать содержимое файла. Он не будет выполнять скрипт PHP и будет возвращать только текст в нем.

Вы должны include файл и вызвать все, что скрипт делает вручную. Если сценарий зависит от аргумента порядка, установите его с помощью $_GET['order'] = $orderId перед включением файла.

4 голосов
/ 12 апреля 2013

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);

/...

Надеюсь, это кому-нибудь поможет;)

3 голосов
/ 15 июля 2011

Один из, безусловно, лучших способов сделать это - использовать буферизацию вывода в сочетании с простым включением скрипта создания контента.

// $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();
2 голосов
/ 15 июля 2011
use require("email_order_html.php");

и $order_id будут доступны в вашем файле

1 голос
/ 15 июля 2011

Как сказал Гордон, file_get_contents() читает файлы из файловой системы - текстовые или двоичные файлы, то есть не результат выполнения этих файлов.

Вы можете использовать Curl ( docs ) для этого на тот случай, если вы захотите переместить скрипт на отдельный сервер. В настоящее время более простой подход - просто включить файл и передать аргументы непосредственно в нужную вам функцию.

...