扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
显然,你要靠php操作其范围外的文件或目录是不可能的,这是因为php的运行身份是apache,因此没办法操作root权限的文件或目录。
创新互联凭借专业的设计团队扎实的技术支持、优质高效的服务意识和丰厚的资源优势,提供专业的网站策划、网站建设、成都网站建设、网站优化、软件开发、网站改版等服务,在成都十载的网站建设设计经验,为成都上1000家中小型企业策划设计了网站。
我们采取的办法是,用VC写个服务,该服务的运行身份是root,也就是给其最大权限,php调用该服务做操作。
当然还有另外的办法,这是我的猜测,你不妨试看看,
1、把php的运行用户改为root,这样可能会存在一定的风险。
2、在apache里面指定可以对某个root权限的文件或目录做操作,该办法没试验过。如果你能试验成功的话,希望反馈一下哦。
我们的服务器是这样做的:
php一般是以apache用户身份去执行的,把apache加入到存储你文件的父文件夹属组里去,然后改该父文件夹权限为775,这样属组成员就有写的权限,而apache属于这个组就可以改写该目录下所有文件的权限,当然,属组最好不要是root,你可以为该文件夹改个其它普通用户组。
改apache/php的运行用户方法不安全,不建议使用。
你想问得是php如何执行shell命令把?
可以用system(),exec(),passthru()这三个函数实现
虽然这三个命令都能执行linux系统的shell命令,但是其实他们是有区别的:
system() 输出并返回最后一行shell结果。
exec() 不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面。
passthru() 只调用命令,把命令的运行结果原样地直接输出到标准输出设备上。
相同点:都可以获得命令执行的状态码
例子:system("ls -al");
【使用之前要在php.ini中把safe_mode关闭】
php执行linux的命令用system或exec就可以,只要打开safemode,但是一些系统底层的没有执行命令的不允许调用哦,实在有些命令例如zip之类想用的话,直接用php写入一个shell脚本文件再exec那个sh就好了。
PHP 中执行系统命令有几种方式:
system():和 C 语言中的 system() 函数的用法是一样的,参数为命令行,成功则返回命令输出的最后一行,失败则返回 FALSE。
shell_exec():执行命令,然后返回命令执行后的 stdout 输出。
passthru():直接执行命令,然后将输出内容直接显示到网页上。
在这里,curl 的输出不用显示到网页上,所以 system() 可能比较合适。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流