> 백엔드 개발 > PHP 튜토리얼 > php利用exec执行shell脚本问题

php利用exec执行shell脚本问题

WBOY
풀어 주다: 2016-06-23 13:32:52
원래의
1450명이 탐색했습니다.

先说下我想做的事情:
     将Linux下的操作,web化,使用户可以通过web端进行基本的操作,但是现在在写创建目录的代码:
      $mkdir_command = "/home/myname/myshell/mkdir.sh /$directory/ $name";
      exec($mkdir_command,$output,$return);
       .....
     我也知道在web端执行shell脚本,其实在Linux下是以Apache的权限来运行的,
      但是在Linux下我将mkdir.sh在运行时的权限修改为root的了,也就是说任何调用该文件的用户在执行的时候都是以root的权限来执行的:chmod 777 mkdir.sh ;  chmod u+s mkdir.sh   
但是在网页端还是执行不成功。
单独在Linux下是可以执行成功的,
希望大家发表一下意见或者看法,谢谢!!


回复讨论(解决方案)

Apache对该目录要有写的权限

Apache对该目录要有写的权限


谢谢您的回复,可以说一下具体应该怎么设置吗?

mkdir.sh权限修改为root的
那 apache 就更无权访问了

本帖最后由 xuzuning 于 2012-11-28 19:32:59 编辑mkdir.sh权限修改为root的
那 apache 就更无权访问了


额。。。mkdir.sh本身就是root用户创建的,只是当执行这个文件的时候,为普通用户赋予root的权限。
版主回复深感荣幸,嘿嘿,说正事。。。 您有什么好方法吗?

1.web将结果写到 一个文件里 例如需要创建什么 到哪创建

2.linux root 定时 调用 shell 查看文件是否存在需要更动的内容 
如果是 这个时候就是用root 来操作了


建一个定时器就是了.

楼主,请问你的php脚本有没有执行权限? 不是mkdir.sh  ,是那个跑shell 的php .设了执行权限没?

1.web将结果写到 一个文件里 例如需要创建什么 到哪创建

2.linux root 定时 调用 shell 查看文件是否存在需要更动的内容 
如果是 这个时候就是用root 来操作了


建一个定时器就是了.


您的意思是利用Linux的crond服务来实现?每隔一段时间就执行php写入的那个文件,然后再删除?这个办法好吗?

楼主,请问你的php脚本有没有执行权限? 不是mkdir.sh  ,是那个跑shell 的php .设了执行权限没?


php的运行权限肯定是有的。

你得查看你有没有执行权限
system/exec先执行一条其他简单的命令比如:ls 、ifconfig看看能否执行成功
再去检查.sh文件的权限问题

linux下输入visudo
然后我们在最后追加
apache ALL=NOPASSWD:/bin/sh
然后
php执行exec("/usr/bin/sudo /bin/sh /xxx/xxx.sh")
/xxx/xxx.sh 是你要执行的脚本

看看这篇文章吧,可以解决你的问题
http://blog.csdn.net/vindo/article/details/3610587

加 sudo

linux下输入visudo
然后我们在最后追加
apache ALL=NOPASSWD:/bin/sh
然后
php执行exec("/usr/bin/sudo /bin/sh /xxx/xxx.sh")
/xxx/xxx.sh 是你要执行的脚本

看看这篇文章吧,可以解决你的问题
http://blog.csdn.net/vindo/article/details/3610587……


谢谢各位,问题已经解决。谢谢!

谢谢上面各位的回答,综合一下,问题解决!嘿嘿!

求教怎么解决的?我的脚本是获取虚拟机ip的,现在也无法执行

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