CI 묻고 답하기

제목 ftp 라이브러리 사용중 질문이 있습니다. 용량이 좀 있는 이미지는 전송이 안되는것 같습니다.
글쓴이 amen 작성시각 2015/11/23 08:56:16
댓글 : 9 추천 : 0 스크랩 : 0 조회수 : 20030   RSS
안녕하세요  ci 로 개발중 ftp 라이브러리 사용중에 잘 안되는 부분이 있어 질문드립니다.

검색은 좀 해봤는데 제가 잘 못찾는 것인지 구글링도 원하는 답은 찾을 수가 없더군요..(아니면 제 영어 실력이 부족할수도,)


일단 스택오버플로우에는 이 사람이 제 상황과 비슷한 것 처럼 보이구요. 

http://stackoverflow.com/questions/20769945/uploading-file-via-ftp-using-codeigniter-but-showing-error-message


제가 하려는 작업은 엑셀문서를 읽은후 엑셀문서의 한 셀에 있는 이미지파일의 로컬경로 c:/img/img123.jpg 를 읽은후 
FTP서버에 올리려는 작업입니다. 

소스는 이와 같습니다. 

$this->load->library('ftp');
               
$config['hostname'] = '';
$config['username'] = '';
$config['password'] = '';
$config['debug'] = TRUE;
               
$this->ftp->connect($config);

$tmp_file_name=임의의 이름;

$upfile='/html/qst_img/'.$tmp_file_name.'.jpg';  //이부분을 txt로 바꾸고 txt 로컬파일을 하면 잘 이동됩니다만 이미지는 안됩니다.


$this->ftp->upload("로컬파일 경로 (C:\img\img1.jpg"), $upfile, 'ascii', 0775);

일단 첫번째 상황은 로컬 apm 셋팅 상황에서  프로그램 실행시 ftp로 정상 이동됩니다. 그러나 
용량이 매우 적은 txt 파일은 이동되는데 이미지와 같은 파일은 이동이 안되더군요. (ftp 서버에서 확인해보면 
이미지 파일은 생성이 됩니다만 5바이트로 생성되는등 정상적인 파일이 아닙니다. 확인해본 결과 로컬 경로에 있는 파일을 읽지 못하는것 같습니다. ) 


두번째 상황은 프로그램을 apm 환경이 아니라 웹서버에서 실행시 txt파일도 ftp로 이동이 안됩니다. 
처음 작업할땐 몰랐는데 하다보니 당연한것 같습니다. 

웹서버 A에 저장되어있는 파일을  ftp서버 B로 이동하는거야 가능하지만 

웹서버 A에서  클라이언트pc의 로컬파일을 마음대로 접근하여 ftp서버 B로 올리는 것이 당연히 불가능해보입니다.

정상적인 form 태그를 쓴 클라이언트의 로컬파일을 넘기는 방법 말고 php소스만으로도 

웹서버 A에서 클라이언트 PC의 로컬파일을 ftp서버 B로 올리는 것이 가능할까요 ? 

ftp_put 등 검색해보았지만 이 역시 서버에서 서버로만 옮기는 작업 같습니다. 
 
태그 ftp,apm
 다음글 system\core\Model.php on line ... (2)
 이전글 index.php 삭제 관련해서 (2)

댓글

변종원(웅파) / 2015/11/23 09:05:06 / 추천 0
리눅스서버는 permission이라는게 있습니다. 파일 올리는 디렉토리의 퍼미션을 확인해보세요. 윈도우는 그런게 없고 리눅스는 쓰기권한이 없으면 파일 못 올립니다 그리고 매뉴얼 보시면 ftp 상태나 실패시 에러를 출력해주는 함수가 있을겁니다. 다음부터는 에러메세지도 같이 올리세요. 그게 빠르고 정확한 답변을 얻을 수 있습니다
amen / 2015/11/23 09:26:01 / 추천 0
댓글 감사합니다. 

일단 에러메세지는 

An Error Was Encountered

Unable to locate the source file. Please check your path.

이와 같습니다. 

그리고 해당 웹서버의 퍼미션은 읽기쓰기가 모두 열려있는 상태입니다. (777)
(때문에 txt파일은 정상적으로 이동이 되는 것으로 보입니다 내용도 맞구요.. 그러나 jpg파일은 전송이 안되는 상황입니다,.)

그러면 제가 질문드린 웹서버 A에서 form 태그를 쓰지않고 바로 php소스만으로 클라이언트 pc의 파일을 ftp서버로 전송하는게 가능한것인가요 ? 

한대승(불의회상) / 2015/11/23 09:42:44 / 추천 0
에러 메시지를 보면 답이 있군요.
원본파일 경로를 확인 해 보세요.
amen / 2015/11/23 09:48:06 / 추천 0
해당 위치의 원본파일은 정확하게 위치하고 있습니다. 경로등의 문제는 아닌것 같습니다. 왜냐하면 

같은 경로등의 파일명.txt 파일은 옮겨지는데 파일명.이미지파일만 옮겨지지 않습니다.
한대승(불의회상) / 2015/11/23 10:04:28 / 추천 0
캐리셋을 UTF8로 설정한 상태에서 파일명이 한글인 경우 발생 할 수 있습니다.
윈도우의 경우 파일시스템에 한글은 cp949 캐릭셋을 쓰고 있으니까요.

에러메시지에 답이 있으니 여러가지 가능성을 가지고 테스트 해보세요.
amen / 2015/11/23 10:14:47 / 추천 0
댓글 감사합니다.  파일명같은 경우는 모두 영문을 사용하고 있는 상태입니다.

에러메세지에 답이 있다는 생각은 저도 동일합니다만 , 오랫동안 여러번 테스트를 해보아도 해결이 안되어 

제가 놓치고있는 부분이 있을까 질문하였습니다. 

일단 파일명도 영문인 점은 이상이 없고 경로 또한 해당파일 경로를 실행창에서 실행시 정상 이미지가 출력되는 것으로 보아 
경로도 맞는것으로 보입니다.  지금까지 봐왔던 것은 txt파일은 내용까지 잘 전송이 되는 반면 jpg파일은 내용(전송된 파일의 용량이 5바이트 뿐입니다.)이 전송이 안되는 것 같습니다. 
파일에 딱히 용량제한이나 크기제한을 두지않았습니다. 300kb의 이미지이구요. 흠... 

그런데 제가 의문을 품고 있는, 웹서버 A에서 클라이언트의 로컬파일을 FTP서버 B로 전송하는게 가능은 한건가요 ? 

그렇다면 이건 꽤 위험한..일이 아닌가..요? 

 
변종원(웅파) / 2015/11/23 18:35:44 / 추천 0
보편적인 전송방식은 A서버에 업로드하는거겠죠.

A에 업로드 후 이미지 여부를 판단해서 문제가 없을 경우 ftp로 B 서버에 전달하시면 됩니다.
또는 A와 B를 rsync 라는 것을 통해 싱크할 수도 있고 방법은 많습니다. (nfs도 있고)

 
taegon / 2015/11/24 10:30:02 / 추천 0
작업 내용을 보면 클라이언트 -> 웹서버 A -> FTP서버 B로 전송하는 것인데..
단순하게 보면 클라이언트 파일 -> 웹서버 A에 파일 업로드 -> 웹서버 A에서 FTP서버 B로 파일 업로드 이렇게 하시면 되지 않나요?
한번에 하실 수 있는 방법은 없기 때문에 업로드 받은 파일을 바로 FTP로 올리시면 될 것 같은데요..
amen / 2015/11/27 15:50:34 / 추천 0
아무래도 그래야할것 같습니다  혹시나 제가 남긴 글에 대한 괜찮은 방법이 생긴다면 

이 글에 댓글달아 내용공유하도록 하겠습니다.