【发布时间】:2017-03-03 23:28:13
【问题描述】:
有没有办法执行设置在mysql行中的php脚本?
例如,我的数据库中有一个表:id,script
每一行都有自己的 ID 和脚本,我想创建一个 PHP 循环来执行所有包含 PHP 脚本的行。
【问题讨论】:
标签: php mysql loops while-loop
有没有办法执行设置在mysql行中的php脚本?
例如,我的数据库中有一个表:id,script
每一行都有自己的 ID 和脚本,我想创建一个 PHP 循环来执行所有包含 PHP 脚本的行。
【问题讨论】:
标签: php mysql loops while-loop
你可以用这个:
eval('your script');
注意 eval() 语言结构非常危险,因为它允许执行任意 PHP 代码。因此不鼓励使用它。如果您已仔细验证除了使用此构造之外别无选择,请特别注意不要将任何用户提供的数据传入其中,而无需事先正确验证。
【讨论】:
取决于您将其存储在数据库中的方式... 如果它是原始的 php 代码,你可以这样做
$rows = whatever_query_type_you_are_using("SELECT script from table where id > 10");
foreach($rows as $row){
exec('php '.escapeshellcmd($row['script']));
}
或者如果它指向一个类似这样的页面会起作用
foreach($rows as $row){
exec('php -f '.$row['script']);
}
【讨论】:
这样做通常是个坏主意,因为它可能会导致一些重大的安全漏洞。
一个更好的主意通常是在 ActionID 表中有一个 ID,您的 PHP 脚本可以使用它在最终执行操作之前验证操作。例如:
$actions = array('somescript.php','someotherscript.php','another.php');
$rows = query("SELECT ActionId FROM table");
foreach ($rows as $row) {
if (exists($actions[$row['ActionId']]))
include $actions[$row['ActionId']];
}
}
这有效地防止了执行任意代码的问题。您只能执行一组预定义的事情中的一项。
即使在表中拥有和执行文件路径也可能很危险。
如果您必须这样做,那么前面提到的eval function 可能就是您要找的。但我不鼓励你使用它。
【讨论】: