繁体   English   中英

在PHP中执行shell脚本

[英]Executing shell script within PHP

当我们安装程序(例如DBMS)时,它可以由shell命令本地运行; 但是为了在PHP,Perl,Python等中运行它,我们需要适当的API /驱动程序。 这可能会减慢过程并增加新的限制(例如,CBD不需要适合内存,但在Perl需要使用CDB_File)。

问题1: shell是运行程序的最快和最佳位置(无论我们的应用程序和目的如何)。

在PHP中使用exec()或shell_exec()执行ssh命令是很常见的。 但这种情况很少发生。

问题2:定期将php代码与shell命令混合是否方便? 创建一个长shell脚本,然后在exec(“./ shell.sh”)中在php中运行它。 这类Web脚本是否存在任何安全问题或问题?

问题3: PHP(和其他脚本语言)本身运行shell命令来执行一个过程(例如,读取文件或连接到数据库)。 对? 因此,shell命令是不可避免的通过PHP或直接命令?

问题1: shell是运行程序的最快和最佳位置(无论我们的应用程序和目的如何)。

这取决于该程序的命令行界面是否是与该程序交互的最快方式,以及该程序的CLI接口是否是运行该程序的最佳方式。 所以这取决于该计划。 例如,您可以通过shell执行Firefox Web浏览器,但它不是最好的使用它。

问题2:定期将php代码与shell命令混合是否方便[原文如此!] 创建一个长shell脚本,然后在exec(“./ shell.sh”)中在php中运行它。 这类Web脚本是否存在任何安全问题或问题?

什么方便或不方便取决于用户在定期使用shell命令时的感知。 当然,因为在计算机上运行的所有内容都具有安全隐患,因此对于shell脚本也是如此。

除了hakre的评论....

在PHP中使用exec()或shell_exec()执行ssh命令是很常见的。 但这种情况很少发生。

暂且不谈2句中明显的矛盾,通过exec / shell_exec调用ssh是一个非常愚蠢的想法。 作为一个快速入侵,您知道密钥对身份验证到位,那么它将解决问题 - 但对于更一般的应用程序,您应该使用proc_open以便在相关流上使用正确的握手 - 或ssh2扩展

关于q3,没有。 在PHP提供函数的地方,几乎不可避免地它将被当前进程/线程实现为本机函数调用(我唯一知道的是POSIX系统上的mail()命令)。 使用exec,shell_exec,passthru,popen等,必须创建一个新进程。

关于安全性....由于Web服务器(及其脚本)运行单个uid,除了用户的权限和ulimit(例如base_opendir)之外,通常还存在对访问的附加约束 - 但这些约束不适用于单独的进程。 因此,当您启动新流程时,将上下文交叉到不同的安全模型中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM