2

我有一个应该是一个简单的问题。我正在尝试在 PHP 中执行以下代码。此代码的目标是使用名为 WinSCP 的程序将文件从一个文件夹上传到 FTP 中的另一个文件夹。

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\\\

但它没有用。

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"

因为它现在应该对您明显可见,所以这不是 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\""" 
    
于 2012-12-27T16:20:03.707 回答
1

像这样在它周围加上单引号:

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