PHP – file_get_contents () с переменной в строке?

Я пытаюсь отправить заказ клиенту 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 ) для этого, если вы захотите переместить скрипт на отдельный сервер. На данный момент просто включать файл и передавать аргументы непосредственно функции, которую вы хотите, является более чувствительным подходом.