2012-12-27 3 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 셸과 관련됩니다. – hakre

답변

3

하자 우선 해제 지구에 약간이를 가져온다. 다음 라인 :

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

당신은 명령의 실제 문자열에 주로 관심, 현실을 rewiew하자

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

, 이것은 유효하지 않은 지금 당신에게 분명히 볼 수 있어야로 명령 쉘에서. /command 스위치의 값을 전달해야하는 형식 인 upload.exe의 설명서를 참조하십시오.

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

답장을 보내 주셔서 감사합니다. 나는 당신이 내 경로에 $ 명령을 한 것처럼 변수를 만들려고했습니다. 그러나 여전히 작동하지 않습니다. 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