Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在文件/变量中处理php标记_Php_Tags_Backend - Fatal编程技术网

在文件/变量中处理php标记

在文件/变量中处理php标记,php,tags,backend,Php,Tags,Backend,我有很多文件,里面可能有或没有php标记() 首先,我需要检查这些文件中是否存在php标记。没问题。我使用fopen,将内容保存到一个变量,并使用strpos来完成这项工作 接下来,如果它有php标记,我将其保存到一个临时文件中,然后使用ob_start()include和ob_get_clean()将输出保存到一个变量中以供进一步处理 有没有其他方法可以替代这种方法?也许更简单一点,比如不必将其保存到临时文件,而是从变量处理它 我想到的另一种选择是使用fopen和strpos检查文件中是否存在

我有很多文件,里面可能有或没有php标记(

首先,我需要检查这些文件中是否存在php标记。没问题。我使用fopen,将内容保存到一个变量,并使用strpos来完成这项工作

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

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

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

有什么评论吗

如有任何回应和/或评论,我将不胜感激


顺便说一句,如果你可能会问,我正在一个后端上工作,它接受来自用户的输入,这些用户可能包括也可能不包括php标记。

你的问题并没有真正提到你实际在做什么,所以我假设你正在做一件极其危险的事情“分块解析代码以便它可以运行”。简短回答:不要这样做

好吧,我想这不是答案,更多的是陈述。但原因如下:即使你的用户都是值得信任的用户,他们都在你的个人朋友圈中,都是专家,你也只需要一次失误就可以搞糟整个系统。意外取消链接()?太糟糕了,现在你们都完蛋了。不,“我们不必担心,每个人都很酷”不是一个好的反驳。有人,在某个时刻,会把事情搞砸,时间越长,你损失的就越多=)

话虽如此,这取决于你想做什么。如果您想就地运行,只需将输入保存到一个临时文件,包括()该文件,然后再次取消链接()。整个过程将在scope中执行,它将被视为系统上的普通PHP文件

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


如果你想把代码和非代码分开处理,就像它们彼此无关一样,一个简单的非贪婪的preg___匹配_____________________________________________,以及删除这些块的输入字符串。工作完成(虽然我不知道为什么在这种情况下,您不会对内容和代码使用单独的提交过程,因为它们彼此独立)。

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

<?php
  function fileHasPHPTags($fileName) {
    return strpos(file_get_contents($fileName),"<?php")!==false;
  }
?>


您可以在步骤1之后使用正则表达式
preg_match(“#(.*)(php)?\?>“#”,$data,$matches)
然后您将拥有$matches中的内容。您可以使用
eval()
从变量执行代码,但如果您将其与用户输入一起使用,则会收到警告-这可能是一个巨大的安全漏洞,并且通常在共享主机上被禁用。scones:感谢您的输入。hikaru-shindo:谢谢你对安全的关注。请确保只有管理员可以访问此功能。此外,一般安全不是一个问题,因为这一问题也正在得到解决。我试过eval(),但不是我需要的。如果管理员发布带有php标记的内容(并保存为文件),则需要执行该文件,就像它是由内置php文件包装的内置php文件一样。再次感谢。在标记注释中,您的问题实际上与“标记”(与标记语言相关)或“处理”(这是一种名称选择不当的编程语言)无关