Heim >Backend-Entwicklung >PHP-Tutorial >用exec执行cmd命令返回为空

用exec执行cmd命令返回为空

WBOY
WBOYOriginal
2016-06-23 13:47:262357Durchsuche

我把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


回复讨论(解决方案)

先看手册

exec() 第二个参数是屏幕返回的信息,每行为一个单元,组成数组

先看手册

exec() 第二个参数是屏幕返回的信息,每行为一个单元,组成数组


嗯 是 这个数组是空的  屏幕上行没有任何信息  我把命令粘贴到命令行里直接执行是正确的

因为你手动打开命令行,是承接了系统环境的,所以能直接运行文件
但用php执行,并不能承接系统环境,所以你还是需要指明可执行文件(exe等)

这应该是用户权限问题
直接在跟目录下放个php文件 可以成功
但显然不是 web 方式运行的,因为你不可能将网站的根放在 C 盘的根上

建议:
将网站目录移动到 D 盘上,并授予匿名用户执行权
不把网站放在 C 盘可防止系统文件被意外破坏,同时在系统崩溃时,灾难恢复的的工作量要小得多

因为你手动打开命令行,是承接了系统环境的,所以能直接运行文件
但用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命令 比较长 请赐教

这应该是用户权限问题
直接在跟目录下放个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"
路径比较深  三个参数中间都有空格  但这个就不行了

$mcd
$cmd
我看到两个不同的变量名

$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
就是这么个路径

再试试单引号……也不想这个问题,尽管试试吧

$cmd = "c:/php/www/pdf2swf c:/php/www/upload/1.pdf c:/php/www/upload/1.swf"
exec($cmd);
这是你发帖中的代码
如果你提供的信息,怎么可能得到真实的结果呢?

$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上看了一下 所有的用户都有读写执行权限的 

首先要解决的是权限的问题
如果指令在命令行或批处理中可以正确执行的话,那么问题就在于“权限”
当然你是不会禁用 exec 函数的

我也遇到相同情况,不过我的命令可以执行成功,但是没有返回值。不知道问题出在哪,权限也全开了了

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn