PHP 파일 업로드

업로드 기능을 성공적으로 구현하려면 먼저 php.ini에서 파일 업로드를 활성화하고 일부 매개변수에 대해 적절한 설정을 해야 합니다. 파일 업로드 항목을 찾으면 아래 세 가지 속성이 있음을 확인할 수 있습니다.

file_upload: 값이 on이면 서버가 파일 업로드를 지원한다는 의미입니다. 그렇지 않은 경우

upload_tmp_dir: 파일 업로드를 위한 임시 디렉터리입니다. 파일이 성공적으로 업로드되기 전에 파일은 먼저 서버의 임시 디렉터리에 저장됩니다. 위치를 알고 싶다면 나중에 저장 경로를 설정하면 됩니다. 그렇지 않으면 시스템 기본 디렉터리

upload_max_filesize: 서버에서 업로드할 수 있는 최대 파일 크기(MB)입니다. 시스템 기본값은 2MB로 사용자가 직접 설정 가능

★ 통합 설치 패키지를 이용하여 PHP 개발 환경을 구성하면 위에서 소개한 구성 정보가 기본으로 구성되어 있습니다.


파일 업로드 단계

PHP를 더 잘 배우려면, 복잡한 PHP 파일 업로드를 6단계로 요약했습니다.

실제 사용 시 다음 6단계를 따르면 PHP 파일 업로드를 성공적으로 완료할 수 있습니다.

1. 오류 코드가 있는지 확인

시스템에서 반환된 오류 코드에 대한 자세한 설명:


오류 코드 설명
0 맞습니다. 후속 파일 업로드 작업을 계속할 수 있습니다.


1

업로드 최대 한도를 초과했습니다. PHP에서는 upload_max_filesize = 2M로 설정되어 있습니다. ini, 일반적으로 기본값은 2M입니다. 프로젝트 실제 필요에 따라 수정 가능

                                                                                     

지정된 파일 크기를 초과했습니다. 프로젝트의 비즈니스 요구에 따라 업로드되는 파일의 크기 제한을 지정하세요.
3일부 파일만 해당되었습니다. 업로드됨
     4文件没有被上传
     6找不到临时文件夹,可能目录不存在或没权限
     7文件写入失败,可能磁盘满了或没有权限
4<🎜><🎜>파일이 업로드되지 않았습니다<🎜 ><🎜> <🎜><🎜> 6<🎜><🎜>임시 폴더를 찾을 수 없습니다. 디렉터리가 없거나 권한이 없습니다.<🎜><🎜><🎜><🎜> 7<🎜>< 🎜>파일 쓰기 실패, 디스크가 꽉 찼거나 권한이 없을 수 있습니다 <🎜><🎜><🎜><🎜>

참고★: 오류 코드에 5가 없습니다


2. 사용자 정의 업로드 기능을 개발하면서 파일 크기 범위가

을 초과했는지 여부를 판단합니다. 개발자로서 우리는 php.ini에 지정된 최대 업로드 값 외에도

우리는 일반적으로 기업에서 지정한 업로드 크기 제한인 값도 설정합니다.

예:

Sina Weibo 또는 QQ Zone은 단일 아바타 사진에 2M만 허용합니다. 앨범 업로드 시 2M 이상 업로드 가능합니다.

따라서 해당 시스템은 더 큰 파일 업로드를 지원합니다.

여기서 판단된 파일 크기는 실제 비즈니스에서 지정하려는 업로드 파일 크기를 제한하는 데 사용됩니다.


3. 접미사 이름과 MIME 유형이 일치하는지 확인합니다.

MIME(Multi Purpose Internet Mail Extensions)은 다목적 인터넷 메일 확장자 유형입니다. 특정 확장자를 가진 파일을 애플리케이션에서 열도록 설정하는 방식입니다. 확장자를 가진 파일에 접근하면 브라우저가 자동으로 지정된 애플리케이션을 사용하여 해당 파일을 엽니다. 주로 일부 클라이언트 정의 파일 이름과 일부 미디어 파일 열기 방법을 지정하는 데 사용됩니다.

접미사와 MIME 유형을 결정할 때 두 개의 매개변수를 전달하는 PHP 함수 in_array()를 사용합니다.

