개발자의 끄적끄적

[php] fopen() 본문

개발/php

[php] fopen()

효벨 2020. 1. 19. 01:00
728x90
반응형

[php] fopen()

 

fopen()

1

2

3

4

5

6

7

8

9

$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT']

// 보통 수퍼글로벌 변수를 이런식으로 줄여 사용한다.

// DOCUMENT_ROOT는 웹 문서 트리의 루트를 가리킨다.

 

@ $fp = fopen("$DOCUMENT_ROOT/../orders/orders.txt",'ab'); // @fopen도 가능

if(!$fp) {

echo 'Could not processed!</body></html>';

exit;

}

  1. 첫 번째 파라미터는 파일의 경로 및 파일의 이름을 지정한다.

    orders.txt 파일은 일부러 배포할 목적의 파일이 아니라면 보안상의 이유로 웹에서 바로 접근할 수 없어야 한다. 웹 문서 트리의 루트의 부모 디렉터리(.. 부분)에 새로운 디렉터리를 만들어 사용한다.

  2. 두 번째 파라미터로 파일 모드를 지정한다. 보통 두 번째 파라미터까지만 입력한다.모드모드의미
    r 읽기 모드 읽기 전용. 처음에서 시작.
    r+ 읽기 모드 읽고 쓰기. 처음에서 시작.
    w 쓰기 모드 쓰기 전용. 처음에서 시작. 기존 파일 삭제.
    w+ 쓰기 모드 읽고 쓰기. 처음에서 시작. 기존 파일 삭제.
    x 경고 쓰기 쓰기 전용. 처음에서 시작. 기존 파일이 존재하면 false 반환하고 경고.
    x+ 경고 쓰기 읽고 쓰기. 처음에서 시작. 기존 파일이 존재하면 false 반환하고 경고.
    a 추가 모드 쓰기 전용. 기존 파일의 끝에서 시작.
    a+ 추가 모드 읽고 쓰기. 기존 파일의 끝에서 시작.
    b 바이너리 모드 다른 모드와 합쳐 사용. 바이너리와 텍스트 파일을 구별하는 경우에만 사용할 수 있다. 윈도우즈에서는 구별하며 유닉스에서는 구별하지 않는다. 이동성을 높이기 위해 항상 이 모드를 사용하는 것이 좋다. 바이너리 모드가 기본값이다.
    t 텍스트 모드 다른 모드와 합쳐 사용. 이 모드는 윈도우즈 시스템에서만 사용할 수 있다. 코드를 b 옵션으로 사용하도록 바꾸고 난 뒤가 아니라면 t 옵션은 사용하지 않는 편이 좋다.
  3. 세 번째 파라미터부터는 추가 인자로 꼭 넣어줄 필요가 있을 때에만 사용한다. 세 번째 파라미터는 include_path에서 파일을 찾을 때 사용한다.(그에 맞게 PHP 설정을 해야한다. 부록 A 참조) 이 옵션을 사용하면 디렉토리 이름이나 경로를 지정할 필요가 없다.

    1

    $fp = fopen('orders.txt', 'ab', true);

  4. 네 번째 파라미터는 프로토콜(http://와 같은)에 의해 정해진 파일 이름이나 외부에서 알려진 파일 이름을 사용할 수 있는데, 이에 대한 설명은 일단 생략한다.

php.ini 파일에서 allow_url_fopen을 활성시키면, fopen()에서 FTP나 HTTP를 사용해서 다른 곳에 있는 파일을 열 수 있다.

파일을 열 때 항상 권한 설정을 잘 해 주어야 한다.
대부분 시스템에서 스크립트는 웹 서버 사용자 권한으로 동작한다. 스크립트가 유닉스 시스템의
~/public_html/chapter2/ 디렉터리에 있다고 가정하고 스크립트가 쓸 수 있는 디렉터리를 만들어보자.

1

2

mkdir ~/orders

chmod 777 ~/orders

하지만 모든 사람이 쓸 수 있는 디렉터리는 보안상 상당히 위험하다. 그렇기 때문에 orders 디렉터리는 public_html 디렉터리의 부모에서 만들었다.(자세한 내용은 15장 전자상거래 보안 이슈)

 

 

출처 : https://www.opentutorials.org/course/779/4929

반응형
Comments