2012-12-27 59 views
2

我有一個什麼應該是一個簡單的問題。我試圖在PHP中執行下面的代碼。此代碼的目標是使用名爲WinSCP的程序將文件從一個文件夾上載到FTP中的另一個文件夾。從PHP執行時在WinSCP命令行中跳出空格

exec("C:\\xampp\\winscp.com backup /command \"option confirm off\" \"put C:\\big boy\\Documents\\dev notes\\\" \"exit\""); 

的文件沒有得到轉移,我認爲我有問題是因爲空間我在我的目錄中big boydev notes是的。我試圖包括另一個雙引號之間:

C:\\big boy\\Documents\\dev notes\\\ 

但它沒有奏效。周圍

+2

你會做同樣的,你會在操作系統的外殼。請提供在cmd下工作的命令,否則這與PHP和exec無關,而是與windows shell相關。 – hakre

回答

3

讓我們先關閉所有把這種腳踏實地的一點點。下面的代碼行:

exec("C:\\xampp\\upload.exe backup /command \"option confirm off\" \"put C:\\big boy\\Documents\\dev notes\\\" \"exit\""); 

您的主要目的在命令的實際字符串,讓我們事由的再認識它:

C:\xampp\upload.exe backup /command "option confirm off" ⤦ 
⤥"put C:\big boy\Documents\dev notes\" "exit" 

因爲它現在應該是你明明看見,這不是一個有效的命令在shell中。請參閱upload.exe文檔,其格式爲/command交換機的值必須通過。

由於您尚未提供任何參考upload.exe,因此我無法在此提供更具體的建議。然而,處理這些問題的一種常見方式是首先將該命令分配給一個變量,然後執行它。這允許顯示調試信息,然後可以輕鬆地解決的事情:

$command = "C:\\xampp\\upload.exe backup /command \"option confirm off\" \"put C:\\big boy\\Documents\\dev notes\\\" \"exit\""; 
exec($command); 

這可能是它只是(只猜到了,這是它如何與cmd /k工作):

$command = 'C:\xampp\upload.exe backup /command ""option confirm off" ⤦ 
⤥"put "c:\big boy\Documents\dev notes\" "exit""'; 

編輯:現在當你寫它實際上是winscp.com命令,我會假設:

$command = 'C:\xampp\upload.exe backup /command "option confirm off" ⤦ 
⤥"put ""c:\big boy\Documents\dev notes\""" "exit"'; 

以下規則:

  • 每一個命令必須被包裹成"報價是否包含空格。

    option confirm off 
    "option confirm off" 
    
  • 如果命令中還含有"報價,這些都增加一倍""

    put "c:\big boy\Documents\dev notes\" 
    "put ""c:\big boy\Documents\dev notes\""" 
    
+0

感謝您的詳細回覆。我只是試着像我爲$ path命令做一個變量。但它仍然不起作用。 backup.exe是我在winscp程序中保存的會話之一。一些例子在這裏http://winscp.net/eng/docs/commandline – user875139

+0

哪個程序是'upload.exe'?只是'winscp.exe'重命名? *編輯:*我現在說'winscp.com',對吧? – hakre

+0

是winscp.com或winscp.exe剛剛重命名。對不起,我感到困惑 – user875139

1

把單引號是這樣的:

exec("cd 'C:\\Program Files'"); 
+0

我有類似的問題,空格和單引號固定它,謝謝! – mgrenier