用exec执行cmd命令返回为空

繁华散尽Oo 2012-12-22 10:31:46
我把swftools里的pdf2swf.exe这个文件放到了网站根目录 在php里利用exec函数执行命令
$cmd = "c:/php/www/pdf2swf c:/php/www/upload/1.pdf c:/php/www/upload/1.swf"
exec($cmd);
我直接把这个代码 粘贴到命令行里 执行是正确的 可用php这么调用 却不成功 exec的后两个参数加上后 第二个参数是array();第三个是1,不成功 然后经过修改 我直接在跟目录下放个php文件 在里面写的exec(pdf2swf 1.pdf 1.swf)这么执行能成功 求教这是什么原因?
注:以上代码我在我本地测试完全通过,放到服务器上就是以上错误,都是windows2003的 网上用的IIS 本地用的apache
...全文
727 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
sinat_19270031 2015-01-06
  • 打赏
  • 举报
回复
你的问题解决了么?我也遇到了同样的问题,不过我是要转换音频,求解答啊!!!!!!!!!!!
Chrisdowson 2014-10-18
  • 打赏
  • 举报
回复
我也遇到相同情况,不过我的命令可以执行成功,但是没有返回值。不知道问题出在哪,权限也全开了了
ImN1 2012-12-22
  • 打赏
  • 举报
回复
再试试单引号……也不想这个问题,尽管试试吧
繁华散尽Oo 2012-12-22
  • 打赏
  • 举报
回复
引用 7 楼 snmr_com 的回复:
$mcd $cmd 我看到两个不同的变量名
额 这个是我刚才手敲的 不好意思 我是在ie里echo出的cmd命令 D:\JGY\JGY_WEB\JGY_PHP\install_package\app\pdf2swf.exe D:\JGY\JGY_WEB\JGY_PHP\install_package\uploadfile\2012\1222\20121222110539946.pdf D:\JGY\JGY_WEB\JGY_PHP\install_package\uploadfile\2012\1222\20121222110539946.swf 就是这么个路径
ImN1 2012-12-22
  • 打赏
  • 举报
回复
$mcd $cmd 我看到两个不同的变量名
繁华散尽Oo 2012-12-22
  • 打赏
  • 举报
回复
引用 4 楼 xuzuning 的回复:
这应该是用户权限问题 直接在跟目录下放个php文件 可以成功 但显然不是 web 方式运行的,因为你不可能将网站的根放在 C 盘的根上 建议: 将网站目录移动到 D 盘上,并授予匿名用户执行权 不把网站放在 C 盘可防止系统文件被意外破坏,同时在系统崩溃时,灾难恢复的的工作量要小得多
呃 版主大大 我是放在网站根目录了 不是C盘根目录 D:\JGY\JGY_WEB\JGY_PHP\install_package 这个是我的网站根目录 我把pdf2swf.exe放在这个下面 然后在放个1.pdf 再建一个index.php 里面的代码直接就是exec(pdf2swf 1.pdf 1.swf) 这样的能成功 然后下面的代码: $mcd = "D:\JGY\JGY_WEB\JGY_PHP\install_package\app\pdf2swf.exe D:\JGY\JGY_WEB\JGY_PHP\install_package\uploadfile\2012\1222\20121222110539946.pdf D:\JGY\JGY_WEB\JGY_PHP\install_package\uploadfile\2012\1222\20121222110539946.swf" 路径比较深 三个参数中间都有空格 但这个就不行了
繁华散尽Oo 2012-12-22
  • 打赏
  • 举报
回复
引用 3 楼 snmr_com 的回复:
因为你手动打开命令行,是承接了系统环境的,所以能直接运行文件 但用php执行,并不能承接系统环境,所以你还是需要指明可执行文件(exe等)
我把pdf2swf后面加上了.exe 还是不能执行 我试了试ipconfig 这个命令没问题 可能应该还是路径问题 我明明都写了绝对路径的 请问大哥 我是不是路径什么地方有问题? $mcd = "D:\JGY\JGY_WEB\JGY_PHP\install_package\app\pdf2swf.exe D:\JGY\JGY_WEB\JGY_PHP\install_package\uploadfile\2012\1222\20121222110539946.pdf D:\JGY\JGY_WEB\JGY_PHP\install_package\uploadfile\2012\1222\20121222110539946.swf" exec($cmd,$out); 这是我的cmd命令 比较长 请赐教
xuzuning 2012-12-22
  • 打赏
  • 举报
回复
这应该是用户权限问题 直接在跟目录下放个php文件 可以成功 但显然不是 web 方式运行的,因为你不可能将网站的根放在 C 盘的根上 建议: 将网站目录移动到 D 盘上,并授予匿名用户执行权 不把网站放在 C 盘可防止系统文件被意外破坏,同时在系统崩溃时,灾难恢复的的工作量要小得多
ImN1 2012-12-22
  • 打赏
  • 举报
回复
因为你手动打开命令行,是承接了系统环境的,所以能直接运行文件 但用php执行,并不能承接系统环境,所以你还是需要指明可执行文件(exe等)
繁华散尽Oo 2012-12-22
  • 打赏
  • 举报
回复
引用 1 楼 snmr_com 的回复:
先看手册 exec() 第二个参数是屏幕返回的信息,每行为一个单元,组成数组
嗯 是 这个数组是空的 屏幕上行没有任何信息 我把命令粘贴到命令行里直接执行是正确的
ImN1 2012-12-22
  • 打赏
  • 举报
回复
先看手册 exec() 第二个参数是屏幕返回的信息,每行为一个单元,组成数组
xuzuning 2012-12-22
  • 打赏
  • 举报
回复
首先要解决的是权限的问题 如果指令在命令行或批处理中可以正确执行的话,那么问题就在于“权限” 当然你是不会禁用 exec 函数的
繁华散尽Oo 2012-12-22
  • 打赏
  • 举报
回复
引用 10 楼 xuzuning 的回复:
$cmd = "c:/php/www/pdf2swf c:/php/www/upload/1.pdf c:/php/www/upload/1.swf" exec($cmd); 这是你发帖中的代码 如果你提供的信息,怎么可能得到真实的结果呢?
抱歉 抱歉 因为我的地址是在程序里得到的 我把程序贴出来 不如这么直接写个url直接 我echo了一下$cms这个变量 就是这个路径 D:\JGY\JGY_WEB\JGY_PHP\install_package\app\pdf2swf.exe D:\JGY\JGY_WEB\JGY_PHP\install_package\uploadfile\2012\1222\20121222110539946.pdf D:\JGY\JGY_WEB\JGY_PHP\install_package\uploadfile\2012\1222\20121222110539946.swf 劳烦版主大人再给分析一下 是不是iis的问题?我在本地apache测试是正常的 iis上看了一下 所有的用户都有读写执行权限的
xuzuning 2012-12-22
  • 打赏
  • 举报
回复
$cmd = "c:/php/www/pdf2swf c:/php/www/upload/1.pdf c:/php/www/upload/1.swf" exec($cmd); 这是你发帖中的代码 如果你提供的信息,怎么可能得到真实的结果呢?

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