PHP教程之PHP中shell脚本的使用方法分享
时间:2018-12-30 分类:PHP 作者:编程之家
作为命令语言,它交互式解释和执行用户 输入的命令或者自动 地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高阶语言中才具有的控制结构,包括 循环和分支。 PHP 经过长时间的 发展,很多用户 都很了解PHP 了,这里我发表一下个人理解,和大家讨论讨论。大多数情况下,我使用 exec() 命令和数据数组处理所有东西。或者对更简单的命令使用 shell_exec(),尤其是不关心结果时。如果仅需返回一个 PHP shell脚本,我就使用 passt hru()。通常,我在不同的场合中使用不同的函数 ,并且有时它们是可以互换的。 这完全取决于我的心情和要实现的目的。您可能提问的另一个 问题是 “它们的长处是什么?”。如果您没有头绪,或者一个 项目非常适合使用 shell 命令,但不知道如何使用,那么我在这里 提供一些见解。如果您正在编写一个 提供各种备份或文件 传输功能 的应用程序,您可以选择使用 shell_exec() 或这里提供的其他命令之一运行 rsync 支持 的 PHP shell脚本。您可以编写 PHP shell脚本使其包含必要的 rsync 命令,然后使用 passt hru() 根据用户 的命令或 cron 作业执行它。 例如,一位用户 在您的应用程序中有适当的权限(比如管理员 权限),他想将 50 个 PDF 文件 从一个 服务器发送到另一个 服务器。那么,该用户 需要在应用程序中导航到正确的位置,单击 Transfer,选择需要发送的 PDF,然后单击 Submit。在这 个过程中,该表单应该有一个 PHP 脚本,它使用返回选项变量通过 passt hru() 运行 rsync 脚本,这样您就知道是否发生问题,如下所示。 清单 1. 通过 passt hru() 运行 rsync 脚本的示例 PHP 脚本 <div class="codetitle"><a style="CURSOR: pointer" data="13564" class="copybut" id="copybut13564" onclick="doCopy('code13564')"> 代码 如下:
<div class="codebody" id="code13564">
<?
PHP pa
sst hru('xfer_rsync.sh',$returnvalue);
if ($returnvalue != 0){
//we have a problem!
//add error code here
}else{
//we are okay
//redirect to some other page
}
?>
如果您的应用程序需要列出进程或
文件 ,或关于这些进程或
文件 的数据,您可以使用本文总结的命令之一轻松实现这个目的。例如,
一个 简单的 grep 命令能够帮助您找到匹配特定
搜索 条件的
文件 。将它与 exec() 命令一起使用可以将结果保存到
一个 数组中,这允许您构建
一个 HTML 表或表单,它们又进一步允许您运行其他命令。 到目前为止,我讨论了
用户 生成 的事件 ——
用户 只要按下按钮或单击
链接 ,
PHP 就运行相应的脚本。您还可以将独立的
PHP 脚本和 cron 或其他日程安排程序一起使用,从而实现一些有趣的
效果 。例如,如果您
一个 备份脚本,您可以通过 cron 运行它,或者将它打包到
PHP 脚本后在运行。 为什么要这样做?这似乎是多余的,不是吗?不是这样的 —— 您需要这样考虑,您可以通过 exec() 或 pa
sst hru() 运行备份脚本,然后根据返回
代码 执行一些行为。如果出现
错误 ,您可以将其记录到
错误 日志或
数据库 中,或发送一封警告电子
邮件 。如果脚本成功,您可以将原始的
输出 转储到
数据库 (例如,rsync 有
一个 详尽(verbose)模式,对随后诊断问题十分有用)。 安全 我们
在这里 简要讨论一下安全性:如果您接受
用户 输入并将信息传递到 shell,那么最好过滤
用户 输入。
删除 您认为有害的命令和不允许的
内容 ,比如 sudo(作为超级
用户 运行)或 rm(
删除 )。事实上,您可能不希望
用户 发送开放的请求,而是让他们从列表中选择。 例如,您运行
一个 接受
文件 列表作为参数的传输程序,您应该通过一系列复选框列出所有
文件 。
用户 可以选择和取消选择
文件 ,并通过单击 Submit 激活 rsync shell 脚本。
用户 不能自己输入
文件 或使用正则表达式。 本文从两个方面介绍的
PHP shell脚本的
用法 ,希望能给你带来帮助。
原文地址:https://www.jb51.cc/php/27310.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。