我希望能够通过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中执行此操作吗?
获取文件内容和运行脚本之间存在很大差异:
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
请求参数)。没有办法传递您选择的未指定在该远程服务器将处理的脚本中处理的变量。
注意:提到的“远程服务器”可能是你自己的服务器,但要小心,因为如果你真的不知道这一切是如何工作的话,这会使事情更加混乱(它成为第二个完全独立的请求)。通常没有充分的理由这样做而不是使用include
,即使他们可以取得类似的结果。ob_start();
include 'secondfile.php';
$myvar = ob_get_clean();
但请注意:对于代码中的许多ob_start
来说,通常是一个标志,你应该定义返回字符串的函数,然后你可以选择是否回显。
您可以使用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
以下代码片段显示了如何使用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);
我看到这个相当古老的讨论,我的回答可能在7年之后不太相关,但只是想分享如何绕过同样的问题。我刚在secondfile.php中添加了一个虚拟文本(在我的情况下是ttt555rrrttt),然后我只是用我想要的字符串替换该文本。
$value_to_add = "some value";
$myvar = file_get_contents('secondfile.php');
$myvar = str_replace("ttt555rrrttt", "$value_to_add", $myvar);
这对我有用,也许它对其他人有用。
不知道从性能的角度来看会有多好,但是考虑到我用它来向用户发送电子邮件模板,性能应该不是问题。