【问题标题】:How to display/execute PHP from an external file?如何从外部文件显示/执行 PHP?
【发布时间】:2015-06-17 22:37:32
【问题描述】:

我有 2 个文件。

test.zt用很多PHP和HTML的内容来。

index.php 包括test.zt 以显示其内容。


我现在要做的是将test.zt 的内容加载到一个变量中(或者能够临时编辑它的东西)。完成后,我想使用str_replace() 函数临时更改test.zt 文件中的一些文本。 我不想覆盖原来的test.zt 源文件。

之后,我想向访问者显示更改后的文件内容。

注意:代码包含 PHP 代码,页面也需要执行该 PHP 代码。

我已经尝试用file_get_contents()打开文件,然后回显内容,但它没有执行内容的PHP端。

有没有可能做到这一点?

【问题讨论】:

  • 恐怖!您可以尝试解析 php 并将其包装在 exec() 函数中,但这就像要求爆炸一样。你有任何代码来表示你到目前为止所做的事情吗?
  • 基本上,您是在询问eval 的作用。在你使用它之前,请先研究一下它有什么缺点。 // 而不是使用str_replace 来“更改一些文本”,您可能应该只包含一个普通的 PHP 文件,并使用主脚本中的 variables 来输出需要更改的部分内容是动态的。
  • 从我在 PHP 时代的记忆中,eval 真是令人头疼。

标签: php


【解决方案1】:

基本上,您是在询问eval 的作用。但在你使用它之前,请先研究一下它有什么缺点。

与其使用str_replace 来“更改一些文本”,不如只包含一个普通的 PHP 文件,并使用主脚本中的 variables 来输出需要的部分内容是动态的。

【讨论】:

    【解决方案2】:

    运行页面时获取 test.tz 的内容,对其进行更改,将其写入磁盘中的临时文件中,并包含该临时文件,然后将其删除。或者你可以留下它并继续覆盖它,只要它不包含任何重要的东西。

    你的问题很模糊,很难给出一个好的答案。

    【讨论】:

    • 我不确定您是否可以在同一个调用中写入并包含一个文件。你以前试过这样做吗?
    • 不,但我不明白为什么你不能。该函数在完成时返回,并且在此之前不会转到下一行。如果文件是 1 秒还是 30 秒,PHP 关心什么。我现在做更多的 ColdFusion,但我有一个页面,它检查 txt 文件是否存在,如果不存在,则创建它然后读取它。不确定PHP会有所不同。除非处理器在运行前检查页面下方的包含,否则应该不是问题。
    • 这就是 PHP 的工作方式。它首先编译然后执行。除非你知道我不知道的东西,否则编译过程会阻止你这样做。
    【解决方案3】:

    你试过phpeval函数吗?

    $data = file_get_contents('test.zt');
    eval($data);
    

    注意:

    eval() 语言结构非常危险,因为它允许 执行任意 PHP 代码。因此不鼓励使用它。如果你 已经仔细验证除了使用这个没有其他选择 构造,特别注意不要传递任何用户提供的数据 在没有事先正确验证的情况下进入它。

    【讨论】:

      【解决方案4】:

      您可能正在寻找这个:

      ob_start();
      include "test.zt";
      $contents = ob_get_contents();
      ob_end_clean();
      
      echo str_replace("some", "text", $contents);
      

      这里是 PHP 手册条目: http://php.net/manual/en/function.ob-get-contents.php

      【讨论】:

      • 不,他想执行内容而不仅仅是输出它:)
      • 这不是通过包含实现的吗?他说 get_file_contents 不起作用,因为“没有执行 php”。
      • 此外,所提出的解决方案也符合能够在输出之前替换文本的要求。请解释这是一个不充分的答案。所有其他当前提出的答案要么建议 eval 要么建议在文件系统上写入文件。
      • 很抱歉,您的回答毕竟是合法的。
      猜你喜欢
      • 2014-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-08
      • 1970-01-01
      • 1970-01-01
      • 2022-11-26
      • 2011-12-29
      相关资源
      最近更新 更多