【问题标题】:Is it possible to execute a PHP script and include the result in another one before result is served?是否可以在提供结果之前执行 PHP 脚本并将结果包含在另一个脚本中?
【发布时间】:2010-12-16 18:36:12
【问题描述】:

我有一个在 Apache 服务器上运行的 php 脚本 http://example.com/myapp/myscript.php。我从移动应用程序调用此 URL,脚本执行其逻辑,然后将 HTTP 标头和正文设置为 JSON 字符串(移动应用程序稍后解析和处理)。
现在我想要一个 URL http://example/myapp/mypage.php 来检索 myscript.php 返回的数据,用 html 布局并提供页面。
我通过首先提供空页面来实现结果,然后通过 Ajax 调用 myscript.php 并使用 Ajax 响应在客户端完成布局,但我想知道是否可以仅在一个 http 请求中执行此操作:
1/ 调用 mypage.php,它会在服务器端调用并执行 myscript.php
2/ 检索 mypage.php 中的 JSON 数据,对其进行解析并在服务器端进行布局
3/ 服务页面

PHP 包含不起作用,因为它只会包含代码,而不先执行它。

谢谢。

【问题讨论】:

  • 为什么要走 PHP -> JSON -> PHP -> HTML?如果您在同一台服务器上,为什么不省下两步,直接使用 PHP -> HTML?
  • 在渲染最终输出的同一文件中运行 myscript 中的例程是否存在问题?这是一个耗时的例程,在运行时会出现无法忍受的延迟吗?也许您的意思是发送一个 CURLOPT_RETURNTRANSFER 开启的 CURL 请求?

标签: php apache http client-server


【解决方案1】:

也许我错过了这个问题,但你为什么不能只 require() 你需要的 .php 文件,然后在其中调用一个函数?

<?php
require('myscript.php');
$foo = myscript_class::function();
?>

【讨论】:

  • 真的,这是唯一理智的答案。其他任何事情都只是草率的编程。您有一些代码要在 2 页上重用.. 这就是函数的用途。
  • 我想避免重新编写不包含任何类的初始脚本(它们只是设置响应标头和正文),但我会遵循您的建议并使其更清晰。
  • 阅读模型-视图-控制器设计模式。这在 PHP 中确实很有意义,尤其是当您在不同的设备/平台上拥有视图时。
【解决方案2】:

您可以在输出缓冲区中装配一些东西。像这样的:

ob_start();
//do your code
$_SESSION['page_buffer'] = ob_get_clean();

然后在下一页读取该会话变量。

也就是说,你为什么不直接打电话给mypage,然后include("myscript.php");呢?

【讨论】:

    【解决方案3】:

    我不完全理解这个问题,但如果您想要获取该页面的 JSON 输出,您可以 file_get_contents() 页面(使用 URL,而不是路径)然后用 PHP 解析它。或者,您可以使用输出缓冲区 include() 页面,将 JSON 保存在变量中。

    ob_start();
    include 'file.php';
    $output = json_decode(ob_get_clean(), true);
    

    【讨论】:

      【解决方案4】:

      我认为 PHP 包含应该可以工作。如果包含它,它将执行 PHP 文件中的代码。

      查看此网址:http://php.net/manual/en/function.include.php

      检查示例 5:它返回值而不是代码。

      【讨论】:

        猜你喜欢
        • 2022-06-16
        • 1970-01-01
        • 2016-06-08
        • 1970-01-01
        • 1970-01-01
        • 2021-10-10
        • 1970-01-01
        • 2013-07-25
        • 1970-01-01
        相关资源
        最近更新 更多