有可能直接从PHP更改PHP源代码吗?

时间:2015-11-16 12:03:04

标签: php variables get

示例:

源:

select derived.ID      OrigID
     , derived."Name"  OrigName
     , base."Name"     SName
     , base."Year"     OrigYear
  from mytable base
  join mytable derived on ( INSTR(derived."Name", base."Name" ) = 1 and derived."Name" <> base."Name" )
union all
select base.ID      OrigID
     , base."Name"  OrigName
     , base."Name"  SName
     , base."Year"  OrigYear
  from mytable base
 where base.ID IN ( select distinct b.ID
                      from mytable b
                      join mytable d on ( INSTR(d."Name", b."Name" ) = 1 and d."Name" <> b."Name" ) )
     ;

网址:

$var=X

PHP:

 ....?changeSourceTo:Y

源:

//do something? (what)

这对于快速更改源代码而不打开它并且不将下一个调用相同的参数传递给url来说非常有用.... (我知道我可以使用带var参数的文件,如果$ _GET ['var']更改文件,或者更好地设置数据库......)

2 个答案:

答案 0 :(得分:2)

将不同版本的代码放入不同的文件中,并使用require($changeSourceTo);指定要加载的文件。

我应该补充一点,这带来了一些固有的安全风险,因为用户能够指定文件系统路径并通过请求更改代码,两者都可能被攻击者滥用。所以也许在开发中使用,但要确保它不会上线。

答案 1 :(得分:1)

你可以做到,是的。只需使用fopen()从文件内部打开.php文件,修改所需内容然后保存(覆盖它)。

因此,如果您使用此代码test.php

<?
$x = 1;
$myfile = fopen('test.php', 'w');
$txt = '<?$x=2;echo $x?>';
fwrite($myfile, $txt);
fclose($myfile);
echo $x;
?>

第一次运行时,您会看到“1”。如果您重新加载页面,您将看到“2”。如果你有很多代码,这可能会很棘手,在这种情况下,我建议将文件分成“碎片”并与include一起使用,这样你就可以修改你真正需要的小块。

正如 Steve 所提到的,要非常小心你修改它的方式。例如,如果我的示例可以使用$_GET[]进行修改,则会非常不安全。