>  기사  >  백엔드 개발  >  PHP---파일 업로드 및 다운로드

PHP---파일 업로드 및 다운로드

WBOY
WBOY원래의
2016-08-08 09:27:47798검색

http://www.cnblogs.com/lazycat-cz/p/4113037.html에서 재인쇄

안전성능---미흡한 수준╮(╯_╰)╭

파일 업로드--->로컬 파일을 서버에 업로드하는 것입니다. (HTTP 프로토콜을 학습해야 함)먼저 업로드된 파일을 로컬에서 선택합니다. 서버에 업로드한 후 서버에서 몇 가지 처리를 해야 합니다. 이를 위해 클라이언트와 서버 모두 몇 가지 설정을 해야 합니다.

(클라이언트) 파일 업로드의 가장 기본적인 방법은 양식을 통해 파일을 POST하고 코드를 먼저 붙여넣는 것입니다.

<html>
<body>

<form action="upload_file.php" method="post"  enctype="multipart/form-data">
<label <span>for</span>="file">选择文件:</label>
<input type="file" name="uploadFile" /> <br /><br><input type="submit" name="submit" value="上传" /> </form> </body> </html>

태그의 enctype 속성은 양식을 제출할 때 사용할 콘텐츠 유형을 지정합니다. 양식에 파일 콘텐츠와 같은 바이너리 데이터가 필요한 경우 "multipart/form-data"를 사용하세요.

태그의 type="file" 속성은 입력이 파일로 처리되어야 함을 지정합니다. 예를 들어 브라우저에서 미리 볼 때 입력 상자 옆에 찾아보기 버튼이 표시됩니다.

(서버) 서버에 업로드된 파일은 아직 처리 과정이 필요합니다. php에서는 $_POST가 post로 전달된 데이터를 저장하고, 업로드된 파일의 관련 정보는 $_FILES에 저장됩니다.

<?<span>php
    </span><span>echo</span> '_FILES: <pre class="brush:php;toolbar:false">'<span>;
</span><span>//</span><span><pre class="brush:php;toolbar:false"> 标签的一个常见应用就是用来表示计算机的源代码。</span>
    <span>print_r</span>(<span>$_FILES</span><span>);
      
    </span><span>echo</span> '_POST: <pre class="brush:php;toolbar:false">'<span>;
    </span><span>print_r</span>(<span>$_POST</span><span>);
</span>?>

_FILES[]는 2차원 배열입니다. array[uploadFile] 키 이름은 type="file" 태그의 이름 값에 따라 달라집니다. 이 컨트롤의 업로드된 파일 정보를 표시하므로 여러 업로드 컨트롤을 배치하고 다른 이름을 설정할 수도 있습니다. 물론 . 오류는 오류를 의미합니다. 여러 상황이 있습니다. 0: 오류 없음, 업로드가 성공했습니다. 1: 파일이 PHP 구성 지침의 upload_max_filesize에 지정된 크기를 초과했습니다. 2: 파일이 HTML 형식의 MAX_FILE_SIZE에 지정된 크기를 초과했습니다. : 파일이 일부만 업로드됩니다. 4: 업로드된 파일이 없습니다. (사이즈 문제는 아직 명확하지 않으니 ╮(╯_╰)╭ 일단 설명은 생략하겠습니다)