첫 번째 매개변수는 판단할 값이고,

두 번째 매개변수는 범위 배열입니다.

이 기능을 사용하여 파일 확장자와 MIME 유형이 허용 범위 내에 있는지 확인합니다.


4. 파일명 생성

파일이 성공적으로 업로드되었지만 원본 이름은 저장되지 않습니다.

원래 이름에 민감한 키워드를 포함하는 일부 사람들은 우리나라 관련 법규를 위반하게 되기 때문입니다.


date(), mt_rand() 또는 Unique()를 사용하여 임의의 파일 이름을 생성할 수 있습니다.


5. 파일 업로드 여부를 확인합니다.
파일이 성공적으로 업로드되었지만 원본 이름은 저장되지 않습니다.

원래 이름에 민감한 키워드를 포함하는 일부 사람들은 우리나라 관련 법규를 위반하게 되기 때문입니다.


date(), mt_rand() 또는 Unique()를 사용하여 임의의 파일 이름을 생성할 수 있습니다. 파일 업로드가 성공하면 시스템은 업로드된 임시 파일을 시스템의 임시 디렉터리에 업로드합니다. 임시 파일을 만듭니다.

임시 파일명도 생성됩니다. 우리가 해야 할 일은 임시 파일을 시스템의 지정된 디렉터리로 이동하는 것입니다.

이동하기 전에 맹목적으로 움직이지 않거나, 잘못 움직이는 것은 비과학적입니다. 이동하기 전에 업로드된 파일이 임시 파일인지 확인하기 위해 관련 기능을 사용해야 합니다.

is_uploaded_file()은 전달된 이름이 업로드된 파일인지 확인하기 위해 매개변수($_FILES에 캐시된 파일 이름)를 전달합니다.


6. 임시 파일을 지정된 디렉터리로 이동합니다.

임시 파일은 실제 임시 파일이므로 당사 디렉터리로 이동해야 합니다. 웹사이트 디렉토리 아래에 있습니다.

우리 웹사이트 디렉토리의 데이터를 다른 사람들이 접근할 수 있도록 하십시오.

우리는 move_uploaded_file()을 사용합니다.
업로드된 파일을 지정된 위치로 이동하고 이름을 지정하는 기능입니다.
두 개의 매개변수를 전달합니다.
첫 번째 매개변수는 이동할 업로드된 파일입니다.
두 번째 매개변수는 지정된 폴더와 이름이 연결된 문자열입니다.

파일을 업로드하려면 웹페이지에서 양식을 작성해야 합니다. 다음과 같습니다

<!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>PHP中文网</title>
 </head>
 <body>
 
 <form action="file.php" method="post" enctype="multipart/form-data">
     <input type="file" name="file">
     <input type="submit" value="上传">
 </form>
 
 </body>
 </html>

참고:

1. 양식 양식의 매개변수 메소드는 반드시 post이어야 합니다. get인 경우 파일 업로드를 수행할 수 없습니다

2. enctype은 multipart/form-dat이어야 합니다

3. type=file을 선택한 경우 기본값은 파일 내용을 업로드하는 것입니다. .

위 양식으로 제출한 파일 내용은 file.php를 가리킵니다.

file.php의 PHP 코드를 통해 업로드된 파일을 처리합니다.

업로드할 사진 이름을 선택합니다. 사진 이름이 .jpg라고 가정하고 업로드하려면 클릭하세요.

PHP는 파일 데이터를 위한 특별한 시스템 함수 $_FILES를 준비했습니다. 업로드된 파일의 모든 관련 데이터는 이 시스템 함수에 저장됩니다.

PHP 파일에서 $_FILES를 인쇄하여 이 배열의 구조를 관찰합니다.

 <?php
//var_dump()或print_r()
//打印变量的相关信息,将变量的信息详细的展示出来
var_dump($_FILES);
?>

프로그램 실행 결과:

array(1) {
["file"]=>
array(5) {
["name"]=>
string(7) "psu.jpg"
["type"]=> ;
문자열(10) "image/jpeg"
["tmp_name"]=>
문자열(22) "C:WindowsphpE2F1.tmp"
["error"]=>
int(0)
["size"]=>
int(488929)
}
}

