【问题标题】:How to Capture PHP Output into a Variable如何将 PHP 输出捕获到变量中
【发布时间】:2024-01-22 08:16:01
【问题描述】:

我一直想要这样做,因为我的网站在每次页面加载时会执行大约 3 个 HTTP 请求,因为每个 PHP 的输出都是使用 cURL 检索的。这太慢了,我想避免使用 cURL。我在 Stack Overflow 上找到了this question,它基本上可以满足我的需求。接受的答案的建议是使用ob_start(); 开始获取输出,然后使用ob_get_clean(); 将输出放入变量中。我现在的问题是我试图从需要使用 HTTP Get 传递给它们的变量中捕获输出的 PHP 脚本。像这样访问这些变量:

$term = $_GET['term'];

我不想改变这一点,因为虽然我打算从另一个 PHP 脚本访问这些 PHP 脚本的输出,但我也计划从其他地方访问它们。那么,有没有办法让这些 PHP 脚本通过 Get 接受一些参数,然后用上面建议的方法捕获它们的输出?

【问题讨论】:

    标签: php http-get


    【解决方案1】:

    如果已设置,您可以从任何 php 脚本中 $_GET 变量(使用isset 进行检查)。然后只需 cURL 到这样的 url 就可以了。

    如果您之前已将方法更改为 POST,则可以使用CURLOPT_HTTPGET。有关详细信息,请参阅 curl_setopt 函数页面 (http://www.php.net/manual/en/function.curl-setopt.php)。

    对于非 cURL 方法,请使用 jQuery ajax。使用非常简单,阅读文档here即可。

    编辑:这就是你想要的(虽然还没有检查代码)

    <?php
    
    function get_include_contents($filename, $get) {
     if (is_file($filename)) {
        ob_start();
        $_GET = array();
        while (list($key, $val) = each($get)) {
          $_GET[$key]=$val;
        }
        include $filename;
        return ob_get_clean();
     }
     return false;
    }
    
    $string = get_include_contents('somefile.php', array('param1'=>'x', 'param2'=>'y'));
    
    ?>
    

    【讨论】:

    • 实际上我试图避免使用 cURL,因为它很慢。这就是我的问题的重点。
    • @Hassan 您实际上说您在问题的第一行中使用了 cURL。无论如何,您可以为此使用jQuery ajax。只需在 $.ajax 的 data 参数中传递您要作为 get 值发送的值,您的输出将在成功函数中接收。
    • 是的,我正在使用 cURL,但这正是我的问题。
    • @Hassan 然后使用 ajax!那是最好的解决方案!我也总是使用 ajax,脚本应始终避免使用 cURL。
    • @Hassan gopi1410 很棒的答案!我喜欢将其作为函数来回答的方式。 & 使用列表 & 迭代每个函数都很酷!从未想过以这种方式使用它。这应该是公认的答案!
    【解决方案2】:

    我不想改变这一点,因为虽然我打算从另一个 PHP 脚本访问这些 PHP 脚本的输出,但我也计划从其他地方访问它们。那么,有没有办法让这些 PHP 脚本通过 Get 接受一些参数,然后用上面建议的方法捕获它们的输出?

    你的问题有点不清楚为什么你首先使用 cURL。如果您的脚本在同一台服务器上,您只需设置正确的$_GET 变量并使用:

    <?php
    ob_start( );
    // include the file.
    $_GET['foo'] = 'bar';
    include 'the_file.php';
    
    $output = ob_get_clean( );
    

    如果您的脚本位于另一台服务器上,其中 include 不可行,您将总是必须执行 HTTP 请求来获取其内容,无论您的 this 使用 cURL 还是 Ajax,或者我所关心的所有插座。

    【讨论】:

      【解决方案3】:

      你可以从任何加载的脚本访问 $_GET,只要它在 URI 中,变量 $term 可以在任何脚本中使用。您还可以包含脚本。

      当您包含一个脚本时,您可以在包含后访问它的一些内容。

      【讨论】:

      • 获取参数被发送到特定的 PHP 文件。尝试从另一个文件访问它们不是我想要做的。