exec()函数问题
源代码:

在网上也搜索了答案
比较详细的答案是:
<?php
exec("lsof -i:80",$out,$status);
结果:
var_dump($out);
array(0) { }
echo $status;值为127
2、通过:shell_exec("id -a");查看一下用户以及用户组
<?php
echo shell_exec("id -a");
结果:uid=1002(www) gid=1002(www) groups=1002(www)
3、登录Linux给www用户赋予root级别的权限试一试看
修改/etc/sudoers文件
root ALL=(ALL) ALL
下面增加一行
www ALL=(ALL) ALL
修改后执行php,结果没意义,返回的数组依然为空array(0) { }
4、修改权限没有效果,网上查询说exec第三个参数返回127可能还与路径有关系,那么从路径方面着手试一试
exec("whereis lsof", $out);
var_dump($out);
结果:
array(1) { [0]=> string(50) "lsof: /usr/sbin/lsof /usr/share/man/man8/lsof.8.gz" }
lsof命令所在文件路径: /usr/sbin/lsof
所以把 exec("lsof -i:80",$out1,$status);修改为exec("/usr/sbin/lsof -i:80",$out1,$status);
var_dump($out1);
结果成功执行了
返回结果如下:
array(6) {
[0]=> string(56) "COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME"
[1]=> string(67) "nginx 31706 www 6u IPv4 165987 0t0 TCP *:http (LISTEN)"
[2]=> string(67) "nginx 31707 www 6u IPv4 165987 0t0 TCP *:http (LISTEN)"
[3]=> string(113) "nginx 31707 www 12u IPv4 232481 0t0 TCP localhost.localdomain:http->192.168.204.1:55893 (ESTABLISHED)"
[4]=> string(67) "nginx 31708 www 6u IPv4 165987 0t0 TCP *:http (LISTEN)"
[5]=> string(67) "nginx 31709 www 6u IPv4 165987 0t0 TCP *:http (LISTEN)"
}
_______________________________________________________________________________________________________
linux 配置情况:
php.ini 配置文件我没有禁用exec()函数 安全模式 也是false
/etc/sudoers 文件也配置了

结果依旧没有生效 真的很悲剧啊
为此我做了个实验

证明上面我的配置是正确的!!!!
系统的命令就不需要加全路径 一般放在/usr/bin/ 下面的命令
但问题还是来了 which php 始终返回不了值????????
exec("/usr/local/node/bin/node -v 2>&1", $out, $status); 只能换种方式了,这种方式比较的保守
exec()函数问题的更多相关文章
- Linux下多进程编程之exec函数语法及使用实例
exec函数族 1)exec函数族说明 fork()函数用于创建一个子进程,该子进程几乎复制了父进程的全部内容,但是,这个新创建的进程如何执行呢?exec函数族就提供了一个在进程中启动另一个程序执行的 ...
- 程序清单 8-8 exec函数实例,a.out是程序8-9产生的可执行程序
/* ============================================================================ Name : test.c Author ...
- JS中exec函数与match函数的区别与联系
总结: 正则规则的声明,两种方法: exec是RegExp类的匹配方法 match是字符串类的匹配方法 var reg = /aaa/g; var reg = new RegExp("aaa ...
- 进程控制之exec函数
用fork函数创建子进程后,子进程往往要调用一种exec函数以执行另一个程序.当进程调用一种exec函数时,该进程执行的程序完全替换为新程序,而新程序则从其main函数开始执行.因为调用exec并不创 ...
- linux exec函数家族
1.exec家族一共有六个函数,分别是: (1)int execl(const char *path, const char *arg, ......); (2)int execle(const ch ...
- fork和exec函数
#include<unistd.h> pid_t fork(void); 返回:在子进程中为0,在父进程中为子进程IO,若出错则为- fork最困难之处在于调用它一次,它却返回两次.它在调 ...
- 让QMainWindow也表现出QDialog的exec函数的特征
前几天在做毕业设计项目的时候,使用的PyQt4,想实现这么样一个功能: 场景描述:主窗口a(QMainWindow类型)和主窗口b(QMainWindow),b是通过a窗口中某一个按钮弹出来的. 功能 ...
- 一、进程与信号之exec函数system函数
exec函数: 子进程调用exec函数执行另一个程序,exec函数进程完全由新程序代替,替换原有程序正文,数据,堆,栈段 #include <unistd.h> extern char * ...
- 实例分析exec函数
fork()函数通过系统调用创建一个与原来进程(父进程)几乎完全相同的进程(子进程是父进程的副本,它将获得父进程数据空间.堆.栈等资源的副本.注意,子进程持有的是上述存储空间的"副本&quo ...
- 二十五、Linux 进程与信号---exec函数
25.1 介绍 在用 fork 函数创建子进程后,子进程往往要调用一种 exec 函数以执行另一个程序 当进程调用一种 exec 函数时,该进程完全由新程序代换,替换原有进程的正文,而新程序则从其 m ...
随机推荐
- [Write-up]BSides-Vancouver
关于 下载链接 目标:拿到root用户目录下的flag.txt 全程无图! 信息收集 因为虚拟机网络是设置Host-only,所以是vmnet1这张网卡,IP段为192.168.7.1/24 nmap ...
- 在IDEA中如何使用tomcat部署项目
1.首先,你得先建个Java 项目,然后next 2.新建完项目后,然后右击项目,选择“Add Framework Support...” 3.将Web Application 前的框勾选起来,然后点 ...
- CF6
A A 不解释 #include<bits/stdc++.h> using namespace std; namespace red{ inline int read() { int x= ...
- Spring框架的配置文件
Spring框架的配置文件 (2014-12-18 20:43:42) 转载▼ 标签: 配置文件 例子 构造函数 成员 spring 分类: 专业知识 (注:文中的"<"均需 ...
- MyEclipse 8.5整合Git,并在Github上发布项目
我们在闲暇时间想加入些团队做点属于自己有意义的东西,那Github就是为你准备的.但是用惯SVN的我们就得学习学习了. 工具/原料 myeclipse8.5 github 方法/步骤 1 下载Ecli ...
- Jquery制作插件---内容切换
//需求:点击左右导航箭头,实现内容的切换 //代码如下 <!DOCTYPE html> <html lang="en"> <head> < ...
- python2.x 脚本 中文乱码 解决方法
在python脚本起始位置添加如下代码 # -*- coding: UTF-8 -*
- Helm 架构【转】
在实践之前,我们先来看看 Helm 的架构. Helm 有两个重要的概念:chart 和 release. chart 是创建一个应用的信息集合,包括各种 Kubernetes 对象的配置模板.参数定 ...
- 强制找回GitLab管理员账户密码的方法
为了开发运维工具,我们采用自行搭建的GitLab来管理所有代码.悲催的是最近忘记了管理员账户的密码,而且没有邮件服务器,因此无法接收密码找回的邮件,导致无法新建用户或者项目,这样一来,岂不就成为了一个 ...
- POJ 3371:Flesch Reading Ease 模拟
Flesch Reading Ease Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2071 Accepted: 60 ...