2017-03-24 140 views
1

您好,我遇到了从批处理文件运行curl命令的问题。我执行从PHP代码的文件是这样的:使用CURL命令的批处理文件在PHP中执行不正确,但从命令行运行

exec("curlPut.bat $zipName $url", $output); 

我改变目录中的PHP代码到批处理文件和拉链都位于我运行该批处理文件之前。

这是脚本:

@echo off 
curl -X PUT -H "Content-Type:application/zip" --data-binary @%1 %2 

然而,当我检查URL中的PUT命令,就是要发送的zip文件,数据不存在。

当我在Windows cmd中运行完全相同的脚本时,它完美地工作。

curlPut.bat zipFile.zip http://exampleurl 

这是利用我作为参数传递在我的PHP代码完全相同的数据,想不通为什么批处理文件适用于一个而不是其他任何人都可以帮忙吗?

+0

在两个不同的上下文中运行该命令。当您从命令行运行它时,上传'zipFile.zip'的文件位于当前目录中。当你从PHP运行它时,当前目录可能会有所不同。甚至有可能''.bat'文件根本无法启动,因为PHP无法找到它。在PHP代码中为'curlPut.bat'和'zipFile.zip'使用绝对路径。 – axiac

+0

对不起,我应该提到我在运行批处理文件之前更改了PHP代码中的目录,并且批处理文件和zip文件都位于此处。用这个信息更新我的问题。 – olliejjc16

回答

-1

变量批量%variable%$variable

+0

$变量是我传递给批处理文件的PHP变量。 – olliejjc16

1

我不知道如何在PHP中使用双引号,但你应该这样做。

exec("curlPut.bat $zipName \"$url\"", \"$output\"); 

在一批ashure报价和避免双重双引号:

@echo off 
Echo %~nx0 Arg1:[%1] 
Echo %~nx0 Arg2:[%2] 
curl -X PUT -H "Content-Type:application/zip" --data-binary @"%~1" "%~2" 
pause 
+0

嗨,感谢您的回应,但我不确定我完全理解您的意思,我尝试在我的命令周围使用引号,但没有运气。 – olliejjc16

+0

我编辑了批处理以输出实际的cmd行参数,因此您可以检查批处理获得的内容。 – LotPings

+0

嗨,我添加输出CMD线,这是现在返回$输出变量数组([0] => curlPut.bat Cmdline args:zipFile.zip http:/ exampleurl [1] =>按任意键继续...) – olliejjc16

1

也许你不能直接执行批处理文件,而是你必须使用CMD.EXE解释。

https://stackoverflow.com/a/835955/370052

是否$输出显示的东西吗? 您也可以将一个$ err变量添加到exec()以检查退出代码。

+0

您好我尝试添加cmd但没有运气,我也有另一个批处理文件完全运行在相同的格式,所以不认为它的问题。我添加了像你所说的$ err变量,其结果是:$ output = Array()$ err = 1 – olliejjc16

+0

也许它仍然是一个路径相关的问题。 curl.exe位于何处?你可以PHP用户访问它(如果PHP运行在网络服务器上...)。也可以尝试从cmd.exe调用.bat时更改为绝对路径 – tweber

+0

我将curl安装到窗口上,并且curl.exe位于安装文件夹中,环境路径指向它。当我在命令行中运行curl命令时,它们工作得很完美。 PHP使用PHP Curl库运行curl命令没有问题,但是我必须使用外部脚本来运行此命令,Curl PHP Library似乎没有提供处理我正在使用的特定命令的方法。 – olliejjc16

相关问题