본문 바로가기
Development/PHP

PHP - fopen() 파일 컨트롤 함수

by Dev. Jkun 2013. 7. 23.
반응형

fopen()


fopen (string $filename, string $mode, bool $use_include_path, resource $context);


파일이나 URL을 연다. 실패하면 false 를 반환.


  • string $filename
    파일을 로드할 파일명으로, 앞에 "scheme://.." 와 같은 프로토콜을 명시하는 경우 해당하는 프로토콜을
    이용하는 URL로 판별하여 해당 스키마의 프로토콜 핸들러를 찾아서 파일에 접근하게 된다.
    만약 프로토콜이 명시되지 않았다면 로컬 서버의 일반적 파일로 판단하여 스트림으로 연다.
    php.ini 설정파일에 safe_mode 나 open_basedir 를 설정하면 fopen 에 기본적으로 적용하게 된다.
    첫번째 매개변수를 URL로 판단하면 php.ini 설정파일에 allow_url_fopen 이 활성화 되었는지 보고,
    만일 false 로 설정되었다면 경고와 함께 fopen 실행이 중지된다.

    로토콜

     정의

     file://

     로컬 파일 시스템 접근 

     http://

     ftp url 

     php://

     다양한 I/O stream 

     zlib://

     압축된 stream 

     glob:// 패턴에 맞는 경로이름을 검색 
     phar://

     PHP archive

     ssh2:// Secure Shell 2
     rar:// rar
     ogg:// audio stream
     expect://

     Process Interaction Streams


    주의 : 윈도우에서는 백슬래쉬는 2개를 사용해야 합니다.

  • string $mode
    파일을 열때 모드를 선택.

    인자

    모드

     포인터 위치

     파일이 존재 유무

     r

     읽기 전용 

     파일의 시작  파일내용 보존 
     r+

     읽기 + 쓰기

     파일의 시작 파일내용 보존
     w 쓰기 전용 파일의 시작 파일내용 삭제, 없으면 새로 생성
     w+ 읽기 + 쓰기 파일의 시작

     파일내용 삭제, 없으면 새로 생성

     a

     쓰기 전용

     파일의 끝

     파일내용 보존, 없으면 새로 생성

     a+ 읽고 쓰기 파일의 끝

     파일내용 보존, 없으면 새로 생성

     x 쓰기 전용

     새로운 파일 생성

     파일이 존재하면 false 리턴, 그리고 에러 남
     x+ 읽고 쓰기 새로운 파일 생성 파일이 존재하면 false 리턴, 그리고 에러 남

     b : 바이너리모드로 호출

     t : 텍스트 파일의 라인 변경 태그를 Unix 에서는 \n를 사용하고, 맥에서는 \r만 사용하는데,

     윈도우에서는 \r\n를 사용하는데, 이러한 \n 을 \r\n으로 변환해준다.

     따라서 다른 시스템의 텍스트 파일을 윈도우 플랫폼에서 열 때 사용하면 좋다.


    매개변수 뒤에 마지막에 b 나 t 를 붙일 수 있다.


  • bool $use_include_path = false
    옵션으로 기본값이 false 로 설정. true(1) 로 설정하게 되면, php.ini 에 설정되어 있는 include_path 경로도
    같이 검색을 하게 된다.
  • resource $context
    PHP 5.0  이후에 추가되었으며, 파일 핸들러에서 다룰 컨텍스트를 지정해주는 매개변수이다.
  • 파일 읽고 쓰는 함수들
    파일을 읽고 쓰거나 특정 위치로 갈때에는 다음 함수들을 사용하면 된다.
    string fgets ( resource $handle [, int $length ] ); //한 줄을 읽은, default 최대 length는 1024
    string fread ( resource $handle , int $length ); // length 바이트를 읽음 (바이너리 모드일 때 사용)
    int fwrite ( resource $handle , string $string [, int $length ] ); // 바이너리로 파일에 씀
    int ftell ( resource $handle ); // 현재 핸들러의 위치를 리턴
    int fseek ( resource $handle , int $offset [, int $whence = SEEK_SET ] ); //핸들러의 해당 위치로 이동

  • 파일 닫기
    파일을 다 쓰고 읽고 나면 최종적으로는 반드시 파일을 닫아줘야한다.
    bool fclose ( resource $handle ); // 핸들러를 닫는다.


반응형

댓글