php) File IO 업로드/다운로드

fopen() 

인자구분 설명
r 파일을 읽기전용 모드로 연다
w 파일을 쓰기전용 모드로 연다 (기존 파일의 내용은 모두 삭제)
a 파일을 쓰기전용 모드로 연다 (기존 파일의 내용이 유지)
파일포인터는 기존 파일내용의 맨 끝에 위치
x 새로운 파일을 쓰기전용 모드로 연다(같은 이름의 파일이 있을경우 False 또는 error 를 발생)
r+ 파일을 읽거나 쓸 수 있는 모드로 연다(파일포인터는 맨 처음에 위치)
w+ 파일을 읽거나 쓸 수 있는 모드로 연다(기존 파일의 내용은 삭제)
a+ 파일을 읽거나 쓸 수 있는 모드로 연다(기존 파일 내용은 유지)
x+ 새로운 파일을 읽기/쓰기 모드로 연다( 기존에 파일이 있을경우 False/error 발생

 

<?php
$data = "";
// 파일 쓰기
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $data = $_POST["data"];
    try {
        // 파일이 있는 경우는 if의 안으로 들어가고 없는 경우는 fopen을 실행하지 않는다
        if (@$handle = fopen('data.txt', 'a')) {
            fwrite($handle, $data . "\r\n");
        }
    } catch (Exception $e) {
        print_r($e);
    } finally{
        // I/O 리소스는 반드시 close를 해야한다.
        @fclose($handle);
    }
}
?>
<!DOCTYPE html>
<html>
<head>
    <title>title</title>
</head>
<body>
<form method="POST">
    <input type="text" name="data" value="<?=$data?>">
    <input type="submit">
</form>
<?php
$fname = "data.txt";
echo file_get_contents($fname)."<br>";
$fp = fopen($fname, "r");
echo fread($fp, filesize($fname))."<br>";
$fp = fopen($fname, "r");
echo stream_get_contents($fp, filesize($fname));  // mmap 기반
echo "<br>";
$fp = fopen($fname, "r");
    while(!feof($fp)){
        echo fgets($fp)."<br/>";
    }
fclose($fp);
?>

업로드/다운로드

upload.php

<form method="post" action="uplpad_result.php" enctype="multipart/form-data">
    <input type="file" name="upload"><hr>
    <input type="text" name="title"><br>
    <input type="textarea" name="content">
    <input type="submit" value="send">
</form>

upload_result.php

<?php
$uploadfile = $_FILES['upload']['name'];
$fPath="./uploads";
if(move_uploaded_file($_FILES['upload']['tmp_name'],"$fPath/$uploadfile")){
    echo "title : {$_POST['title']}<br>";
    echo "content : {$_POST['content']}<br>";
    echo "<img src =$fPath/{$_FILES['upload']['name']}> <p>";
    echo "1. file name : {$_FILES['upload']['name']}<br/>";
    echo "2. file type : {$_FILES['upload']['type']}<br/>";
    echo "3. file size : {$_FILES['upload']['size']} byte <br />";
    echo "4. temporary file size : {$_FILES['upload']['size']}<br />";
} else {
    echo "파일 업로드 실패 !! 다시 시도해주세요.<br />";
}
?>
<a href="down.php?file=<?php echo "{$_FILES['upload']['name']}"; ?>">다운받기</a>

down.php

<?php

$req = $_GET['file'];
echo $req;
$file = './uploads/$req'; // 파일의 전체 경로
$file_name = $req ; // 저장될 파일 이름

header('Content-type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . $file_name . '"');
header('Content-Transfer-Encoding: binary');
header('Content-length: ' . filesize($file));
header('Expires: 0');
header("Pragma: public");

$fp = fopen($file, 'rb');
fpassthru($fp);
fclose($fp);

?>

'php' 카테고리의 다른 글

php) mysql 연동 insert, select, update, delete (CRUD)  (0) 2022.03.02
php) Cookie / Session  (0) 2022.02.28
php) 클래스, 함수, 생성자, array를 활용한 CRUD  (0) 2022.02.26
php) 배열  (0) 2022.02.26
php) 연산자, 반복문  (0) 2022.02.25
Comment