文档章节

php exec函数 Unable to fork [dir] 错误解决笔记

x
 xshanj2
发布于 2017/09/14 18:17
字数 772
阅读 88
收藏 0

「深度学习福利」大神带你进阶工程师,立即查看>>>

简单来说,就是我编写了一段代码 exec('dir'),php会报错,提示 Unable to fork [dir] ,并且exec函数第三个参数返回值为-1。为了解决这个问题,我做了大量搜索,花了几乎一整的时间,尝试了网上提到的各种办法,最终问题得以解决,不过还是有很多不太清楚的地方,本文只是记录一下心得。

 

我的环境
Windows Server 2012 R2, IIS-8.5, PHP-5.6.28

 

问题查找顺序
1. 确定:检查php.ini的disable_functions是否包含了exec
2. 确定:C:\Windows\System32\ 路径被加入到环境变量中
2. IIS默认会建立一个IIS_IUSRS组,还有一个默认用户叫IUSR
3. php官网提到,exec函数会先打开cmd.exe,因此网上有帖子说需要让用户"IUSR"有执行cmd.exe的权限,我不确定是不是一定要这样做
4. C:\Windows\System32 以及 C:\Windows\SysWOW64 都有cmd.exe,还不太明白这2个的区别。
5. 貌似环境变量里有一个变量叫 ComSpec,指向了 C:\Windows\System32
6. 微软官方提供了一个工具Procmon.exe,大概可以监视一些东西。
https://docs.microsoft.com/en-us/sysinternals/
https://live.sysinternals.com/
最终监视出来的结果,貌似是php-cgi.exe创建了一个进程cmd.exe,然后执行dir命令,不过cmd.exe的完整路径为什么是 C:\Windows\SysWOW64\cmd.exe
7. IIS好像有多处地方可以修改user
    1. 应用程序池(Application Pools)-> 高级设置(Advacned Settings) -> 标识(Identity)
    2. 网站(Sites) -> 身份认证(Authentication) -> 匿名身份认证(Anonymous Authentication) -> 编辑(Edit)
    3. 网站(Sites) -> 高级设置(Advacned Settings) -> 物理路径凭据(Physical Path Credentials)
8. 使用 get_current_user 函数可以获取到当前php到底是以哪个用户在运行
9. Windows任意文件或者目录下,查看指定用户的权限
    右键 -> 属性 -> 安全 -> 高级 -> 有效访问 -> 选择用户 -> "输入用户名,点检查名称,确定" -> 查看有效访问
以上是很多人提到的有可能是权限不足造成的问题,各种测试下来,我发现并不是权限造成的,继续又查了好多资料!
10. 打开IIS首页 -> FastCGI Settings -> Edit -> Advacned Settings.Protocol由NamedPipe改为TCP,问题解决!
11. 继续查资料,为什么NamedPipe不行,其实我也不懂这玩意。大概就是fascgi和其他应用程序通信的方式,因为我在第7点处都指定了网络用户,导致了在创建pipe时(可能就是第6点提到的),权限不足引起的。
12. 最终解决方案:FastCGI Protocol继续保持NamedPipe(因为网上说windows下这种协议更快),第7点提到的3处分别为
    1. 指定网络用户,不过在IIS_IUSRS组里
    2. 使用应用程序池标识(Application pool identity)
    3. 留空白,应用程序用户(通过身份认证)(Application user(pass-through authentication))
13. 关于NamedPipe的资料
https://msdn.microsoft.com/en-us/library/windows/desktop/aa365600(v=vs.85).aspx
https://stackoverflow.com/questions/4098549/minimum-os-permissions-required-to-create-named-pipe-wcf
https://serverfault.com/questions/247064/permission-needed-for-named-pipes-on-windows-2008
https://stackoverflow.com/questions/21115821/what-is-fcgi-x-pipe-in-the-php-superglobal-array-and-what-is-it-used-for

x
粉丝 1
博文 40
码字总数 11428
作品 0
渝北
私信 提问
加载中
请先登录后再评论。
访问安全控制解决方案

本文是《轻量级 Java Web 框架架构设计》的系列博文。 今天想和大家简单的分享一下,在 Smart 中是如何做到访问安全控制的。也就是说,当没有登录或 Session 过期时所做的操作,会自动退回到...

黄勇
2013/11/03
3.5K
6
SQLServer实现split分割字符串到列

网上已有人实现sqlserver的split函数可将字符串分割成行,但是我们习惯了split返回数组或者列表,因此这里对其做一些改动,最终实现也许不尽如意,但是也能解决一些问题。 先贴上某大牛写的s...

cwalet
2014/05/21
9.6K
0
我的架构演化笔记 功能1: 基本的用户注册

“咚咚”,一阵急促的敲门声, 我从睡梦中惊醒,我靠,这才几点,谁这么早, 开门一看,原来我的小表弟放暑假了,来南京玩,顺便说跟我后面学习一个网站是怎么做出来的。 于是有了下面的一段...

强子哥哥
2014/05/31
976
3
beego API开发以及自动化文档

beego API开发以及自动化文档 beego1.3版本已经在上个星期发布了,但是还是有很多人不了解如何来进行开发,也是在一步一步的测试中开发,期间QQ群里面很多人都问我如何开发,我的业余时间实在...

astaxie
2014/06/25
2.7W
22
Nutch学习笔记4-Nutch 1.7 的 索引篇 ElasticSearch

上一篇讲解了爬取和分析的流程,很重要的收获就是: 解析过程中,会根据页面的ContentType获得一系列的注册解析器, 依次调用每个解析器,当其中一个解析成功后就返回,否则继续执行下一个解...

强子哥哥
2014/06/26
712
0

没有更多内容

加载失败,请刷新页面

加载更多

这是对我最大的认可和鼓励

这是程序员cxuan的第18篇原创分享 可能一些小伙伴们不太清楚是怎么回事,是这样的。 我最近肝了三本 PDF,分别是 《Java核心技术总结》、《HTTP核心总结》、《程序员必知的硬核知识》、目录如...

osc_nc5ghpm9
17分钟前
0
0
折叠屏丨华为专家深度解读折叠屏连续性和拖拽适配介绍

折叠屏手机的出现,满足了用户对大屏幕的追求,但卓越的用户体验更离不开应用的适配与功能创新。距离Mate X面世已经一年的时间,应用适配情况如何?在适配过程中有哪些经验可以参考?有没有常...

软件绿色联盟
今天
0
0
一个 static 还能难得住我?

这是程序员cxuan的第15期原创分享 static 是我们日常生活中经常用到的关键字,也是 Java 中非常重要的一个关键字,static 可以修饰变量、方法、做静态代码块、静态导包等,下面我们就来具体聊...

osc_p23q7y3z
19分钟前
15
0
高中生写LOL外挂1年狂赚500万,落网前刚买下120万保时捷...

点击“开发者技术前线”,选择“星标🔝” 在看|星标|留言, 真爱 来源:交汇点| 编辑:可可 2020年3月,泰州姜堰警方接到一起特殊的报警:一名游戏玩家向民警反映,自己在玩英雄联盟对战时输...

开发者技术前线
今天
0
0
一次简单的服务器 cpu 占用率高的快速排查实战

前两天,朋友遇到一个线上 cpu 占用率很高的问题,我们俩一起快速定位并解决了这个问题。在征求朋友同意后,特发此文分享整个过程。本文以对话的形式展开,加上我的内心独白。文中对话与实际...

osc_emo7t12i
20分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部