まず、これを少し現実的に見てみましょう。次の行:
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"
明らかに見えるはずなので、これはシェルでは有効なコマンドではありません。スイッチの値を渡す必要がupload.exe
ある形式については、ドキュメントを参照してください。/command
あなたは何の参考文献も提供していないのでupload.exe
、ここでより具体的な提案をすることはできません. ただし、これらの問題に対処する一般的な方法の 1 つは、最初にコマンドを変数に割り当ててから実行することです。これにより、デバッグ情報を表示して、問題を簡単に修正できます。
$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\"""