인쇄된 결과의 배열 구조는 다음과 같습니다.

배열(크기=1)
'파일' =>
배열(크기=5)
//파일 이름
'이름' => 문자열 'psu .jpg' (길이=7)
//파일의 MIME 유형
'type' => string 'image/jpeg' (길이=10)


// 캐시 파일, 업로드된 사진은 여기에 저장됩니다
'tmp_name' => string 'E:wamptmpphpC32A.tmp' (길이=23)
// 오류 코드, 자세한 내용은 위의 오류 코드 소개를 참조하세요
' error' => 정수 0                                                                                                                                                                       🎜>


알겠습니다 위의 배열 구조입니다.

파일 처리 프로세스를 시작할 수 있습니다

.

첫 번째 단계는 오류 코드를 확인하는 것입니다

<?php
header("Content-type:text/html;charset=utf-8");
if($_FILES['file']['error'] > 0){
    switch ($_FILES['file']['error']) {    //错误码不为0,即文件上传过程中出现了错误
        case '1':
            echo '文件过大';
            break;
        case '2':
            echo '文件超出指定大小';
            break;
        case '3':
            echo '只有部分文件被上传';
            break;
        case '4':
            echo '文件没有被上传';
            break;
        case '6':
            echo '找不到指定文件夹';
            break;
        case '7':
            echo '文件写入失败';
            break;
        default:
            echo "上传出错<br/>";
    }
}else{
    echo "上传成功";//错误码为0,即上传成功,可以进行后续处理,处理流程见下文
}
?>

위 코드는 자세히 소개 오류 코드와 해당 오류를 알면 오류 코드를 기반으로 정확한 오류 프롬프트를 생성할 수 있습니다.


두 번째 단계는 파일이 크기를 초과하는지 확인하는 것입니다.

실제 프로젝트에서는 시스템 하드웨어 제한, 저장 장치 제한으로 인해 사용자가 제한 없이 파일을 업로드하는 것이 불가능하므로 제한을 가해야 합니다. 사용자 업로드된 파일 크기가 제한되어 있습니다. 적절한 제한 크기를 정의하면

애플리케이션이 더욱 안정적으로 실행될 수 있습니다.

<?php
header("Content-type:text/html;charset=utf-8");
if($_FILES['file']['error'] > 0){
    //有错误可停止执行
}else {
    //当前上传文件无误,运行本段代码
    //判断文件是否超出了指定的大小
    //单位为byte
    $MAX_FILE_SIZE = 100000
    if ($_FILES['file']['size'] > $MAX_FILE_SIZE) {
        //判断,如果上传的文件,大小超出了我们给的限制范围,退上传并产生错误提示
        exit("文件超出指定大小");
    }
}
?>

우리가 지정하는 파일 크기를 $MAX_FILE_SIZE로 정의합니다. 이 변수의 계산 단위는 업로드된 파일의 $_FILES['file']['size'] 크기에 해당하는 바이트입니다. . 샘플 코드에서는 약 100K 이하의 파일 크기가 제한됩니다.

세 번째 단계는 파일의 MIME 형식이 올바른지 확인하는 것입니다.

우리의 파일 업로드 기능은 사용자가 업로드한 파일이 요구 사항을 충족하는지 확인해야 하는 경우가 많으며, 사용할 수 없는 파일을 업로드한 후에는 온라인 애플리케이션의 전반적인 표시 효과가 영향을 받습니다. 악영향을 미치게 됩니다. 그래서 통과해야 합니다

MIME 유형과 접미사 이름을 사용하여 사용자가 업로드한 파일이 요구 사항을 충족하는지 확인하세요.

아래 예제 코드에서는 현재 프로젝트 요구 사항이 업로드된 이미지를 지정하는 것으로 가정하고 사용자가 요구 사항을 충족하지 않는 파일을 업로드하는 경우 접미사 GIF 또는 jpg가 포함된 파일을 업로드해야 합니다. 오류 메시지가 반환됩니다.

/* 접미사 이름과 MIME 유형이 지정된 요구 사항을 충족하는지 확인

예:
현재 프로젝트에서는 접미사가 .jpg 또는 .gif인 이미지를 업로드하도록 지정합니다. , $allowSuffix = array ('jpg','gif');
*/


