【问题标题】:Execute php script from mysql row从mysql行执行php脚本
【发布时间】:2017-03-03 23:28:13
【问题描述】:

有没有办法执行设置在mysql行中的php脚本?

例如,我的数据库中有一个表:id,script

每一行都有自己的 ID 和脚本,我想创建一个 PHP 循环来执行所有包含 PHP 脚本的行。

【问题讨论】:

标签: php mysql loops while-loop


【解决方案1】:

你可以用这个:

eval('your script');

注意 eval() 语言结构非常危险,因为它允许执行任意 PHP 代码。因此不鼓励使用它。如果您已仔细验证除了使用此构造之外别无选择,请特别注意不要将任何用户提供的数据传入其中,而无需事先正确验证。

http://php.net/manual/en/function.eval.php

【讨论】:

    【解决方案2】:

    取决于您将其存储在数据库中的方式... 如果它是原始的 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']);
    }
    

    【讨论】:

      【解决方案3】:

      这样做通常是个坏主意,因为它可能会导致一些重大的安全漏洞。

      一个更好的主意通常是在 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 可能就是您要找的。但我不鼓励你使用它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-13
        • 1970-01-01
        • 1970-01-01
        • 2016-04-20
        • 1970-01-01
        • 2017-09-09
        • 2011-07-16
        相关资源
        最近更新 更多