`

php+IIS 执行 winrar.exe的问题

    博客分类:
  • php
php 
阅读更多

项目需要php解压一个.rar文件.代码如下

 

<?php 
$c='winrar.exe x D:\\wwwroot\\test\\a.rar -y D:\\wwwroot\\test\\a\\';
$ss=system($c,$msg);
var_dump($msg);

 

 

本地测试通过. 但在部署到服务器后解压失败!

由于服务是 win2012+II7.5+php 与本地的环境不同.  我认为是php没有执行winrar.exe的权限.

测试

由于在powerShell中执行php脚本有更高的权限.我在powerShell中测试权限的问题

C:\>c:\php\php.exe D:\wwwroot\test\t.php
int(0)

 执行成功!

给winrar.exe添加 iis应用程序池的权限 



 

访问页面依然失败.

我 ~_~        抽烟...喝水....上厕所.....

 

powerShell 中 会受到[环境变量]的影响.而IIS中应该不会用.

使用全路径试试.

 

<?php
$c='C:\\Program Files\\WinRAR\\winrar.exe x D:\\wwwroot\\test\\a.rar -y D:\\wwwroot\\test\\a\\';
$ss=system($c,$msg);
var_dump($msg);

 

 

 

C:\>c:\php\php.exe D:\wwwroot\test\t.php
'C:\Program' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
int(1)

应该是"Program Files"中有空格.shell 没能正确的解析命令

 

 修改

 

<?php
$c='"C:\\Program Files\\WinRAR\\winrar.exe" x D:\\wwwroot\\test\\a.rar -y D:\\wwwroot\\test\\a\\';
$ss=system($c,$msg);
var_dump($msg);

 

C:\>c:\php\php.exe D:\wwwroot\test\t.php
int(0)

 

 

执行成功! 

 

优化代码

<?php 
// %ProgramFiles%=C:\Program Files
// %ProgramFiles(x86)%=C:\Program Files (x86)
// %ProgramW6432%=C:\Program Files
$c='"%ProgramW6432%\\WinRAR\\winrar.exe" x D:\\wwwroot\\test\\a.rar -y D:\\wwwroot\\test\\a\\';
$ss=system($c,$msg);
var_dump($msg);

 

总结:

  1. 简单来说我掉进了在win+IIS中执行shell的坑.
  2. 使用 命令行执行php可以看到 shell 错误信息.而网页不行. 
  3. php 在 win+IIS 环境中确实有权限的问题,但不能一概而论. 要具体分析问题
  4. 多写博客. 在写博客中分析自己遇到的问题与调试的思路不同.有助于提高水平.

 

  • 大小: 18 KB
  • 大小: 6.6 KB
0
3
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics