我希望能够通过file_get_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; ?>
我希望变量$mystr
等于'The value of myvar is: This is a variable'
还有其他功能可以让你在PHP中执行此操作吗?
答案 0 :(得分:19)
获取文件的内容 与运行脚本 之间存在很大差异:
include
- 此PHP指令将指定文件作为脚本运行,范围与调用include
的范围相同。因此,要将变量“传递”给它,您只需在调用include
之前定义它们。 include
只能在本地使用(只能在与PHP服务器相同的文件系统中包含文件)。
file_get_contents
- 获取文件本地时,只会检索文件中包含的文本。没有完成PHP处理,因此无法“传递”变量。如果您在上面的示例中检查$myvar
,您会看到它包含确切的字符串“<?php echo $myvar; ?>
” - 它尚未执行。
然而,PHP通过允许file_get_contents
提取“远程”文件的内容 - 一个互联网地址,使一些事情变得困惑。在这种情况下,概念是相同的 - PHP只是提取该地址中包含的任何内容的原始结果 - 但PHP,Java,Ruby或其他正在远程服务器上运行的其他服务器可能已执行某些操作以产生该结果。
在这种情况下,您可以根据URL的规范(如果它是API或类似的东西)在URL中传递变量(称为GET
请求参数)。没有办法传递您选择的未被指定在该远程服务器将处理的脚本中处理的变量。
注意:引用 MAY 的“远程服务器”是你自己的服务器,但要小心,因为如果你真的不知道它是如何工作的话,这会让事情更加混乱(它成为第二个完全独立的请求。)通常没有充分的理由这样做而不是使用include
,即使他们可以完成类似的结果。< / p>
答案 1 :(得分:17)
ob_start();
include 'secondfile.php';
$myvar = ob_get_clean();
请注意:对于代码中的许多ob_start
,通常是一个标志,您应该定义返回字符串的函数,然后您可以选择回显或不回显。
答案 2 :(得分:3)
您可以使用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);
结果将是
我的var的值是:some
答案 3 :(得分:1)
以下代码段显示了如何使用PHP函数file_get_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);
答案 4 :(得分:1)
我看到这是一个非常古老的讨论,而我的回答可能在7年后就不太适用了,但只是想分享如何解决同一问题。 我只是在secondfile.php中添加了一个虚拟文本(在我的情况下为ttt555rrrttt),然后我只是用所需的字符串替换了该文本。
$value_to_add = "some value";
$myvar = file_get_contents('secondfile.php');
$myvar = str_replace("ttt555rrrttt", "$value_to_add", $myvar);
那对我有用,也许对其他人也有用。
不知道从性能的角度来看会有多好,但是要记住我正在使用它向用户发送电子邮件模板,因此性能应该不是问题。