2017-03-24 139 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

相關問題