从数据库记录运行php脚本,而无需使用eval()

标记

我想知道如何在不使用eval()的情况下运行存储在数据库中的php脚本。

预期过程如下

当用户POST一个包含{{typed_alias 的字符串时}},系统将在表中搜索该别名是否在该alias列中有记录

如果是->用存储在该replacement列中的对应脚本替换用户键入的内容

如果不是,请显示原始字符串,包括{{ wrong_alias }}

预期结果如下

当用户发布
Hello,{{morninggg}}时,当前的unix时间为{{nowTime}}

db的数组输出

大批

 0 =>
   array
     'ID' => 445
     'alias' => 'morning'
     'replacement' => 'Good morning'
 1 =>
   array
     'ID' => 446
     'alias' => 'nowTime'
     'replacement' => time()
 2 =>
   array
     'ID' => 447
     'alias' => 'tommorowNow'
     'replacement' => time()+86400

返回

您好,{{morninggg}},当前的Unix时间是147855220

现在,我已经使用来解决数据库数组foreach,也可以使用使用脚本替换别名str_replace()

当前类我用来从数据库中获取数据并进行替换如下

class replace {
    public $definitions;

    public function setDefinitions($definitions) {
        $this->definitions = $definitions;
    }

    public function tag($input) {
        if($this->definitions && is_array($this->definitions)) {
            foreach ($this->definitions as $definition) {
                if($defintion['alias'] == 'time') {
                    $input = str_replace('{{' . $definition['alias'] . '}}', date('Y-m-d'), $input);
                } else {
                    $input = str_replace('{{' . $definition['alias'] . '}}', $definition['replacement'], $input);
                }
            }
        }
        return $input;
    }
}

当前使用方法

$replace = new replace();
$replace->setDefinitions($tagEngine);
$parsedString = $replace->tag($__input);

//$__input is what user POST to the server

echo $parsedString;

但是,当前结果如下

您好,{{morninggg}},当前的Unix时间是time()

该脚本无法在页面上成功运行

但是当我这样手动给出定义时

$definition = array('morning' => 'Good Morning', 'nowTime' => time()); foreach ($definition as $key => $value) $source = str_replace('{{' . $key . '}}', $value, $source); return $source;

该脚本可以运行并返回

您好,{{morninggg}},当前的Unix时间是147855220

我知道使用eval()可以运行脚本,但是,在人们的实际应用程序中,它被认为是一种危险的方法。

谁能给我有关如何解决此问题的建议?

谢谢!

理查德·伯纳兹

