运行php脚本并以字符串形式返回数据

时间:2011-11-27 22:19:12

标签: php file-get-contents

我的php脚本需要从另一个文件加载内容然后替换某些命令。使用以下代码适用于静态页面:

$pageName = 'pages/' . $_REQUEST['url'] . '.php';

$pageContents = file_get_contents($pageName);

$IDCODE = $_SESSION['IDCODE'];

$sql = "SELECT * FROM members WHERE IDCODE = '$IDCODE'";
$qry = mysql_query($sql);

$OK = $qry ? true : false;

$arr = mysql_fetch_array($qry);

foreach ($arr AS $key => $val) {
$pageContents = str_replace('{' . $key . '}', $val, $pageContents);
}

但是,如果要处理的文件是动态的呢? IE它从mysql数据库填充一些文本。

file_get_contents会运行该文件还是只读取其中的字符串?

2 个答案:

答案 0 :(得分:0)

如果您通过网络服务器运行该文件的链接,它将被处理。如果直接链接它,您将获得该文件的确切内容。

答案 1 :(得分:0)

相当混乱的代码。

  

$ pageName ='pages /'。 $ _REQUEST ['url']。 '.PHP';

     

$ pageContents = file_get_contents($ pageName);

本地文件包含漏洞。

  

$ OK = $ qry? true:false;

为什么呢?任何你使用$ OK的值你可以同样使用$ qry。并且你永远不会在显示的代码中再次使用$ OK。

没有错误检查,代码中没有注释。

  

如果要处理的文件是动态的,该怎么办?

WTF?你的意思是你想要将输出重新处理为PHP吗?然后你可以'eval($ pageContents);'但要注意代码注入漏洞。

或者您想将脚本应用于PHP scrpt的输出?然后只需将URL作为参数传递给file_get_contents(),例如

file_get_contents('http://localhost/path/' 
         . basename($_REQUEST['url'] . '.php');

但实际上调用应该比这更好。两者都是凌乱的解决方案 - 模板解决方案应该就是这样。请仔细阅读(例如)smarty