【问题标题】:How to get output from local script in PHP?如何从 PHP 中的本地脚本获取输出?
【发布时间】:2010-03-06 10:53:58
【问题描述】:

例如在 foo.php 中:

<?php echo 'hello'; ?>

在 bar.php 中,我想获取 foo.php(这是你好)的输出,并在输出到浏览器之前进行一些格式化。有没有办法做到这一点?

或者更进一步,如果网络服务器可以同时运行 PHP 和 Python 脚本,那么 PHP 脚本可以得到 Python 脚本的输出吗?

编辑: PHP 函数 file_get_contents() 只能对远程脚本执行此操作。如果它用于本地脚本,它将返回整个脚本的内容。在上面的示例中,它返回而不是 hello。而且我不想使用 exec()/system() 的东西和 CGI​​。

【问题讨论】:

    标签: php


    【解决方案1】:

    您可以使用 PHP 的输出缓冲区和函数(如 ob_start();ob_get_contents();)将 PHP 输出的内容读入字符串。

    这是 php.net 上的示例:

    <?php
    
    function callback($buffer)
    {
      // replace all the apples with oranges
      return (str_replace("apples", "oranges", $buffer));
    }
    
    ob_start("callback");
    
    ?>
    <html>
    <body>
    <p>It's like comparing apples to oranges.</p>
    </body>
    </html>
    <?php
    
    ob_end_flush();
    
    ?>
    

    还有一个:

    <?php
    ob_start();
    echo "Hello ";
    $out1 = ob_get_contents();
    echo "World";
    $out2 = ob_get_contents();
    ob_end_clean();
    var_dump($out1, $out2);
    ?>
    

    【讨论】:

    • 谢谢!您的解决方案绝对有效。但我希望有一种更优雅、更通用的方法来做到这一点,就像 file_get_contents() 对远程脚本所做的那样。您的解决方案仅适用于捕获另一个 PHP 脚本的输出但没有其他文件类型的 PHP 脚本。
    • “我不想使用 exec()/system() 的东西” - 那么 php 如何“知道”如何运行,例如(本地)python 脚本?
    • @VolkerK:与网络服务器根据扩展名知道如何运行 html 或 php 文件的方式相同。我的意思是,php 不“知道”,但网络服务器“知道”。网络服务器是否以这种方式工作?
    • @Ethan:是的,网络服务器“知道”或被配置为识别某些类型。但是它必须为脚本选择并运行“正确的”解释器/运行时(与 exec() 不同)。如果您希望网络服务器决定要做什么,您必须“询问”网络服务器。 file_get_contents('xyz.py'); 不会询问网络服务器,file_get_contents('http://localhost/xyz.py'); 可能会。
    • @VolkerK:我之前尝试过,在 bar.php:file_get_contents('localhost/foo.php');但它没有用。网络浏览器一直在等待响应。 PHP不支持多实例?没有在 Python 上尝试过这个。还是非常感谢!
    猜你喜欢
    • 2011-11-16
    • 2012-02-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多