将PHP变量与file_get_contents一起使用

I have a newsletter template in one file and a mail script in another file which basically pulls email addresses from a database and loops through each one sending the email to them.

I am using this code to get the contents of the newsletter template:

$content = file_get_contents('attach/T_newsletter.php');

What I need to do now is send PHP variables along with this eg:

T_newsletter.php?test=hello

and then be able to pull them from the URL in the template and adjust the content accordingly.

Could someone explain how I would do this please?

Thanks for any help

If you want to do that, you will need to call that file "T_newsletter.php" as part of a URL:

$content = file_get_contents("http://yourdomain.com/T_newsletter.php?test=hello");

and inside T_newsletter.php:

<?php
  $v = $_GET['test']; // this will be 'hello'

  if($v == 'hello')
  {
    ...
  }
  else
  {
    ...
  }
?>

The other option would be to use a template engine like Twig or Smarty to parse the files directly if you do not wish to make an HTTP request.

$response=file_get_contents("attach/T_newsletter.php?test=hello");

The cleanest and most flexible solution would be to use a template engine (like smarty) and instead of outputting the parsed content reading it into a variable... you can use variables, loops etc. in your template file (see here) and read the result into a variable with fetch (see here).

file_get_contents('attach/T_newsletter.php');

Whoa! Stop right there. If this is not PHP source code then it should not have a .php extension - if it is PHP source code then you shouldn't be sending it out on a mailing list.

If you want to execute the code inside the file, then this is not the way to do it. One method would be to access the file via HTTP, e.g.

file_get_contents('http://localhost/attach/T_newsletter.php');

While this simplifies passing parameters to the script, it is still a rather messy solution.

Another really horrible way to solve the problem would be....

ob_start();
include('/attach/T_newsletter.php');
$content=ob_get_contents();
ob_end_flush();

The right way to implement this would be

1) as function (or class) in the included file:

 require_once ('/attach/T_newsletter.php');
 $content=generate_newsletter($params);

2) using the file as a DATA file template:

 $template=file_get_contents('/attach/T_newsletter.data');
 $content=preg_replace($template_vars, $template_values, $template);