Я пытаюсь отправить заказ клиенту PHPMailer клиенту при получении этого заказа. Я пробовал так:
$email_page = file_get_contents("email_order_html.php?order=$order_id");
Я хочу, чтобы содержимое этой страницы было как строка, поэтому я могу отправить это с помощью PHPMailer, но эта функция не будет выполнять страницу из-за переменной $ order_id в ней, как я могу ее исправить?
Вы можете добавлять Query Params при использовании file_get_contents
с помощью Url Aware Stream Wrapper, например, для http://localhost/yourfile.php?foo=bar
. Это приведет к отправке запроса HTTP Get на веб-сервер в localhost с указанными параметрами запроса. Запрос будет обработан, и результат запроса будет возвращен.
При использовании file_get_contents
с именем файла не будет никаких HTTP-запросов. Вызов перейдет непосредственно в вашу файловую систему. Ваша файловая система не является веб-сервером. PHP будет читать только содержимое файла. Он не будет выполнять скрипт PHP и будет возвращать только текст в нем.
Вы должны include
файл и вызвать все, что скрипт делает вручную. Если скрипт зависит от аргумента заказа, установите его через $_GET['order'] = $orderId
перед включением файла.
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); /...
Надеюсь, это поможет кому-то;)
Одним из, безусловно, лучших способов сделать это было бы использование буферизации вывода в сочетании с простым включением сценария создания контента.
// $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();
use require("email_order_html.php");
и $order_id
будет доступен в вашем файле
Как сказал Гордон, file_get_contents()
читает файлы из файловой системы – текстовые или двоичные файлы, то есть не результат выполнения этих файлов.
Вы можете использовать Curl ( docs ) для этого, если вы захотите переместить скрипт на отдельный сервер. На данный момент просто включать файл и передавать аргументы непосредственно функции, которую вы хотите, является более чувствительным подходом.