2012-04-29 2 views
1

Curl을 사용하여 FTP 서버에서 파일을 다운로드하려고합니다. 내 브라우저에 URL을 붙여 넣을 수 있으며 정상적으로 다운로드됩니다. 문제는 Curl과 PHP에서 FTP 서버가 리다이렉트를하고 Curl이 따르지 않는다고 생각합니다. "서버가 지정한 디렉토리로 변경을 거부했습니다"라는 오류 메시지가 나타납니다.PHP에서 Curl을 사용하여 FTP에서 파일 다운로드

편집 : 코드에서 % 2f를 (를) 삭제했습니다. 그것은 이전 테스트에서 나온 것입니다.

내 코드는 다음과 같습니다

$curl = curl_init(); 
$file = fopen("temp.zip", 'w'); 
curl_setopt($curl, CURLOPT_URL, "ftp://idx.living.net/idx_fl_ftp_down/idx_naples_dn/naples_data.zip"); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($curl, CURLOPT_FILE, $file); 
curl_setopt($curl, CURLOPT_FTPSSLAUTH, CURLFTPAUTH_SSL); 
curl_setopt($curl, CURLOPT_USERPWD, "myusername:mypassword"); 
curl_exec($curl); 
echo curl_error($curl); 

어떤 방법은 파일을 다운로드 할 때 브라우저가하는 방식으로 작동하는 컬을 강제로?

+0

FTP 서버가 리디렉션을 할 수 있다는 말을 들어 본 적이 없으며, 일반적으로 FTP 프로토콜이 아닌 HTTP 프로토콜의 기능입니다. – hakre

+0

FTP 프로토콜에 HTTP와 같은 리디렉션 응답이 없다고 생각합니다. 이것은 아마 당신의 문제가 아닙니다. wireshark를 사용하여 ftp 연결을 도청하여 정확히 무슨 일이 일어나는지보십시오. –

+0

경로의'/ % 2fidx_fl_ftp_down /'부분이 유효합니까? '/ idx_fl_ftp_down /'일까요? '% 2f'는'/'의 url 인코딩입니다. 나는 그것이 무효/존재하지 않는 디렉토리로 변경하려고 시도하고있을 것이라고 생각한다. – drew010

답변

0

이 질문에 대한 대답은 알고 있어야합니다 (말풍선 사용). 그러나 PHP로 ftp 서버에 파일을 다운로드하는 컬이 아닌 코드가 있습니다.

$local_file = 'output.rar'; 
$server_file = '/somedir/1/bar/foo/somearchive.rar'; 
$ftp_user_name='some_login'; 
$ftp_user_pass='Password'; 
$ftp_server='HOST'; 
// set up basic connection 
$conn_id = ftp_ssl_connect($ftp_server); 

// login with username and password 
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); 

/* uncomment if you need to change directories 
if (ftp_chdir($conn_id, "<directory>")) { 
    echo "Current directory is now: " . ftp_pwd($conn_id) . "\n"; 
} else { 
    echo "Couldn't change directory\n"; 
} 
*/ 

// try to download $server_file and save to $local_file 
if (ftp_get($conn_id, $local_file, $server_file, FTP_BINARY)) { 
    echo "Successfully written to $local_file\n"; 
} else { 
    echo "There was a problem\n"; 
} 

// close the connection 
ftp_close($conn_id); 

주 :

  1. ftp_ssl_connect은() sFTP는 함께 사용하기위한 것이 아닙니다. PHP에서 sFTP를 사용하려면 ssh2_sftp()를 참조하십시오.
  2. FTP 서버 주소 매개 변수 뒤에는 슬래시가 없어야하며 ftp : // 접두어로 사용하면 안됩니다.
관련 문제