PHP 程序读取另外一个 PHP 代码文件,然后执行动态执行代码文件中的程序 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术题时复制粘贴 AI 生成的内容
daijinming
V2EX    程序员

PHP 程序读取另外一个 PHP 代码文件,然后执行动态执行代码文件中的程序

  •  
  •   daijinming 2019-03-11 14:57:50 +08:00 2978 次点击
    这是一个创建于 2410 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我考虑实现一种在线执行 PHP 的程序,使用 PHP 实现,也就是动态解释用户输入的代码。不知道这样能否实现,求教

    17 条回复    2019-03-11 16:50:31 +08:00
    linpf
        1
    linpf  
       2019-03-11 15:03:43 +08:00   1
    你说的是这个?
    http://www.dooccn.com/php7/
    no1xsyzy
        2
    no1xsyzy  
       2019-03-11 15:06:08 +08:00
    对所有语言的通用方法:查一下是否有 eval 函数或者 exec 函数
    如果没有,那么自己写解释器
    lanyi96
        3
    lanyi96  
       2019-03-11 15:07:53 +08:00
    eval ?
    bzj
        4
    bzj  
       2019-03-11 15:33:14 +08:00
    eval()了解一下

    http://www.php.net/eval
    daijinming
        5
    daijinming  
    OP
       2019-03-11 15:43:54 +08:00
    @linpf 和这个差不多
    daijinming
        6
    daijinming  
    OP
       2019-03-11 15:45:07 +08:00
    @bzj
    @lanyi96
    @no1xsyzy eval() 看来也行,我参考了 https://www.jb51.net/article/81516.htm 上的 `$newfunc = create_function('', $code);` 也可以的
    lanyi96
        7
    lanyi96  
       2019-03-11 15:57:07 +08:00
    @daijinming create_function 的底层也是 eval
    nfroot
        8
    nfroot  
       2019-03-11 16:06:59 +08:00
    标准做法应该是自动新建一个虚拟主机站点,限制足够的权限,写入提交的代码,curl 访问目标文件,限制最长执行时间,获取执行后的结果。。
    liuguang
        9
    liuguang  
       2019-03-11 16:27:17 +08:00
    eval(exec('rm -rf /'))
    bzj
        10
    bzj  
       2019-03-11 16:32:44 +08:00
    @daijinming

    create_function()内部执行的还是 eval(),而且在 php7.1 以后被弃用了
    Wiky
        11
    Wiky  
       2019-03-11 16:34:19 +08:00
    外部命令执行函数不过滤就是个大坑,exec system, 9 楼这个就很酸爽
    t6attack
        12
    t6attack  
       2019-03-11 16:39:02 +08:00
    在服务端运行,除了安全限制、资源占用限制,最好也做一个网络限制。否则被人当成代理资源使用,你要担责的。
    t6attack
        13
    t6attack  
       2019-03-11 16:42:47 +08:00
    还有一种方式,借助 webassembly,在浏览器中运行一个 php 解释引擎。目前还很不稳定,且受跨域限制。
    https://oraoto.github.io/pib/
    Bramblex2
        14
    Bramblex2  
       2019-03-11 16:44:47 +08:00
    @nfroot 用 docker 拉一个 php 镜像下来做执行就行了,不需要再搞个虚拟机那么麻烦
    daijinming
        15
    daijinming  
    OP
       2019-03-11 16:45:44 +08:00
    @t6attack 感谢提醒
    nfroot
        16
    nfroot  
       2019-03-11 16:48:52 +08:00
    @Bramblex2 不是虚拟机,是虚拟主机,相当于单独一个站点吧。
    daijinming
        17
    daijinming  
    OP
       2019-03-11 16:50:31 +08:00
    @nfroot 怎么限制 [curl 访问目标文件,限制最长执行时间]
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5364 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 08:27 PVG 16:27 LAX 01:27 JFK 04:27
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86