웹마스터 팁
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
사용자에게 파일 내용을 뿌릴땐 fpassthru를 쓰자
2014.03.23 15:54
fread말고 fpassthru를 써야되는 이유를 두가지 이유만 적겠습니다.
1. 사용자의 응답속도를 줄일 수 있습니다.
fpassthru는 파일을 열은 포인터를 이용하여 컨텐츠를 사용자에게 실시간으로 뿌려줍니다.
그렇기때문에 사용자가 0.1초라도 더 컨텐츠를 빠르게 볼 수 있습니다.
fread를 사용할경우
fopen(파일 포인터 열음) -> fread(파일 컨텐츠를 불러옴) -> fclose(파일 포인터 종료) -> echo(파일 내용을 전송) -> 종료
fpassthru를 사용할경우
fopen(파일 포인터 열음) -> fpassthru(파일 컨텐츠를 불러오면 바로 출력하여 전송) -> fclose(파일 포인터 종료) -> 종료
의 과정을 거칩니다. 과정이 한개 더 줄어들며 PHP에서 불러온만큼 바로바로 한번에 전송해주니 사용자들의 체감속도가 늘어납니다.
2. 코드가 줄어듭니다.
$fp = fopen('./textfile.txt', 'r'); $content = fread($fp, filesize('./textfile.txt')); echo $content; fclose($fp);
참 번거롭죠.
fpassthru를 쓰면 단 3줄이면 끝납니다.
$fp = fopen('./textfile.txt', 'r'); fpassthru($fp); fclose($fp);
이정도만 해도 충분히 써야될 이유를 적었다고 생각합니다.
댓글 2
-
고구마군
2014.04.07 04:35
-
핸들이막뽑혀
2014.04.07 22:30
이 함수를 쓰시면 안됩니다. fpassthru 함수는 메뉴얼에 나온데로 주어진 파일 디스크립터로부터 EOF 까지 파일 내용을 전부 읽습니다. 만일 읽어야할 파일의 용량이 크다면 out of memory 가 나옵니다.
메모리 사용의 주의해서 사용해야하는것이 꽤 있는데, 이건 차라리 첫뻔째 것이 훨씬 안전한 코드입니다.
제목 | 글쓴이 | 날짜 |
---|---|---|
한 페이지(화면)에 두개(2개)의 모듈(게시판 등)을 넣는 법 [6] | 황건순 | 2008.08.25 |
음악넣는 BGM코드 70종류 입니다 [1] | 푸른커튼 | 2008.08.25 |
댓글(코멘트) 입력창에 이미지 넣기 [19] | skyatc | 2008.08.29 |
밑에 페이지 네비게이션 수정 (다음10개, 이전10개등으로) [6] | Clanss | 2008.08.29 |
메인화면에 플래시 쉽게 삽입하는 방법.. [12] | 청개구리00 | 2008.08.30 |
문서 카테고리를 메뉴에 적용하기 위한 레이아웃 수정 팁과 개념토론 [7] | 제베 | 2008.08.31 |
원하는 위치에 구글 (맞춤)검색창 달기 [2] | 다케루 | 2008.09.02 |
각 리스트형 위젯에 페이지 기능을 달자. [10] | 라르게덴 | 2008.09.02 |
[우클릭 및 드레그 방지법] 및 [방지된 홈페이지 해재법] >0< [7] | 이홍석295 | 2008.09.03 |
카멜레온 최근글 위젯 클릭시 새창 팁 | 가랑바람 | 2008.09.04 |
회원 포인트 선물 하기 등 포인트 변경시 바로 적용 방법 | 한꼬마 | 2008.09.06 |
동일서버내 페이지에서 로그인정보 활용하기... [4] | 수로 | 2008.09.06 |
다음카페에 끊김없이 음악나오게 하기 | 푸른커튼 | 2008.09.06 |
등록하시겠습니까? 등록할까요? 안 나오고 바로 글 등록되게 하는 법 [6] | 황건순 | 2008.09.08 |
블로그, 홈페이지 가입시 자동 입력되는 http:// 없애기 [2] | 류영무 | 2008.09.09 |
IP 주소 4자리수 모두 공개하는 방법 [1] | 블루파티 | 2008.09.11 |
에디터 9pt 추가 및 에디터에도 웹폰트 보이게 하기. [13] | 욜리 | 2008.09.11 |
사진 한꺼번에 일괄적으로 올리기 [4] | 안정수650 | 2008.09.12 |
게시판 에디터 폰트 글자(글씨)크기 변경하는 법 | 씨에씨에 | 2008.09.12 |
주소록 구현 (외부 페이지) [17] | CSLab | 2008.09.15 |
안녕하세요. PHP / XE를 이제 시작하는 고구마군 이라고 합니다.
출신이 LINUX C언어 개발자 출신이라 PHP라는 언어의 특성을 잘 이해 하지 못해 궁금한 마음에 글을 올립니다.
C언어의 경우는 소스가 간결하다고 해서 속도가 빠르다고 장담하지 못합니다.
위에 언급해 주신 fopen-fread-fclose-echo 로 처리 하는 경우에 비해 fopen-fpassthru 경우가
소스 코드가 줄어드는부분에 대한 장점은 맞다고 생각합니다.
다만 1번의 속도에 대한 부분은 어떤한 근거가 있는지 궁금합니다.
실제 C언어에서 보면
1)
rc = function( param );
if ( 0 > rc ) return -1;
2)
if ( 0 > ( rc = function( param ))
return -1;
제가 PHP라는 언어의 특성을 잘모르기 때문에 C언어를 기준으로 이야기를 드린 것 입니다.
앞으로 PHP를 사용해야 하는 상황이 되어 fopen-fread-fclose-echo 조합과 fopen-fpassthru 조합 중
성능 상의 이득이 있다 하시는 fpassthru 함수 사용에 대해
DynamicLaser님의 글을 보고 궁금한 마음에 글을 올려 보는 것이오니 답변 부탁 드립니다.
PS : PHP 메뉴얼 페이지를 확인해 봤더니
http://www.php.net/manual/en/function.fpassthru.php
Note:
When using fpassthru() on a binary file on Windows systems, you should make sure to open the file in binary mode by appending a b to the mode used in the call to fopen().
You are encouraged to use the b flag when dealing with binary files, even if your system does not require it, so that your scripts will be more portable.
라고 나옵니다. 여기서 portable 이 [ 이동성이 좋은 / 휴대하기 편한 / 손쉽게 실어 나를수 있는 ]등등의
의미로 사용됩니다만... 메뉴얼 페이지 상에서 속도가 빠르다라는 언급은 없는 것 같습니다.
오히려 메뉴얼 페이지 하단의 사용자 노트를 보시면 50MB 이상의 파일등에서 사용시 문제점이 있는 것으로
글을 올려 놨습니다.
아마도 오래전의 글이기 때문에 인터넷 회선 속도가 현재 우리나라 환경과 다르므로
과거 외국에서 발생한 문제 였을 것으로 보여지기는 합니다.