Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有CURL命令的批处理文件在PHP中未正确执行,但从命令行运行_Php_Batch File_Curl - Fatal编程技术网

带有CURL命令的批处理文件在PHP中未正确执行,但从命令行运行

带有CURL命令的批处理文件在PHP中未正确执行,但从命令行运行,php,batch-file,curl,Php,Batch File,Curl,您好,我在从批处理文件运行curl命令时遇到问题。我从PHP代码中执行文件,如下所示: exec("curlPut.bat $zipName $url", $output); 在运行批处理文件之前,我将PHP代码中的目录更改为批处理文件和zip所在的位置 以下是脚本: @echo off curl -X PUT -H "Content-Type:application/zip" --data-binary @%1 %2 但是,当我检查PUT命令要将zip文件发送到的url时,数据不存在 当我

您好,我在从批处理文件运行curl命令时遇到问题。我从PHP代码中执行文件,如下所示:

exec("curlPut.bat $zipName $url", $output);
在运行批处理文件之前,我将PHP代码中的目录更改为批处理文件和zip所在的位置

以下是脚本:

@echo off
curl -X PUT -H "Content-Type:application/zip" --data-binary @%1 %2
但是,当我检查PUT命令要将zip文件发送到的url时,数据不存在

当我在Windows cmd中运行完全相同的脚本时,它工作得非常好

curlPut.bat zipFile.zip http://exampleurl

这使用的数据与我在PHP代码中作为参数传递的数据完全相同,我不知道为什么批处理文件对其中一个文件有效,但对另一个文件无效。任何人都有帮助吗?

批处理中的变量
%variable%
$variable

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

exec("curlPut.bat $zipName \"$url\"", \"$output\");
在批处理中,要保留引号并避免双引号:

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

您可能无法直接执行bat文件,但必须使用cmd.exe解释器

美元产出是否揭示了什么?
您还可以将$err变量添加到exec()以检查退出代码。

您可以在两种不同的上下文中运行该命令。从命令行运行时,要上载的文件
zipFile.zip
位于当前目录中。从PHP运行时,当前目录可能不同。甚至有可能
.bat
文件根本没有启动,因为PHP找不到它。在PHP代码中为
curlPut.bat
zipFile.zip
使用绝对路径。对不起,我应该提到在运行批处理文件之前我更改了PHP代码中的目录,批处理文件和zip都位于那里。使用此信息更新了我的问题。$变量是我传递到批处理文件中的PHP变量。您好,谢谢您的回答,但我不确定我是否完全理解您的意思,我尝试在命令周围使用引号,但没有成功。我编辑批处理以暂停输出实际的cmd行参数,因此,您可以检查批处理得到了什么。您好,我添加了输出命令行,这是$output变量数组中现在返回的([0]=>curlPut.bat Cmdline args:zipFile.zip http:/exampleurl[1]=>按任意键继续…)http有第二个向前破折号,它只是不能正确地显示在我的评论中,但它是
http://exampleurl [1] 
与您直接在命令行中输入的完全相同?您好,我尝试添加cmd,但没有成功,我还有另一个批处理文件以相同的格式完美运行,所以不要认为这是问题所在。我像你说的那样添加了$err变量,结果是:$output=Array()$err=1可能仍然是一个与路径相关的问题。curl.exe在哪里?您是否可以让php用户访问它(如果php在Web服务器中运行…)。另外,在windows上调用cmd.exeI安装的curl中的.bat时,您可以尝试更改为绝对路径,curl.exe位于安装文件夹中,环境路径指向它。当我在命令行中运行curl命令时,它们工作得非常好。PHP使用PHP curl库运行curl命令没有问题,但我必须使用外部脚本来运行此命令,而curl PHP库似乎没有提供处理我正在使用的特定命令的方法。因此,您是否在命令行上以curl.exe(和文件夹)所有者的身份调用PHP脚本或者它是在Web服务器上运行的?PHP是在Web服务器上运行的