PHP

파일의 제어

파일 다루기

파일복사

/file/7.php

<?php
$file = 'readme.txt';
$newfile = 'example.txt.bak';

if (!copy($file, $newfile)) {
    echo "failed to copy $file...\n";
}
?>

파일삭제

<?php
unlink('deleteme.txt');
?>

읽고 쓰기

 

file_get_contents

1.php

1.php 파일과 같은 디렉토리에 readme.txt 파일이 존재해야 한다.
<?php
$file = './readme.txt';
echo file_get_contents($file);
?>

file_put_contents

2.php

<?php
$file = './writeme.txt';
file_put_contents($file, 'coding everybody');
?>
좀 더 고급스러운 파일 제어를 원한다면 fopen을 참조하자.

네트웍크를 통해서 데이터 읽어오기

<?php
$homepage = file_get_contents('http://php.net/manual/en/function.file-get-contents.php');
echo $homepage;
?>

파일을 다루는 과정에서 발생할 수 있는 문제들

권한

파일을 읽고 쓸 때 권한의 문제로 오류가 발생할 수 있다. 권한에 대한 문제는 다소 복잡하기 때문에 동영상 강의를 참고한다.

아래 코드는 특정 파일이 읽을 수 있는 상태인지를 확인한다.

/file/4.php

<?php
$filename = 'readme.txt';
if (is_readable($filename)) {
    echo 'The file is readable';
} else {
    echo 'The file is not readable';
}
?>

다음 코드는 특정 파일이 쓰기가 가능한지 확인한다.

/file/5.php

<?php
$filename = 'writeme.txt';
if (is_writable($filename)) {
    echo 'The file is writable';
} else {
    echo 'The file is not writable';
}
?>

아래는 파일의 존재 여부를 확인한다.

/file/6.php

<?php
$filename = 'readme.txt';
if (file_exists($filename)) {
    echo "The file $filename exists";
} else {
  	echo "The file $filename is not exists";
}
?>

참고

file_get_contents, file_put_content를 사용할 수 없는 경우라면 fread, fwrite 함수를 사용해야 한다. 자세한 내용은 다음 링크를 참고한다. 

댓글

