【问题标题】:PHP sending variables to file_get_contents()PHP 将变量发送到 file_get_contents()
【发布时间】:2011-10-17 20:31:48
【问题描述】:

我希望能够通过file_get_contents() 将一些变量发送到文件中。

这是第一个文件.php:

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

这是第二个文件.php:

The value of myvar is: <?php echo $myvar; ?>

我希望变量 $mystr 等于 'The value of myvar is: This is a variable'

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

【问题讨论】:

标签: php file-get-contents


【解决方案1】:

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

$value_to_add = "some value";

$myvar = file_get_contents('secondfile.php');
$myvar = str_replace("ttt555rrrttt", "$value_to_add", $myvar);

这对我有用,也许对其他人也有用。

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

【讨论】:

  • 非常优雅的答案。也很聪明。
  • 谢谢 :) @Dimitar。它实际上工作得很好:)
【解决方案2】:

您可以使用 sprintf 函数,例如: 第一个文件.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】:

    以下代码 sn-p 显示了如何使用 PHP 函数 file_get_contents 发送 HTTP 发布请求的简单方法:

    <?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);
    

    Passing variable in a URL (php) & file_get_contents()

    【讨论】:

      【解决方案4】:

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

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

      • file_get_contents — 在本地获取文件时,这只是检索文件中包含的文本。没有进行 PHP 处理,因此无法“传递”变量。如果您在上面的示例中检查$myvar,您会看到它包含确切的字符串“&lt;?php echo $myvar; ?&gt;”——它还没有被执行。

        然而,PHP 允许file_get_contents 提取“远程”文件的内容——一个互联网地址,从而使一些事情变得有些混乱。在这种情况下,概念是相同的——PHP 只是提取该地址中包含的任何内容的原始结果——但 PHP、Java、Ruby 或在该远程服务器上运行的任何其他内容可能执行了某些操作来产生该结果。

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

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

      【讨论】:

      • 对 OP 的解释很好,我没有精力这样做,+1。
      【解决方案5】:
      ob_start();
      include 'secondfile.php';
      $myvar = ob_get_clean();
      

      但请注意:代码中的许多ob_start 通常表明您应该定义返回字符串的函数,然后您可以选择是否回显。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-15
        • 1970-01-01
        • 2012-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多