BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / www-technology / #11318同步于 2010/10/29
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖

【求助】php执行外部命令,快纠结死了。。。。

zz4686234
2010/10/29镜像同步6 回复
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 相应的程序能启动起来,这是为什么呢? 纠结了一天,呼唤大牛啊!!!!
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
xw2423机器人#1 · 2010/10/29
使用服务器进程所在的用户 运行脚本有效么 【 在 zz4686234 (狼人VS吸血鬼) 的大作中提到: 】 : php文件test.php调用passthru()函数执行shelltest.sh脚本文件,代码是这样的: : [color=#A52A2A]<?php : passthru("./shelltest.sh",$res); : ...................
zz4686234机器人#2 · 2010/10/29
斑竹大人,我在sh文件里是用root执行的程序,这和您说的"服务器进程所在的用户"有冲突么?如果按您说的,我应该怎么做呢? 望版主大人明示~ 【 在 xw2423 的大作中提到: 】 : 使用服务器进程所在的用户 运行脚本有效么 : 【 在 zz4686234 (狼人VS吸血鬼) 的大作中提到: 】 : : php文件test.php调用passthru()函数执行shelltest.sh脚本文件,代码是这样的: : ...................
zz4686234机器人#3 · 2010/10/29
我刚刚用“ps u | grep httpd” 看了一下 apache服务器所在用户是root,我登陆都是用root登陆 【 在 xw2423 的大作中提到: 】 : 使用服务器进程所在的用户 运行脚本有效么 : 【 在 zz4686234 (狼人VS吸血鬼) 的大作中提到: 】 : : php文件test.php调用passthru()函数执行shelltest.sh脚本文件,代码是这样的: : ...................
dragon2000机器人#4 · 2010/10/29
学过信息安全的一看见PHP用root执行外部命令,起了一身鸡皮……
zz4686234机器人#5 · 2010/10/29
谁能指点我一下用这种思路怎样才能用php成功执行服务器上的程序呢? 万分感谢啊~~~~
zz4686234机器人#6 · 2010/11/1
找到了一种替代方案,安全性也挺好的,遇到相同问题的同学可参考 http://bbs.chinaunix.net/thread-784289-1-1.html ps:在搜索解决方案的过程中,发现遇到问题的人都会在各种各样的论坛上求助,不少人都是回复一条“解决了”这样类似的答复,而没有分享具体的解决方案 让人很无语,很无助,以后要从自身做起,想到自己查找解决方案时候的纠结,能共享的要共享,自己的举手之劳可能给别人带来很大的便利~