댓글 본문
작성자
비밀번호
  1. NamJin Kim
    감사합니다
  2. php 살짝 어렵네~
    파일을 다루는 과정에서 발생할 수 있는 문제들 << 여기서부터 갑자기 어려워지네용 ㅠ_ㅠ
    알아둬야지 하는 심정으로 봤습니다. 흑흑
  3. 신입1
    감사합니디!
  4. Kyouwon Lee
    감사합니다^^
  5. JustStudy
    고맙습니다
  6. 고고1
    여기부터 어렵게 느껴져여 ㅜㅜ
  7. 정민규
    골 아프고 부러우면 지는거다 힘 내야지 ㅠㅠ
  8. 쥬슈야
    이번강좌를 보니 드롭박스나, N드라이브 같은 클라우드 파일관리(?)서비스 들이 얼마나 복잡할지 느낌이 오는군요;;
    스마트폰과 PC에 동시에 동기화도 시켜야 하고..
  9. 코딩!
    아 이건 좀 어렵네요 ㅋㅋ
  10. thexl
    오 권한 땜에 안 됐었는데, 감사합니다
    대화보기
    • irunjegil
      좋은 강의 좋은 내용으로 항상 감사하며 공부를 하고 있었습니다.
      그런데 한 강의 부분에서 흐름이 확 깨져버렸습니다.
      파일제어트러블 슈팅 강의가 상세하게 설명이 되지 않아서
      트러블 슈팅하는 방법을 모르겠고 그것을 알아야
      항후 PHP 애플리케이션을 제작할 때 기본바탕이 될 것일 텐데..
      xshell5를 우선 다운을 받기는 하였으나
      하는법을 모르니... 답답하고 속상한 마음입니다....
    • sssssqew
      리눅스 사용하시는 분들 파일 복사하기 전에 복사하려는 파일이 속한 현재 디렉토리에 대해 자신이 소속된 권한종류(소유자, 그룹, 전체)에서 쓰기(w)와 실행(x) 권한이 꼭 필요합니다.

      예를 들어보면, 저같은 경우 /var/www/filePHP 가 현재 디렉토리이고, 그 아래 fileLearn.php 와 readme.txt 가 있고, 소유자 권한을 가지고 있다면, 최소한

      d-wxrwxrwx 나 drwxrwxrwx 가 되면 됩니다. 뒤에 그룹이나 전체에 대한 권한에 상관없이 소유자 권한은 최소한 쓰기와 실행권한이 있어야 파일복사가 됩니다.

      권한변경은 chmod 이고 rwx에 각각 값을 부여하여 r : 4, w : 2, x :1 입니다.
      예를 들면 chmod 777 . 이라고 하면 점(.)은 복사하려는 파일이 속해있는 현재 디렉토리를 의미하고 소유자, 그룹, 전체에 상관없이 읽기,쓰기, 실행의 모든 권한을 부여한다는 의미입니다.

      저는 리눅스를 사용한지 얼마 안되고 단지 실제로 해보고 말씀드리는 것이라 혹시 제가 잘못 설명한 부분이 있으시면 고수님들이 다시 수정해주시면 감사하겠습니다.
    • Allen Cho
      bitnami 로 phpmyadmin 을 실행하려고 하면

      Fatal error: Call to undefined function mb_detect_encoding() in C:\Bitnami\wampstack-5.4.33-0\apps\phpmyadmin\htdocs\libraries\php-gettext\gettext.inc on line 177

      이라고 뜨는데 혹시 아시는 분 계신가요?
    • 샤핀
      감사합니다.
    • chase
      chmod -Rf 777 명령도 혹시 써보셨나요?!
      이런 권한 문제로 안되시면 차라리 apache2 의 directory 설정을 루트권한이 필요 없는곳으로 바꾸셔도 되요.
      저는 var/www 에서 작업하면 매 수정할때마다 root권한을 얻어야 해서 그냥 home directory로 localhost 경로를 변경했습니다.
      방법은,
      1. /etc/apache2/apache2.conf 에서 <Directory /var/www/> 를 찾으신 후, /var/www 이 부분을 사용자권한으로 접근할 수 있는 경로로 지정하시면 됩니다. ex) <Directory /home/사용자명/Desktop>
      2. /etc/apache2/sites-available/000-default.conf 에서 DocumentRoot /var/www/html 을 찾으신 후, 1번에서 지정한 경로를 써주시면 됩니다. ex) DocumentRoot /home/사용자명/Desktop

      이렇게하시고, apache2를 재시작 하시면 될듯 합니다.
      약간 핀트는 어긋났지만 문법적 오류가 아니라 권한오류때문에 문제가 생기면 어떻게든 해결을 해야하지 않을까요 ㅎ
      대화보기
      • bara
        너무 어렵네요.
        저번에도 여기서 막혀서 결국 그만두고 다시 처음부터 듣는데, 또 이러네요.

        파일복사와 파일삭제가 안됩니다.
        <?php
        $file = 'test.txt';
        $newfile = 'example.txt.bak';

        if(!copy($file, $newfile)) {
        echo "failed to copy $file...\n";
        }
        ?>
        로 해놓으면

        에러메시지가 이렇게 뜹니다.
        Warning: copy(example.txt.bak): failed to open stream: Permission denied in /var/www/html/1.php on line 5
        failed to copy


        파일삭제시에는
        Warning: unlink(deleteme.txt): Permission denied in /var/www/html/4.php on line 2

        이들 파일이 있는 곳의 권한은
        drwxr-xr-x 5 ubuntu root 4096 Jun 12 06:39 .
        이렇게 되구요.

        파일복사에 쓰는 파일 권한은
        -rw-r--r-- 1 ubuntu root 33 Jun 12 05:59 test.txt

        마지막으로 삭제할 파일 권한은
        -rwxrwxrwx 1 ubuntu ubuntu 19 Jun 12 06:18 deleteme.txt

        삭제할 파일 권한이 저렇게 이상한 모습인 것은
        구글 검색으로 권한을 chmod 777 파일명 .. 이렇게 바꾸면 된다고 해서 했는데, 바꾸기 전과 동일하게 에러메시지가 뜨네요.

        도대체 왜 이런건가요? 도와주세요.
      • egoing
        단순한 html 페이지라면 file_get_contents를 사용하시는 것도 괜찮은 선택입니다만, 프로그래밍적인 로직을 담고 있는 페이지라면 http://opentutorials.org......138 를 사용하셔야겠지요?
        대화보기
        • ejaguar211
          정말 깔끔한 표현력으로 이런 어려운 개념들을 잘 설명하시다니 매번 공부하러 올때마다 감탄하고 갑니다.
          홈페이지를 제작하는 중 php를 통해 소개 및 가입 등의 조각조각 만들어진 html페이지들를 통합해보고자 합니다.
          원래 이렇게 하는게 맞는지도 모르겠네요.^^;
          그동안 페이지별로 따로 만들어둔 html파일들을 index.php에 기본적으로 갖춘 양식(header 및 footer)과 연동시키는 과정을 시도하고 있습니다.

          file_get_contents()을 써서 할 수 있는것인지 궁금합니다. url이 아니라 운영하는 호스팅서버 내 저장된 html파일을 불러오는 것인데 그렇게 하는 것이 제대로 하는 걸까요? 올바른 방향으로 가고 있는지 모르겠습니다. 검색에 한계를 느끼고 결국 댓글을 다네요. 아래 패션테러리스트님이 말씀하시는 부분도 왠지 맘에 걸리구요.
        • superjang
          xshell 이라는 프로그램입니다.
          개인사용자는 무료인걸로 알고 있습니다.
          공식사이트에서 다운로드 가능합니다 ㅎ
          대화보기
          • Oenomel
            윈도우 cmd 가 아니라 리눅스 터미널 상에서 하신 것 같습니다
          • 베타로그
            파일제어 트러블 슈팅 영상에서 사용하신 프로그램이 뭔가요?

            cmd로 하려고 하니까 표시가 안되네요.
          • 패션테러리스트
            file_get_contents함수를 사용할 때 서버안에 있는 파일은 제어가 쉬운 반면에 네트워크를 이용한 데이터 읽어오기에서 위의 함수를 사용할 경우 warning이 발생 될 수 있습니다. 이때에는 php.ini파일을 수정해 주어야 합니다.
            (자세한건 구글에서 file_get_contents로 검색해보시면 많이 나와있습니다.^^) 그러나 php.ini파일을 수정해준다는건 보안상 안전하지 못하다고 합니다.
            네트워크를 이용하여 데이터를 가져올때 (이것을 파싱(parsing)이라고 합니다.) 위의 경고때문에 하기 어려우신 분들이 계시다면 Snoopy를 사용해보시기를 추천합니다.
          버전 관리
          egoing
          현재 버전
          선택 버전
          graphittie 자세히 보기