您不应该使用类似的功能eval()来解决此问题。您应该从数据库中提取所有php代码,并按以下方式解析不同的别名(我刚刚更改tag()replace类中方法

public function tag($input) {
    if($this->definitions && is_array($this->definitions)) {
        foreach ($this->definitions as $definition) {
            $replacement = $definition['replacement'];
            switch($definition['alias']) {
                case 'nowTime':
                    $replacement = date('Y-m-d');
                    break;
                case 'tommorowNow':
                    $replacement = date('Y-m-d', (time() + 86400));
                    break;
            }
            $input = str_replace('{{' . $definition['alias'] . '}}', $replacement, $input);
        }
    }
    return $input;
}

如您所见,对于每个php代码别名,您都可以caseswitch()语句中添加另一个您可以switch()通过以下链接阅读控制结构:

PHP:开关-手册

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从数据库记录运行php脚本而不使用eval()

来自分类Dev

使用php形式将记录添加到mysql数据库中,而无需离开/刷新页面

来自分类Dev

Laravel雄辩的更新记录而无需从数据库加载

来自分类Dev

使用休眠模式获取数据库记录,而无需使用主键

来自分类Dev

PHP更新数据库字段而无需重定向

来自分类Dev

PHP更新数据库字段而无需重定向

来自分类Dev

使用Ajax将图像发送到数据库(php),而无需重新加载

来自分类Dev

如何自动运行php脚本并从数据库中删除记录

来自分类Dev

使用PHP通过电子邮件发送最新的RSS feed条目,而无需使用数据库

来自分类Dev

运行查询代码以从数据库检索数组,而无需刷新页面

来自分类Dev

从具有20,000条记录的网格中查找重复记录,而无需快速访问数据库

来自分类Dev

后端依赖数据库的存储库管理,而无需使用ORM工具

来自分类Dev

如何从Firebase数据库获取数据而无需重复

来自分类Dev

Android应用解码来自PHP MySql数据库的JSON响应而无需特殊字符

来自分类Dev

将表单发布到数据库,而无需以php的形式保留页面

来自分类Dev

文本框输入,从数据库中检索值,而无需在php中提交按钮

来自分类Dev

使用现有数据库,而无需通过播放框架中的模型创建数据库

来自分类Dev

使桌面客户端可以使用更新的EF数据库迁移而无需更新

来自分类Dev

从vb.net创建SQL Server数据库,而无需使用SQL Server

来自分类Dev

使用数据库查找插入表单值而无需刷新页面

来自分类Dev

从Java 8连接到Access数据库,而无需使用UCanAccess

来自分类Dev

如何运行SQL Developer由于其大小而无法打开的数据库导出脚本

来自分类Dev

计算分页前记录的总大小,并在分页后返回它们,而无需两次访问数据库

来自分类Dev

是否可以暂时保存在Java GUI应用程序的运行数据,而无需任何数据库功能?

来自分类Dev

订阅MySQL数据库中的更改而无需轮询

来自分类Dev

Ajax查询而无需重新连接数据库

来自分类Dev

在实体框架中的运行时期间更改数据库,而无需更改连接

来自分类Dev

添加一个收藏夹按钮以使用PHP中的值更新mysql数据库,而无需重新加载页面

来自分类Dev

将数据插入数据库的PHP脚本在执行时返回成功但记录未插入数据库?

Related 相关文章

  1. 1

    从数据库记录运行php脚本而不使用eval()

  2. 2

    使用php形式将记录添加到mysql数据库中,而无需离开/刷新页面

  3. 3

    Laravel雄辩的更新记录而无需从数据库加载

  4. 4

    使用休眠模式获取数据库记录,而无需使用主键

  5. 5

    PHP更新数据库字段而无需重定向

  6. 6

    PHP更新数据库字段而无需重定向

  7. 7

    使用Ajax将图像发送到数据库(php),而无需重新加载

  8. 8

    如何自动运行php脚本并从数据库中删除记录

  9. 9

    使用PHP通过电子邮件发送最新的RSS feed条目,而无需使用数据库

  10. 10

    运行查询代码以从数据库检索数组,而无需刷新页面

  11. 11

    从具有20,000条记录的网格中查找重复记录,而无需快速访问数据库

  12. 12

    后端依赖数据库的存储库管理,而无需使用ORM工具

  13. 13

    如何从Firebase数据库获取数据而无需重复

  14. 14

    Android应用解码来自PHP MySql数据库的JSON响应而无需特殊字符

  15. 15

    将表单发布到数据库,而无需以php的形式保留页面

  16. 16

    文本框输入,从数据库中检索值,而无需在php中提交按钮

  17. 17

    使用现有数据库,而无需通过播放框架中的模型创建数据库

  18. 18

    使桌面客户端可以使用更新的EF数据库迁移而无需更新

  19. 19

    从vb.net创建SQL Server数据库,而无需使用SQL Server

  20. 20

    使用数据库查找插入表单值而无需刷新页面

  21. 21

    从Java 8连接到Access数据库,而无需使用UCanAccess

  22. 22

    如何运行SQL Developer由于其大小而无法打开的数据库导出脚本

  23. 23

    计算分页前记录的总大小,并在分页后返回它们,而无需两次访问数据库

  24. 24

    是否可以暂时保存在Java GUI应用程序的运行数据,而无需任何数据库功能?

  25. 25

    订阅MySQL数据库中的更改而无需轮询

  26. 26

    Ajax查询而无需重新连接数据库

  27. 27

    在实体框架中的运行时期间更改数据库,而无需更改连接

  28. 28

    添加一个收藏夹按钮以使用PHP中的值更新mysql数据库,而无需重新加载页面

  29. 29

    将数据插入数据库的PHP脚本在执行时返回成功但记录未插入数据库?

热门标签

归档