0

我有很多文件,里面可能有也可能没有 php 标签(<?php... ?>)。

首先,我需要检查这些文件中是否存在 php 标签。这里没问题。我使用 fopen,将内容保存到变量中,然后使用 strpos 来执行此操作。

接下来,如果它有 php 标签,我将其保存到一个临时文件中,然后使用ob_start()包含,并将ob_get_clean()输出保存到一个变量中以供进一步处理。

有没有其他方法可以替代这种方法?也许一个更简单的,比如不必将它保存到一个临时文件,而是从变量中处理它?

我想到的另一种选择是使用 fopen 和 strpos 检查文件中是否存在标签,然后使用ob_start(), include (原始文件),并将ob_get_clean()输出保存到变量中以供进一步处理。

任何意见?

我将不胜感激任何回应和/或评论。

顺便说一句,如果您可能会问,我正在开发一个后端,该后端接受来自用户的输入,这些输入可能包含也可能不包含 php 标签。

4

2 回答 2

0

这是我能想到的最简单的方法:

<?php
  function fileHasPHPTags($fileName) {
    return strpos(file_get_contents($fileName),"<?php")!==false;
  }
?>
于 2013-02-09T15:44:56.857 回答
0

你的问题并没有真正提到你实际上在做什么,所以我假设你正在做非常危险的“解析 <?php ?> 块中的代码以便它可以运行”。简短的回答:不要这样做。

好吧,我想这不是一个答案,更像是一个声明。但这就是原因:即使您的用户都是值得信赖的用户,而且他们都在您的个人朋友圈中并且他们都是专家,您只需要一次失误就可以搞砸整个系统。意外的 unlink()?太糟糕了,现在你们都搞砸了。不,“我们不必担心,每个人都很酷”不是一个好的反驳。有人,在某个时候,会搞砸,时间越长,你失去的就越多=)

话虽如此,这取决于你想做什么。如果你想全部运行它,那么只需将输入保存到一个临时文件,包含()该文件,然后再次取消链接()它。整个事情将在范围内执行,它会被视为系统上的普通 PHP 文件。

警告 这是非常危险的,切勿在非沙盒的公共服务器上执行此操作,即使它位于 Intranet 上。这种方法实际上是一个完全匿名的远程访问解决方案 警告

如果你想把代码和非代码剥离出来分别处理,好像它们之间没有任何关系,一个简单的非贪婪的preg_match_all找到代码块,然后做一个str_replace来杀死它们原始提交的内容将为您提供一个代码块数组,以及一个删除了这些块的输入字符串。工作完成(尽管我不确定为什么在这种情况下您不会对内容和代码使用单独的提交过程,因为它们将彼此独立)。

于 2013-02-09T15:39:19.673 回答