我有一个应该是一个简单的问题。我试图在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\\\
但它不起作用。
答案 0 :(得分: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\"""
答案 1 :(得分:1)
在它周围加上单引号:
exec("cd 'C:\\Program Files'");