PHP将变量发送到文件_get_contents()

PHP将变量发送到文件_get_contents(),php,file-get-contents,Php,File Get Contents,我希望能够通过file\u get\u contents()向文件发送一些变量 这是firstfile.php: <?php $myvar = 'This is a variable'; // need to send $myvar into secondfile.php $mystr = file_get_contents('secondfile.php'); ?> 这是secondfile.php: The value of myvar is: <?php echo

我希望能够通过
file\u get\u contents()
向文件发送一些变量

这是firstfile.php:

<?php
$myvar = 'This is a variable';
// need to send $myvar into secondfile.php
$mystr = file_get_contents('secondfile.php');
?>

这是secondfile.php:

The value of myvar is: <?php echo $myvar; ?>
myvar的值为:
我希望变量
$mystr
等于
“myvar的值是:这是一个变量”

有没有其他函数可以让您在PHP中执行此操作

ob_start();
include 'secondfile.php';
$myvar = ob_get_clean();

但是要注意:对于许多人来说,代码中的ob\u start通常是一个标志,你应该定义返回字符串的函数,然后你可以选择是否回显。

获取文件内容与运行脚本之间有很大的区别:

  • -此PHP指令以脚本的形式运行指定的文件,其作用域与调用
    include
    的作用域相同。因此,要将变量“传递”给它,只需在调用
    include
    之前定义它们
    包含
    只能在本地使用
    (只能包含与PHP服务器位于同一文件系统上的文件)

  • -在本地获取文件时,只需检索文件中包含的文本。没有进行PHP处理,因此无法“传递”变量。如果在上面的示例中检查
    $myvar
    ,您将看到它包含确切的字符串“
    ”——它尚未执行

    然而,PHP允许
    file\u get\u contents
    拉入一个“远程”文件(一个互联网地址)的内容,这有点混淆了一些事情。在本例中,概念是相同的-PHP只提取该地址中包含的任何内容的原始结果-但PHP、Java、Ruby或运行在远程服务器上的任何其他内容可能执行了一些操作以产生该结果

    在这种情况下,您可以根据URL的规范(如果是API或类似的东西)在URL中“传递”变量(称为
    GET
    request parameters)。无法传递您选择的变量,这些变量尚未指定在将由该远程服务器处理的脚本中处理

    注意:所指的“远程服务器”可能是您自己的服务器,但要小心,因为如果您不知道它是如何工作的(它变成了第二个完全独立的请求),这可能会使事情更加混乱。通常没有很好的理由这样做,而不是使用
    include
    ,尽管他们可以取得类似的结果


以下代码片段展示了如何使用PHP函数文件\u get\u contents发送HTTP post请求的简单方法:

<?php

$url = 'http://url.com/path';
$data = array('param1' => 'value1', 'param2' => 'value2')

// use key 'http' even if you send the request to https://...
$options = array('http' => array(
    'method'  => 'POST',
    'content' => http_build_query($data)
));

$context  = stream_context_create($options);
$result = file_get_contents($url, false, $context);

print_r($result);

您可以使用sprintf函数,例如:
firstfile.txt

The value of my var is: %s
secondfile.php

<?php
$f = file_get_contents("firstfile.txt");
$var = "some";
echo sprintf($f, $var);

我看到这是一个相当古老的讨论,7年后我的答案可能不太相关,但我只是想分享一下如何解决同一问题。
我只是在secondfile.php中添加了一个伪文本(在我的例子中是ttt555rrrttt),然后我只是用我想要的字符串替换该文本

$value_to_add = "some value";

$myvar = file_get_contents('secondfile.php');
$myvar = str_replace("ttt555rrrttt", "$value_to_add", $myvar);
这对我有用,也许对其他人也有用


从性能的角度看,我不知道它会有多好,但请记住,我正在使用它向用户发送电子邮件模板,性能应该不会有问题。

可能重复对OP的良好解释,我没有精力这么做,+1。回答非常优雅。也很聪明。谢谢:)@Dimitar。它实际上工作得很好:)