php
PHP - FTP를 이용한 원격 업,다운로드 이어받기, 이어전송하기
이 기능은 업,다운로드 중 다른 작업을 가능하게 해주는 진보된 기능입니다. 사용 방법은 이전 함수와 크게 다르지 않으니 어렵지 않습니다.
다음은 B 호스트에서 로컬로 다운로드합니다.
다음은 로컬파일을 B 호스트로 업로드합니다.
다음은 원격 업로드 이어전송하기 및 프로그레스 입니다.
다음은 B 호스트에서 로컬로 다운로드합니다.
<?php
// ftp는 상대경로, 절대경로가 허용되지 않으며,
// 보통 public_html, www, html 로 시작합니다.
// public_html/userid 에서 자료를 가져 온다면,
// ftp 경로는 "public_html/userid/파일" 이 됩니다.
// B 호스트 정보
$ftp_server = "호스트 혹은 ip주소";
$ftp_user_name = "접속 아이디";
$ftp_user_pass = "접속 패스워드";
// B 호스트 접속
$conn_id = ftp_connect($ftp_server);
// B 호스트 로그인
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
// 원격으로 B 호스트에서 다운로드합니다.
// 로컬에 저장할 파일명, 필요시 경로도 같이 작성해 줍니다.
$file = 'test_body.php';
$fp = fopen($file, 'w');
// 원격으로 public_html/userid/test.php 파일을 가져옵니다.
$ret = ftp_nb_fget($conn_id, $fp, 'public_html/userid/test.php', FTP_BINARY);
$i = 1;
while ($ret == FTP_MOREDATA) {
// 다운로드중 다른 작업을 작성합니다.
echo "${i} \n";
$i++;
$ret = ftp_nb_continue($conn_id);
}
if ($ret != FTP_FINISHED) {
echo "다운로드 중 에러가 발생하였습니다.";
exit(1);
}
ftp_close($conn_id);
fclose($fp);
?>
다음은 로컬파일을 B 호스트로 업로드합니다.
<?php
// ftp는 상대경로, 절대경로가 허용되지 않으며,
// 보통 public_html, www, html 로 시작합니다.
// public_html/userid 에 자료를 저장한다면,
// ftp 경로는 "public_html/userid/파일" 이 됩니다.
// B 호스트 정보
$ftp_server = "호스트 혹은 ip주소";
$ftp_user_name = "접속 아이디";
$ftp_user_pass = "접속 패스워드";
// B 호스트 접속
$conn_id = ftp_connect($ftp_server);
// B 호스트 로그인
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
// 원격으로 전송할 파일
// 필요시 사용자 업로드 파일을 B 호스트로 전송시
// $_FILES['userfile']['tmp_name'] 으로 작성하면 됩니다.
$file = 'test.php';
$fp = fopen($file, 'r');
// 원격으로 public_html/userid/test.php 파일 이름으로 저장합니다.
$ret = ftp_nb_fput($conn_id, 'public_html/userid/test.php', $fp, FTP_BINARY);
$i = 1;
while ($ret == FTP_MOREDATA) {
// 업로드중 다른 작업을 작성합니다.
echo "${i} \n";
$i++;
$ret = ftp_nb_continue($conn_id);
}
if ($ret != FTP_FINISHED) {
echo "업로드중 에러가 발생하였습니다.";
exit(1);
}
ftp_close($conn_id);
fclose($fp);
?>
다음은 원격 업로드 이어전송하기 및 프로그레스 입니다.
<?php
ob_end_flush();
$remote_file = 'remote.txt';
$local_file = 'local.txt';
$fp = fopen($local_file, 'r');
$conn_id = ftp_connect($ftp_server);
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
$ret = ftp_nb_fput($conn_id, $remote_file, $fp, FTP_BINARY);
while ($ret == FTP_MOREDATA) {
// 업로드 중 리소스 소멸시 재연결합니다.
if(!isset($conn_id2)) {
$conn_id2 = ftp_connect($ftp_server);
$login_result2 = ftp_login($conn_id2, $ftp_user_name, $ftp_user_pass);
}
// 전송된 파일 크기를 측정합니다.
if(isset($conn_id2)) {
clearstatcache();
$remote_file_size = ftp_size($conn_id2, $remote_file);
}
// 프로그레스
$local_file_size = filesize($local_file);
if (isset($remote_file_size) && $remote_file_size > 0 ){
$i = ($remote_file_size/$local_file_size)*100;
printf("%d%% uploaded<br />\n", $i);
flush();
}
$ret = ftp_nb_continue($conn_id);
}
if ($ret != FTP_FINISHED) {
print("There was an error uploading the file...<br />\n");
exit(1);
}
else {
print("ok!<br />\n");
}
ftp_close($conn_id);
fclose($fp);
?>
0 댓글