<?<span>php
    </span><span>$typeWhiteList</span> = <span>array</span>('txt', 'doc', 'php', 'zip', 'exe');   <span>//</span><span> 类型白名单,过滤不允许上传的文件类型</span>
    <span>$max_size</span> = 1000000;  <span>//</span><span> 大小限制 为1M</span>
    <span>$upload_path</span> = 'D:/WAMP';    <span>//</span><span> 指定移至的目录
     
    // 1、判断是否成功上传到服务器 </span>
    <span>$error</span> = <span>$_FILES</span>['uploadFile']['error'<span>];
    </span><span>if</span>(<span>$error</span> > 0<span>){
         </span><span>switch</span>(<span>$error</span><span>){
             </span><span>case</span> 1: <span>exit</span>('超过php配置的最大文件上传限制'<span>);
             </span><span>case</span> 2: <span>exit</span>('超过HTML表单的最大文件上传限制'<span>);
             </span><span>case</span> 3: <span>exit</span>('文件只有部分被上传'<span>);
             </span><span>case</span> 4: <span>exit</span>('没有上传任何文件'<span>);
             </span><span>default</span>: <span>exit</span>('未知类型错误'<span>);
         }
    }
     
    </span><span>//</span><span> 2、判断是否为允许上传的类型</span>
    <span>$extension</span> = <span>pathinfo</span>(<span>$_FILES</span>['uploadFile']['name'], PATHINFO_EXTENSION); <span>//</span><span> 获取扩展名</span>
    <span>if</span>(!<span>in_array</span>(<span>$extension</span>, <span>$typeWhiteList</span><span>)){
        </span><span>if</span>(<span>$extension</span> == ''<span>)
           </span><span>exit</span>('不允许上传空类型文件'<span>);
         </span><span>else</span> 
           <span>exit</span>('不允许上传'.<span>$extension</span>.'类型文件'<span>);
    } 
     
    </span><span>//</span><span> 3、判断是否为允许大小</span>
    <span>if</span>(<span>$_FILES</span>['uploadFile']['size'] > <span>$max_size</span><span>){
        </span><span>exit</span>('超过了允许上传到的'.<span>$max_size</span>.'字节'<span>);
    }
     
    </span><span>//</span><span> 4、已到指定位置</span>
    <span>$filename</span> = <span>date</span>('Ymd').<span>rand</span>(1000, 9999);   <span>//</span><span> 生成一个新文件名,防止覆盖</span>
    <span>if</span>(<span>is_uploaded_file</span>(<span>$_FILES</span>['uploadFile']['tmp_name'])){   <span>//</span><span> 判断是否通过HTTP POST上传</span>
        <span>if</span>(!<span>move_uploaded_file</span>(<span>$_FILES</span>['uploadFile']['tmp_name'], <span>$upload_path</span>.<span>$filename</span>.'.'.<span>$extension</span><span>)){
            </span><span>exit</span>('无法移动到指定位置'<span>);
         }
         </span><span>else</span><span>{
            </span><span>echo</span> '文件上传成功<br/>'<span>;
            </span><span>echo</span> '文件名: '.<span>$upload_path</span>.<span>$filename</span>.'.'.<span>$extension</span>.'<br>'<span>;
         }
    }
     </span><span>else</span><span>{
         </span><span>exit</span>('文件未通过合法途径上传'<span>);
     }</span>

업로드 완료...........

파일 다운로드---> 단일 파일을 다운로드하려면 태그와 href 속성을 사용하여 리소스 위치를 지정하면 됩니다. 하지만 이 방법은 브라우저가 기본적으로 인식할 수 없는 MIME 유형만 처리할 수 있습니다. (MIME 세부 정보는 wikipedia http://zh.wikipedia.org/wiki/%E5%A4%9A%E7%94%A8%E9%에 첨부되어 있습니다. 80 %94%E4%BA%92%E8%81%AF%E7%B6%B2%E9%83%B5%E4%BB%B6%E6%93%B4%E5%B1%95)

<html>
    <head>
             <title>donwload <span>file</span></title>
             <meta http-equiv="Content-Type" content="text/html"; charset="utf-8" />
    </head>
    <body>
             <a href="resource/header.txt"><span>header</span>.txt</a><br/>
             <a href="resource/php.zip">php.zip</a><br/>
             <a href="resource/pic.ico">pic.ico</a>
           
    </body>
</html>

브라우저에서 인식되지 않는 이러한 유형의 파일의 경우 링크를 클릭하면 직접 다운로드할 수 있는 상자가 나타납니다. 일부 브라우저에서는 텍스트, txt, jpg 및 기타 유형의 파일을 직접 다운로드할 수도 있습니다. 기본적으로 브라우저에서 인식되는 파일 중, 위의 header.txt, pic.ico와 같이 한번 클릭하면 페이지에 바로 표시됩니다. 페이지에 표시하지 않고 다운로드하는 방법은 헤더 기능을 사용하는 것입니다.

헤더 기능은 헤더 정보를 전송하여 알려드립니다. 파일을 클릭하면 다운로드되도록 첨부파일로 처리해주세요. (아직 잘 이해가 안가는데, 다 이해되면 추가하겠습니다╮(╯_╰)╭)

아~                                                                                                                                                                                 

다시 한번 재인쇄 주소 http://www.cnblogs.com/lazycat-cz/p/4113037.html

위 내용은 PHP---파일 업로드 및 다운로드에 대한 내용을 소개하고 있으며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.