//허용되는 접미사 이름 배열 정의
$myImg =explore('.', $_FILES['file' ; $myImg에 저장되며, 파일 접미사는 배열의 마지막 값입니다.
*/


$myImgSuffix = array_pop($myImg);

/*
업로드된 파일 이름을 기준으로 파일의 접미사 이름을 가져옵니다
in_array() 함수를 사용하여 업로드된 파일이 요구 사항을 충족하는지 확인
파일 접미사 이름이 범위 내에 있지 않은 경우 허용 범위인 경우 업로드를 종료하고 오류 메시지를 반환합니다
*/

if(!in_array($myImgSuffix, $allowSuffix)){                                                           및 파일 우리는 다양한 방법을 통해 접미사 이름의 해당 관계를 쿼리할 수 있습니다. 사용자가 파일 접미사 이름을 수정하고 파일을 사용할 수 없게 되는 것을 방지하기 위한 것입니다.
MIME 유형도 제한해야 합니다. 이는 업로더가 파일 접미사
를 직접 수정하여 파일을 사용할 수 없거나 업로드된 파일이 요구 사항을 충족하지 못하는 것을 방지하기 위한 것입니다.
*/

//배열의 내용은 업로드가 허용된 MIME 유형입니다.
$allowMime = array(
"image/jpg",
"image /jpeg",
"이미지/pjpeg",
"이미지/gif"
);


if(!in_array($_FILES['file']['type '], $allowMime)) {                               // 업로드된 파일의 MIME 유형이 허용 범위 내에 있는지 확인
                                        >


네 번째 단계는 지정된 경로와 파일 이름을 생성하는 것입니다.

프로젝트의 파일 배열에 따라 파일 저장 경로를 생성합니다. 파일 이름이 중복되어 발생하는 오류를 방지하기 위해 특정 파일 이름에 따라 임의의 파일 이름이 생성됩니다. 체재.

프로젝트의 파일 배열에 따라 파일 저장 경로를 생성하세요. 파일 이름이 중복되어 발생하는 오류를 방지하려면 특정 형식에 따라 파일 이름을 무작위로 생성하세요.

//업로드 폴더 지정
$path = "upload/images/";

/*
현재 시간을 기준으로 임의의 파일 이름을 생성하고, 이 코드 줄은 현재 시간 + 0~9 사이의 임의의 숫자를 사용하여 파일 이름을 형성하며 접미사는 이전에 얻은 파일 접미사 이름입니다.
*/

$name = 날짜 ('Y').date('m').date("d").date('H').date('i').date('s').rand(0,9).'. '.$myImgSuffix;


다섯 번째 단계는 파일이 업로드되었는지 확인하는 것입니다.

is_uploaded_file() 함수는 대상 파일이 업로드된 파일인지 확인하는 전용 함수입니다.

<?php

//is_uploaded_file()을 사용하여 업로드된 파일인지 확인합니다. 기능 소개는 위
를 참조하세요. (is_uploaded_file($ _FILEs['file']['tmp_name'])){

}
?>


6단계, 파일을 지정된 위치로 이동합니다.

move_uploaded_file() 함수를 사용하여 파일을 지정된 위치로 이동하고 이름을 지정합니다. Linux 시스템에는 대상 디렉터리에 대한 권한이 있고 디스크 공간이 충분한지 여부가 충분하지 않으면 업로드 작업이 실패합니다.

/*
업로드된 파일을 지정된 위치로 이동하려면 move_uploaded_file()을 사용하세요. 첫 번째 매개변수는 업로드된 파일이고, 두 번째 매개변수는 앞서 지정한 업로드 경로와 이름입니다. " 업로드 성공";                                                                                                     ~ >                              echo '업로드된 파일이 아님' 사용


자세한 내용은 예시 1 참조





다중 파일 업로드



PHP에서 단일 파일을 업로드하는 과정을 소개합니다. 그러나 때로는 사용 편의성을 위해 여러 파일을 동시에 업로드해야 하는 경우도 있습니다. 다중 파일 업로드의 원리는 동일하지만, 데이터 처리 시 업로드된 데이터를 특수하게 처리해야 합니다.

<!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>PHP中文网</title>
 </head>
 <body>
 <html>
 <body>
 <form action="morefile.php" method="post" enctype="multipart/form-data">
     <input type="file" name="file[]">
     <input type="file" name="file[]">
     <input type="submit" value="上传">
 </form>
 </body>
 </html>
 </body>
 </html>

여기는 간단한 업로드 페이지가 있으며, 양식에서는 두 개의 파일을 동시에 제출합니다. 이 페이지를 통해 콘텐츠를 제출할 수 있습니다.

참고:

1. input type="file" name="file[]" 이전과 비교하여 파일 뒤에 대괄호가 추가로 있습니다.

2. input type="file" name="file[]" 2개 이상 작성

배열 구조는 다음과 같습니다

배열(크기=1)
'파일' =>
배열(크기=5)
'이름' => >                                           > 배열(크기 =2)
0 => string 'image/jpeg' (길이=10)
1 => string 'image/jpeg' (길이=10)
//캐시 파일
'tmp_name ' => = > 문자열 'E:wamptmpphpF6F5.tmp' (길이=23)
//파일 오류 메시지
'error' =>
배열(크기=2)
0 = > int 0
1 => int 0
//파일 크기
'size' => 배열(크기=2)
0 => 1 => int 151651



두 파일이 배열로 저장되어 있는 것을 확인할 수 있으며, 키 이름은 업로드한 파일과 동일합니다. 따라서 두 파일에서 각각 필요한 데이터를 검색하려면 for() 루프를 사용해야 합니다.

두 파일의 데이터가 동시에 $_FILES에 저장됩니다. 단일 파일의 정보를 읽어서 원하는 위치로 파일을 이동하려면 간단한 루프를 사용해야 합니다.

for ($i=0; $i < count($_FILE['file']['name']); $i++) {

/*
is_uploaded_file 사용 () 함수는 파일이 업로드되었고
오류가 없는지 확인합니다
*/

if(is_uploaded_file($_FILEs['file']['tmp_name'][$i]) && $_FILEs[ 'file']['error'][$i] == 0){  
  if(move_uploaded_file($_FILEs['file']['tmp_name'][$i],'upload/' .$_FILE[ 'file']['name'][$i])){
//move_uploaded_file() 함수를 사용하여 파일을 지정된 위치로 이동하고 파일의 원래 이름을 사용합니다
echo "업로드 성공";

                                                                            🎜> }

}



자세한 판단 과정은 단일파일 업로드를 참고해주세요. 여기에서 만들어지며 파일 크기와 형식에 대한 알림은 없습니다.




예시 1

이미지 프로그램 업로드


프로그램 1 html 페이지

<!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>PHP中文网</title>
 </head>
 <body>
 
 
 <form action="file-upload.php" enctype="multipart/form-data" method="post" name="uploadfile">
     上传文件:<input type="file" name="upfile" /><br>
     <input type="submit" value="上传" /></form>
 </form>
 
 </body>
 </html>
프로그램 2

php 페이지에 제출

<?php
 header("Content-type:text/html;charset=utf-8");
 //print_r($_FILES["upfile"]); 
 if(is_uploaded_file($_FILES['upfile']['tmp_name'])){
     $upfile=$_FILES["upfile"];
 //获取数组里面的值 
     $name=$upfile["name"];//上传文件的文件名
     $type=$upfile["type"];//上传文件的类型
     $size=$upfile["size"];//上传文件的大小
     $tmp_name=$upfile["tmp_name"];//上传文件的临时存放路径
 //判断是否为图片 
     switch ($type){
         case 'image/pjpeg':$okType=true;
             break;
         case 'image/jpeg':$okType=true;
             break;
         case 'image/gif':$okType=true;
             break;
         case 'image/png':$okType=true;
             break;
     }
 
     if($okType){
         /**
          * 0:文件上传成功<br/>
          * 1:超过了文件大小,在php.ini文件中设置<br/>
          * 2:超过了文件的大小MAX_FILE_SIZE选项指定的值<br/>
          * 3:文件只有部分被上传<br/>
          * 4:没有文件被上传<br/>
          * 5:上传文件大小为0
          */
         $error=$upfile["error"];//上传后系统返回的值
         echo "上传文件名称是:".$name."<br/>";
         echo "上传文件类型是:".$type."<br/>";
         echo "上传文件大小是:".$size."<br/>";
         echo "上传后系统返回的值是:".$error."<br/>";
         echo "上传文件的临时存放路径是:".$tmp_name."<br/>";
 
         echo "开始移动上传文件<br/>";
 //把上传的临时文件移动到指定目录下面
         move_uploaded_file($tmp_name,'D:\upload/images/'.$name);
         $destination="D:\upload/images/".$name;
 
         echo "上传信息:<br/>";
         if($error==0){
             echo "文件上传成功啦!";
 
         }elseif ($error==1){
             echo "超过了文件大小,在php.ini文件中设置";
         }elseif ($error==2){
             echo "超过了文件的大小MAX_FILE_SIZE选项指定的值";
         }elseif ($error==3){
             echo "文件只有部分被上传";
         }elseif ($error==4){
             echo "没有文件被上传";
         }else{
             echo "上传文件大小为0";
         }
     }else{
         echo "请上传jpg,gif,png等格式的图片!";
     }
 }
 ?>
찾기 사진을 업로드하고 프로그램 실행 결과를 확인하세요

예제 2

이 예에는 4개의 파일 업로드 도메인이 있습니다. 도메인 이름은 u_file[]이며, 제출 후 업로드된 파일 정보는 $_FILES[u_file]에 저장되어 다차원 배열을 생성합니다. 어레이 정보를 읽고 파일을 업로드합니다.


프로그램 1 html 페이지

<!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>PHP中文网</title>
 </head>
 <body>
 <html>
 <body>
 <p>请选择要上传的文件</p>
 <form action="morefile.php" method="post" enctype="multipart/form-data">
   <table border="1" bgcolor="f0f0f0">
       <tr>
           <td>上传文件</td>
           <td><input type="file" name="u_file[]"></td>
       </tr>
       <tr>
           <td>上传文件</td>
           <td><input type="file" name="u_file[]"></td>
       </tr>
       <tr>
           <td>上传文件</td>
           <td><input type="file" name="u_file[]"></td>
       </tr>
       <tr>
           <td>上传文件</td>
           <td><input type="file" name="u_file[]"></td>
       </tr>
       <tr>
           <td colspan="2"><input type="submit" value="上传"></td>
       </tr>
 
   </table>
 </form>
 </body>
 </html>
 </body>
 </html>
프로그램 2 php 페이지에 제출
<?php
header("Content-type:text/html;charset=utf-8");
if(!empty($_FILES[u_file][name])){           //判断遍历$_FILES是否为空
    $file_name=$_FILES[u_file][name];         //将上传文件名另存为数组
    $file_tmp_name=$_FILES[u_file][tmp_name];      //将上传的临时文件名另存为数组
    for($i=0;$i<count($file_name);$i++){         //循环上传文件
        if($file_name[$i]!=""){                 //判断上传文件名是否为空
            move_uploaded_file($file_tmp_name[$i],$i.$file_name[$i]);
            echo "文件" .$file_name[$i] ."上传成功。更名为"."$file_name[$i]"."<br>";
        }
    }
}
?>
프로그램을 실행하고 살펴보세요

예제 3


이 예는 1MB 이하의 파일 업로드를 허용하는 양식을 업로드합니다.

<from action="" method="POST" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit" value="上传">
</from>
<?php
if(!empty($_FILES[file][name])){      //判断是否有文件上传
    $fileinfo=$_FILES[file];         //将文件信息赋给变量$fileinfo
    if($fileinfo['size']<1000000 && $fileinfo['size']>0){         //判断文件大小
        echo "上传成功";
    }else{
        echo "上传文件太大或未知";
    }
}
?>
프로그램을 실행하세요.

지속적인 학습
||
<from action="" method="POST" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submit" value="上传"> </from> <?php if(!empty($_FILES[file][name])){ //判断是否有文件上传 $fileinfo=$_FILES[file]; //将文件信息赋给变量$fileinfo if($fileinfo['size']<1000000 && $fileinfo['size']>0){ //判断文件大小 echo "上传成功"; }else{ echo "上传文件太大或未知"; } } ?>
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!