PHP调用shell脚本注意事项

1、调用的路径,相对路径有时候不是很靠谱。 
2、被调用的脚本有没有执行权限。 
3、被调用的脚本能不能及时return,因为默认情况下php的页面只有30sec的执行周期。

我们提供的服务有:网站设计、成都网站设计、微信公众号开发、网站优化、网站认证、顺平ssl等。为近千家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的顺平网站制作公司

 

1.使用system函数调用最好在前面指定shell路径,如:

system("/bin/bash ./start-instance.sh",$status);

2.

exec("/**/**.sh > /dev/null 2>&1 &"); 
把shell扔给后台,而且把输出重定向到空设备。

---------------------------------------------------------------------------------------------------------------------

在PHP中调用外部命令,可以用如下三种方法来实现:

1) 用PHP提供的专门函数

PHP提供共了3个专门的执行外部命令的函数:system(),exec(),passthru()。

system()

原型:string system (string command [, int return_var])

system()函数很其它语言中的差不多,它执行给定的命令,输出和返回结果。第二个参数是可选的,用来得到命令执行后的状态码。

例子:

system("/usr/local/bin/webalizer/webalizer"); 
?>

exec()

原型:string exec (string command [, string array [, int return_var]])

exec() 函数与system()类似,也执行给定的命令,但不输出结果,而是返回结果的最后一行。虽然它只返回命令结果的最后一行,但用第二个参数array可以 得到完整的结果,方法是把结果逐行追加到array的结尾处。所以如果array不是空的,在调用之前最好用unset()最它清掉。只有指定了第二个参 数时,才可以用第三个参数,用来取得命令执行的状态码。

例子:

exec("/bin/ls -l"); 
exec("/bin/ls -l", $res); 
#$res是一个数据,每个元素代表结果的一行 
exec("/bin/ls -l", $res, $rc); 
#$rc的值是命令/bin/ls -l的状态码。成功的情况下通常是0 
?>

passthru()

原型:void passthru (string command [, int return_var])

passthru() 只调用命令,不返回任何结果,但把命令的运行结果原样地直接输出到标准输出设备上。所以passthru()函数经常用来调用象pbmplus(Unix 下的一个处理图片的工具,输出二进制的原始图片的流)这样的程序。同样它也可以得到命令执行的状态码。

例子:

header("Content-type: p_w_picpath/gif"); 
passthru("./ppmtogif hunte.ppm"); 
?> 
-------------------------------------------------------------------------------------------------------------- 
后来,把shell脚本放到了safe_mode_exec_dir目录,调用成功~~

写个页面的东西,来执行服务器上命令,最简单的比如reboot命令,用php来调用 参考网上方法如下

先建立一个脚本( /root/reboot_server.sh ),重启用的。

代码如下:

#!/bin/bash

reboot

再给他赋予权限 4755

chown root:root /root/reboot_server.sh

chmod 4755 /root/reboot_server.sh

chmod 4777 /sbin/reboot

再在 php 里, 想办法做如下调用 php

reboot.php 代码如下:

<?php

exec ("/root/reboot_server.sh",$out,$status);

print_r($out);

print_r($status);

?>

然后,通过页面来访问reboot.php(lnmp平台做了虚拟主机,可以通过域名来访问x.x.com/reboot.php)

其结果返回 126的状态码,搜索网上解决方案,一直无果

索性将/root/reboot_server.sh移到了和reboot.php 同一个目录中

访问,可以了,返回状态码0 系统重启了

意识到是目录权限的问题,/root目录对php的用户www没有可执行权限

chmod -R 755 /root

然后把reboot_server.sh移动到了/root 重新测试

搞定了

当前名称:PHP调用shell脚本注意事项
转载源于:https://www.cdcxhl.com/article20/ijhsco.html

成都网站建设公司_创新互联,为您提供企业建站网站制作营销型网站建设网站策划面包屑导航品牌网站设计

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

手机网站建设