返回信息流php文件test.php调用passthru()函数执行shelltest.sh脚本文件,代码是这样的:
<?php
passthru("./shelltest.sh",$res);
echo "result=".$res;
?>
shelltest.sh脚本文件用到了 expect,用于使用root来执行程序,脚本在服务器上使用
./shelltest.sh可以执行,并能启动在脚本里需要启动的程序,使用 “ps -ax | grep 程序名”也能查到该进程
内容如下:
#!/usr/bin/expect
set passwd 123456
spawn su root
expect "密码:"
sleep 1
send "$passwd\r"
#此处示例为启动firefox,或者是调用其他程序
send "firefox\r"
expect eof
访问test.php页面,显示出的结果是:
spawn su root 口令: result=0
现在的问题是,passthru()函数返回的$res的值是0,说明函数成功执行了,但是使用 “ps -ax | grep 程序名”查不到相应开启的进程,说明调用的程序(firefox)没有调用成功,但是在主机上用root用户直接执行./shelltest.sh 相应的程序能启动起来,这是为什么呢?
纠结了一天,呼唤大牛啊!!!!
这是一条镜像帖。来源:北邮人论坛 / www-technology / #11318同步于 2010/10/29
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖
【求助】php执行外部命令,快纠结死了。。。。
zz4686234
2010/10/29镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
使用服务器进程所在的用户 运行脚本有效么
【 在 zz4686234 (狼人VS吸血鬼) 的大作中提到: 】
: php文件test.php调用passthru()函数执行shelltest.sh脚本文件,代码是这样的:
: [color=#A52A2A]<?php
: passthru("./shelltest.sh",$res);
: ...................
斑竹大人,我在sh文件里是用root执行的程序,这和您说的"服务器进程所在的用户"有冲突么?如果按您说的,我应该怎么做呢?
望版主大人明示~
【 在 xw2423 的大作中提到: 】
: 使用服务器进程所在的用户 运行脚本有效么
: 【 在 zz4686234 (狼人VS吸血鬼) 的大作中提到: 】
: : php文件test.php调用passthru()函数执行shelltest.sh脚本文件,代码是这样的:
: ...................
我刚刚用“ps u | grep httpd” 看了一下 apache服务器所在用户是root,我登陆都是用root登陆
【 在 xw2423 的大作中提到: 】
: 使用服务器进程所在的用户 运行脚本有效么
: 【 在 zz4686234 (狼人VS吸血鬼) 的大作中提到: 】
: : php文件test.php调用passthru()函数执行shelltest.sh脚本文件,代码是这样的:
: ...................
找到了一种替代方案,安全性也挺好的,遇到相同问题的同学可参考
http://bbs.chinaunix.net/thread-784289-1-1.html
ps:在搜索解决方案的过程中,发现遇到问题的人都会在各种各样的论坛上求助,不少人都是回复一条“解决了”这样类似的答复,而没有分享具体的解决方案
让人很无语,很无助,以后要从自身做起,想到自己查找解决方案时候的纠结,能共享的要共享,自己的举手之劳可能给别人带来很大的便利~