2

私は単純な問題であるべきものを持っています。以下のコードをPHPで実行しようとしています。このコードの目的は、WinSCPと呼ばれるプログラムを使用して、FTP内のあるフォルダーから別のフォルダーにファイルをアップロードすることです。

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

ファイルは転送されず、私が抱えている問題は、ディレクトリ内のとの場所にスペースがあるためbig boyですdev notes。次の間に別の二重引用符を含めてみました:

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

しかし、それは機能しませんでした。

4

2 に答える 2

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"

明らかに見えるはずなので、これはシェルでは有効なコマンドではありません。スイッチの値を渡す必要が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\""" 
    
于 2012-12-27T16:20:03.707 に答える
1

次のように一重引用符で囲みます。

exec("cd 'C:\\Program Files'");
于 2012-12-27T16:11:59.507 に答える