ホームページ >バックエンド開発 >PHPチュートリアル >PHP はファイルのアップロードとダウンロードを実装します - ただ忙しいだけです、_PHP チュートリアル

PHP はファイルのアップロードとダウンロードを実装します - ただ忙しいだけです、_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-12 08:57:30931ブラウズ

PHP を使用したファイルのアップロードとダウンロード - ただ忙しいだけです、

今週は何も書いていません。そう、この 1 週間で運転以外はあまり新しいことを学んでいません。

くそー、毎日正午に車の運転を習いに行くのに、2週間も昼寝をしないのは、その後の仕事のプレッシャーと相まって、とても憂鬱だ。

でも、それは私がそこまで辛さに耐えられないからかもしれません。その日私が見た文章は何と言っていたでしょうか?私は単純さと難しさの間で前者を選んだ自分が嫌いです。バラバラはあまりチキンスープではありませんが、少し気取って気難しいことをしないようにしたいと思います。 。

PHP はファイルのアップロードとダウンロードを実装します - mooc.com から

1. アップロードの原理と構成

1.1原則

クライアント ファイル をサーバー にアップロードし、サーバー側のファイル (一時ファイル) を指定されたディレクトリ に移動します。

1.2 クライアント構成

必須: フォームページ (アップロードファイルを選択);

具体的には:

送信方法はPOST、enctype="multipart/form-data"属性を追加、どちらも必須です(ただし、メリットとデメリットが共存します。ここではアップロード方法やアップロード後の呼び出しなども制限します) .、これについては後で説明します) リーリー

1 つ目はフォーム ページ (フロントエンドの問題は自動的に無視してください...)、キーはフォームの属性です。もう 1 つは

input での type="file" の使用です (強力な拡張を反映しています)。 PHPなど)。

その後、アクションを実行します

リーリー

まずはprint_r($_FILES)の情報を見てみましょう リーリー

得られるのは 2 次元配列です。その使用方法はすべて基本的なものです (実際には、次元を削減してから使用するのが好きです)。

基本的には一目で理解できる内容であり、冗長ではありません。重要な点は 2 つあります:

tmp_name 一時ファイル名 (コード名。後で使用できます)

; 次に、エラー情報を使用してユーザーにフィードバックする doAction の最後の部分を見てみましょう。説明する必要があるのは、エラーが報告される理由とエラー情報の内容です。

1.3 エラー報告について

--エラーの理由

基本的に、ファイルをアップロードするためのサーバーの設定を超えているか、準拠していません。では、サーバー側の 設定 は何でしょうか?

まず、私たちが使用したものをアップロードすることを検討してください?投稿、アップロード それでは、php.ini で次のいくつかの項目を探してください:

ファイルアップロード:オン

upload_tmp_dir=——一時ファイル保存ディレクトリ

upload_max_filesize=2M

max_file_uploads=20 - 一度にアップロードできるファイルの最大数 (上記との違いに注意してください。サイズがあるかどうかは考慮しないでください)

post_max_size=8M——post メソッドで送信されるデータの最大サイズ

その他の関連構成

max_exectuion_time=-1—プログラムがサーバー リソースを占有しないようにするための最大実行時間。

max_input_time=60

max_input_nesting_level=64—入力ネストの深さ

memory_limit=128M——単一スレッドの最大独立メモリ使用量

要するに、すべてはリソースの割り当てに関するものです。

-- エラー番号

以下の(怠惰な)引用は http://blog.sina.com.cn/s/blog_3cdfaea201008utf.html からです

UPLOAD_ERR_OK 値: 0; エラーは発生せず、ファイルは正常にアップロードされました。 UPLOAD_ERR_INI_SIZE 値: 1; アップロードされたファイルがphp.iniのupload_max_filesizeを超えています。 オプション制限の値。

UPLOAD_ERR_FORM_SIZE 値: 2; アップロードされたファイルのサイズが HTML フォームのサイズを超えています MAX_FILE_SIZE オプションで指定した値。

アップロード_エラー_部分 値: 3; ファイルの一部のみがアップロードされました。

UPLOAD_ERR_NO_FILE 値: 4; ファイルはアップロードされませんでした。


注: このエラー メッセージは、最初の手順、つまり一時フォルダーにアップロードするときにアップロードされる情報であり、移動またはコピーするときではありません。


2. アップロード関連の制限

2.1 クライアントの制限 リーリー

ここでは、アップロードされるファイルのサイズとタイプを制限するために input 属性が使用されていますが、私の個人的な感覚では、第一に HTML コードが「表示」され、第二に、機能しないことがよくあります (理由は見つかりませんでした)。でも、最初のことのせいで、私もそれをやめたいと思っています、ただそれを知ってください。 2.2 サーバー側の制限事項

主な制限はサイズと種類、もう 1 つは方法です。

リーリー

ここでは、具体的な実装がコメントされています。実際に各ステップを自分で試すことができます。これは非常に興味深いです。

2.3 梱包

機能

リーリー

電話する

リーリー

3. 複数ファイルのアップロードの実装

3.1 単一ファイルのパッケージ化を利用する

リーリー リーリー

这里的思路,从print_r($_FILES)中去找,打印出来看到是个二维数组,很简单,遍历去用就好了! 

上面那个function的定义改一下,给定一些默认值

<span>function</span> uploadFile(<span>$fileInfo</span>,<span>$path</span>="uploads",<span>$allowExt</span>=<span>array</span>('jpeg','jpg','png','tif'),<span>$maxSize</span>=10485760){

 

这样子,简单是简单,但遇到一些问题。

正常的上传4个图片是没问题,但要是中间激活了函数中的exit,就会立即停止,导致其他图片也无法上传。

3.2 升级版封装

旨在实现针对多个或单个文件上传的封装

首先这样子写个静态文件

<span><!</span><span>DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"</span><span>></span>
<span><</span><span>html</span><span>></span>
<span><</span><span>head</span><span>></span>
<span><</span><span>meta </span><span>http-equiv</span><span>="Content-Type"</span><span> content</span><span>="text/html; charset=UTF-8"</span><span>></span>
<span><</span><span>title</span><span>></span>Insert title here<span></</span><span>title</span><span>></span>
<span></</span><span>head</span><span>></span>
<span><</span><span>body</span><span>></span>
<span><</span><span>form </span><span>action</span><span>="doAction5.php"</span><span> method</span><span>="post"</span><span> enctype</span><span>="multipart/form-data"</span><span>></span><span>
请选择您要上传的文件:</span><span><</span><span>input </span><span>type</span><span>="file"</span><span> name</span><span>="myFile[]"</span> <span>/><</span><span>br</span><span>/></span><span>
请选择您要上传的文件:</span><span><</span><span>input </span><span>type</span><span>="file"</span><span> name</span><span>="myFile[]"</span> <span>/><</span><span>br</span><span>/></span><span>
请选择您要上传的文件:</span><span><</span><span>input </span><span>type</span><span>="file"</span><span> name</span><span>="myFile[]"</span> <span>/><</span><span>br</span><span>/></span><span>
请选择您要上传的文件:</span><span><</span><span>input </span><span>type</span><span>="file"</span><span> name</span><span>="myFile[]"</span> <span>/><</span><span>br</span><span>/></span>
<span><</span><span>input </span><span>type</span><span>="submit"</span><span> value</span><span>="上传"</span><span>/></span>
<span></</span><span>form</span><span>></span>
<span></</span><span>body</span><span>></span>
<span></</span><span>html</span><span>></span>

 

打印一下$_FILES

<span>Array
(
    [myFile] => Array
        (
            [name] => Array
                (
                    [0] => test32.png
                    [1] => test32.png
                    [2] => 333.png
                    [3] => test41.png
                )

            [type] => Array
                (
                    [0] => image/png
                    [1] => image/png
                    [2] => image/png
                    [3] => image/png
                )

            [tmp_name] => Array
                (
                    [0] => D:\wamp\tmp\php831C.tmp
                    [1] => D:\wamp\tmp\php834C.tmp
                    [2] => D:\wamp\tmp\php837C.tmp
                    [3] => D:\wamp\tmp\php83BB.tmp
                )

            [error] => Array
                (
                    [0] => 0
                    [1] => 0
                    [2] => 0
                    [3] => 0
                )

            [size] => Array
                (
                    [0] => 46174
                    [1] => 46174
                    [2] => 34196
                    [3] => 38514
                )

        )

)</span>

 

可以得到一个三维数组。

复杂是复杂了,但复杂的有规律,各项数值都在一起了,很方便我们取值!!

所以先得到文件信息,变成单文件处理那种信息

<span>function</span><span> getFiles(){
    </span><span>$i</span>=0<span>;
    </span><span>foreach</span>(<span>$_FILES</span> <span>as</span> <span>$file</span><span>){
        </span><span>if</span>(<span>is_string</span>(<span>$file</span>['name'])){  <span>//</span><span>单文件判定</span>
            <span>$files</span>[<span>$i</span>]=<span>$file</span><span>;
            </span><span>$i</span>++<span>;
        }</span><span>elseif</span>(<span>is_array</span>(<span>$file</span>['name'<span>])){
            </span><span>foreach</span>(<span>$file</span>['name'] <span>as</span> <span>$key</span>=><span>$val</span>){  <span>//</span><span>我的天,这个$key用的diao</span>
                <span>$files</span>[<span>$i</span>]['name']=<span>$file</span>['name'][<span>$key</span><span>];
                </span><span>$files</span>[<span>$i</span>]['type']=<span>$file</span>['type'][<span>$key</span><span>];
                </span><span>$files</span>[<span>$i</span>]['tmp_name']=<span>$file</span>['tmp_name'][<span>$key</span><span>];
                </span><span>$files</span>[<span>$i</span>]['error']=<span>$file</span>['error'][<span>$key</span><span>];
                </span><span>$files</span>[<span>$i</span>]['size']=<span>$file</span>['size'][<span>$key</span><span>];
                </span><span>$i</span>++<span>;
            }
        }
    }
    </span><span>return</span> <span>$files</span><span>;
    
}</span>

 

然后之前的那种exit错误,就把exit改一下就好了,这里用res

<span>function</span> uploadFile(<span>$fileInfo</span>,<span>$path</span>='./uploads',<span>$flag</span>=<span>true</span>,<span>$maxSize</span>=1048576,<span>$allowExt</span>=<span>array</span>('jpeg','jpg','png','gif'<span>)){
    </span><span>//</span><span>$flag=true;
    //$allowExt=array('jpeg','jpg','gif','png');
    //$maxSize=1048576;//1M
    //判断错误号</span>
    <span>$res</span>=<span>array</span><span>();
    </span><span>if</span>(<span>$fileInfo</span>['error']===<span>UPLOAD_ERR_OK){
        </span><span>//</span><span>检测上传得到小</span>
        <span>if</span>(<span>$fileInfo</span>['size']><span>$maxSize</span><span>){
            </span><span>$res</span>['mes']=<span>$fileInfo</span>['name'].'上传文件过大'<span>;
        }
        </span><span>$ext</span>=getExt(<span>$fileInfo</span>['name'<span>]);
        </span><span>//</span><span>检测上传文件的文件类型</span>
        <span>if</span>(!<span>in_array</span>(<span>$ext</span>,<span>$allowExt</span><span>)){
            </span><span>$res</span>['mes']=<span>$fileInfo</span>['name'].'非法文件类型'<span>;
        }
        </span><span>//</span><span>检测是否是真实的图片类型</span>
        <span>if</span>(<span>$flag</span><span>){
            </span><span>if</span>(!<span>getimagesize</span>(<span>$fileInfo</span>['tmp_name'<span>])){
                </span><span>$res</span>['mes']=<span>$fileInfo</span>['name'].'不是真实图片类型'<span>;
            }
        }
        </span><span>//</span><span>检测文件是否是通过HTTP POST上传上来的</span>
        <span>if</span>(!<span>is_uploaded_file</span>(<span>$fileInfo</span>['tmp_name'<span>])){
            </span><span>$res</span>['mes']=<span>$fileInfo</span>['name'].'文件不是通过HTTP POST方式上传上来的'<span>;
        }
        </span><span>if</span>(<span>$res</span>) <span>return</span> <span>$res</span><span>;
        </span><span>//</span><span>$path='./uploads';</span>
        <span>if</span>(!<span>file_exists</span>(<span>$path</span><span>)){
            </span><span>mkdir</span>(<span>$path</span>,0777,<span>true</span><span>);
            </span><span>chmod</span>(<span>$path</span>,0777<span>);
        }
        </span><span>$uniName</span>=<span>getUniName();
        </span><span>$destination</span>=<span>$path</span>.'/'.<span>$uniName</span>.'.'.<span>$ext</span><span>;
        </span><span>if</span>(!<span>move_uploaded_file</span>(<span>$fileInfo</span>['tmp_name'],<span>$destination</span><span>)){
            </span><span>$res</span>['mes']=<span>$fileInfo</span>['name'].'文件移动失败'<span>;
        }
        </span><span>$res</span>['mes']=<span>$fileInfo</span>['name'].'上传成功'<span>;
        </span><span>$res</span>['dest']=<span>$destination</span><span>;
        </span><span>return</span> <span>$res</span><span>;
        
    }</span><span>else</span><span>{
        </span><span>//</span><span>匹配错误信息</span>
        <span>switch</span> (<span>$fileInfo</span> ['error'<span>]) {
            </span><span>case</span> 1 :
                <span>$res</span>['mes'] = '上传文件超过了PHP配置文件中upload_max_filesize选项的值'<span>;
                </span><span>break</span><span>;
            </span><span>case</span> 2 :
                <span>$res</span>['mes'] = '超过了表单MAX_FILE_SIZE限制的大小'<span>;
                </span><span>break</span><span>;
            </span><span>case</span> 3 :
                <span>$res</span>['mes'] = '文件部分被上传'<span>;
                </span><span>break</span><span>;
            </span><span>case</span> 4 :
                <span>$res</span>['mes'] = '没有选择上传文件'<span>;
                </span><span>break</span><span>;
            </span><span>case</span> 6 :
                <span>$res</span>['mes'] = '没有找到临时目录'<span>;
                </span><span>break</span><span>;
            </span><span>case</span> 7 :
            <span>case</span> 8 :
                <span>$res</span>['mes'] = '系统错误'<span>;
                </span><span>break</span><span>;
        }
        </span><span>return</span> <span>$res</span><span>;
    }
}</span>

 

里面封装了两个小的

<span>function</span> getExt(<span>$filename</span><span>){
    </span><span>return</span> <span>strtolower</span>(<span>pathinfo</span>(<span>$filename</span>,<span>PATHINFO_EXTENSION));
}

</span><span>/*</span><span>*
 * 产生唯一字符串
 * @return string
 </span><span>*/</span>
<span>function</span><span> getUniName(){
    </span><span>return</span> <span>md5</span>(<span>uniqid</span>(<span>microtime</span>(<span>true</span>),<span>true</span><span>));
}</span>

 

然后静态中,用multiple属性实现多个文件的输入;

<span><!</span><span>DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"</span><span>></span>
<span><</span><span>html</span><span>></span>
<span><</span><span>head</span><span>></span>
<span><</span><span>meta </span><span>http-equiv</span><span>="Content-Type"</span><span> content</span><span>="text/html; charset=UTF-8"</span><span>></span>
<span><</span><span>title</span><span>></span>Insert title here<span></</span><span>title</span><span>></span>
<span></</span><span>head</span><span>></span>
<span><</span><span>body</span><span>></span>
<span><</span><span>form </span><span>action</span><span>="doAction6.php"</span><span> method</span><span>="POST"</span><span> enctype</span><span>="multipart/form-data"</span><span>></span><span>
请选择您要上传的文件:</span><span><</span><span>input </span><span>type</span><span>="file"</span><span> name</span><span>="myFile[]"</span><span> multiple</span><span>='multiple' </span><span>/><</span><span>br</span><span>/></span>
<span><</span><span>input </span><span>type</span><span>="submit"</span><span> value</span><span>="上传"</span><span>/></span>
<span></</span><span>form</span><span>></span>
<span></</span><span>body</span><span>></span>
<span></</span><span>html</span><span>></span>

 

doAction6

<?<span>php 
</span><span>//</span><span>print_r($_FILES);</span>
<span>header</span>("content-type:text/html;charset=utf-8"<span>);
</span><span>require_once</span> 'upFunc2.php'<span>;
</span><span>require_once</span> 'common.func.php'<span>;
</span><span>$files</span>=<span>getFiles();
</span><span>//</span><span> print_r($files);</span>
<span>foreach</span>(<span>$files</span> <span>as</span> <span>$fileInfo</span><span>){
    </span><span>$res</span>=uploadFile(<span>$fileInfo</span><span>);
    </span><span>echo</span> <span>$res</span>['mes'],'<br/>'<span>;
    </span><span>$uploadFiles</span>[]=@<span>$res</span>['dest'<span>];
}
</span><span>$uploadFiles</span>=<span>array_values</span>(<span>array_filter</span>(<span>$uploadFiles</span><span>));
</span><span>//</span><span>print_r($uploadFiles);</span>

 

这样子的几个文件,就实现比较强大的面向过程的上传文件的功能(学的叫一个心酸。。。);

四、面向对象的文件上传

 (不是很写的动了。。。先粘过来,再说吧。。。

<?<span>php 
</span><span>class</span><span> upload{
    </span><span>protected</span> <span>$fileName</span><span>;
    </span><span>protected</span> <span>$maxSize</span><span>;
    </span><span>protected</span> <span>$allowMime</span><span>;
    </span><span>protected</span> <span>$allowExt</span><span>;
    </span><span>protected</span> <span>$uploadPath</span><span>;
    </span><span>protected</span> <span>$imgFlag</span><span>;
    </span><span>protected</span> <span>$fileInfo</span><span>;
    </span><span>protected</span> <span>$error</span><span>;
    </span><span>protected</span> <span>$ext</span><span>;
    </span><span>/*</span><span>*
     * @param string $fileName
     * @param string $uploadPath
     * @param string $imgFlag
     * @param number $maxSize
     * @param array $allowExt
     * @param array $allowMime
     </span><span>*/</span>
    <span>public</span> <span>function</span> __construct(<span>$fileName</span>='myFile',<span>$uploadPath</span>='./uploads',<span>$imgFlag</span>=<span>true</span>,<span>$maxSize</span>=5242880,<span>$allowExt</span>=<span>array</span>('jpeg','jpg','png','gif'),<span>$allowMime</span>=<span>array</span>('image/jpeg','image/png','image/gif'<span>)){
        </span><span>$this</span>->fileName=<span>$fileName</span><span>;
        </span><span>$this</span>->maxSize=<span>$maxSize</span><span>;
        </span><span>$this</span>->allowMime=<span>$allowMime</span><span>;
        </span><span>$this</span>->allowExt=<span>$allowExt</span><span>;
        </span><span>$this</span>->uploadPath=<span>$uploadPath</span><span>;
        </span><span>$this</span>->imgFlag=<span>$imgFlag</span><span>;
        </span><span>$this</span>->fileInfo=<span>$_FILES</span>[<span>$this</span>-><span>fileName];
    }
    </span><span>/*</span><span>*
     * 检测上传文件是否出错
     * @return boolean
     </span><span>*/</span>
    <span>protected</span> <span>function</span><span> checkError(){
        </span><span>if</span>(!<span>is_null</span>(<span>$this</span>-><span>fileInfo)){
            </span><span>if</span>(<span>$this</span>->fileInfo['error']>0<span>){
                </span><span>switch</span>(<span>$this</span>->fileInfo['error'<span>]){
                    </span><span>case</span> 1:
                        <span>$this</span>->error='超过了PHP配置文件中upload_max_filesize选项的值'<span>;
                        </span><span>break</span><span>;
                    </span><span>case</span> 2:
                        <span>$this</span>->error='超过了表单中MAX_FILE_SIZE设置的值'<span>;
                        </span><span>break</span><span>;
                    </span><span>case</span> 3:
                        <span>$this</span>->error='文件部分被上传'<span>;
                        </span><span>break</span><span>;
                    </span><span>case</span> 4:
                        <span>$this</span>->error='没有选择上传文件'<span>;
                        </span><span>break</span><span>;
                    </span><span>case</span> 6:
                        <span>$this</span>->error='没有找到临时目录'<span>;
                        </span><span>break</span><span>;
                    </span><span>case</span> 7:
                        <span>$this</span>->error='文件不可写'<span>;
                        </span><span>break</span><span>;
                    </span><span>case</span> 8:
                        <span>$this</span>->error='由于PHP的扩展程序中断文件上传'<span>;
                        </span><span>break</span><span>;
                        
                }
                </span><span>return</span> <span>false</span><span>;
            }</span><span>else</span><span>{
                </span><span>return</span> <span>true</span><span>;
            }
        }</span><span>else</span><span>{
            </span><span>$this</span>->error='文件上传出错'<span>;
            </span><span>return</span> <span>false</span><span>;
        }
    }
    </span><span>/*</span><span>*
     * 检测上传文件的大小
     * @return boolean
     </span><span>*/</span>
    <span>protected</span> <span>function</span><span> checkSize(){
        </span><span>if</span>(<span>$this</span>->fileInfo['size']><span>$this</span>-><span>maxSize){
            </span><span>$this</span>->error='上传文件过大'<span>;
            </span><span>return</span> <span>false</span><span>;
        }
        </span><span>return</span> <span>true</span><span>;
    }
    </span><span>/*</span><span>*
     * 检测扩展名
     * @return boolean
     </span><span>*/</span>
    <span>protected</span> <span>function</span><span> checkExt(){
        </span><span>$this</span>->ext=<span>strtolower</span>(<span>pathinfo</span>(<span>$this</span>->fileInfo['name'],<span>PATHINFO_EXTENSION));
        </span><span>if</span>(!<span>in_array</span>(<span>$this</span>->ext,<span>$this</span>-><span>allowExt)){
            </span><span>$this</span>->error='不允许的扩展名'<span>;
            </span><span>return</span> <span>false</span><span>;
        }
        </span><span>return</span> <span>true</span><span>;
    }
    </span><span>/*</span><span>*
     * 检测文件的类型
     * @return boolean
     </span><span>*/</span>
    <span>protected</span> <span>function</span><span> checkMime(){
        </span><span>if</span>(!<span>in_array</span>(<span>$this</span>->fileInfo['type'],<span>$this</span>-><span>allowMime)){
            </span><span>$this</span>->error='不允许的文件类型'<span>;
            </span><span>return</span> <span>false</span><span>;
        }
        </span><span>return</span> <span>true</span><span>;
    }
    </span><span>/*</span><span>*
     * 检测是否是真实图片
     * @return boolean
     </span><span>*/</span>
    <span>protected</span> <span>function</span><span> checkTrueImg(){
        </span><span>if</span>(<span>$this</span>-><span>imgFlag){
            </span><span>if</span>(!@<span>getimagesize</span>(<span>$this</span>->fileInfo['tmp_name'<span>])){
                </span><span>$this</span>->error='不是真实图片'<span>;
                </span><span>return</span> <span>false</span><span>;
            }
            </span><span>return</span> <span>true</span><span>;
        }
    }
    </span><span>/*</span><span>*
     * 检测是否通过HTTP POST方式上传上来的
     * @return boolean
     </span><span>*/</span>
    <span>protected</span> <span>function</span><span> checkHTTPPost(){
        </span><span>if</span>(!<span>is_uploaded_file</span>(<span>$this</span>->fileInfo['tmp_name'<span>])){
            </span><span>$this</span>->error='文件不是通过HTTP POST方式上传上来的'<span>;
            </span><span>return</span> <span>false</span><span>;
        }
        </span><span>return</span> <span>true</span><span>;
    }
    </span><span>/*</span><span>*
     *显示错误 
     </span><span>*/</span>
    <span>protected</span> <span>function</span><span> showError(){
        </span><span>exit</span>('<span>$this</span>->error.'</span>'<span>);
    }
    </span><span>/*</span><span>*
     * 检测目录不存在则创建
     </span><span>*/</span>
    <span>protected</span> <span>function</span><span> checkUploadPath(){
        </span><span>if</span>(!<span>file_exists</span>(<span>$this</span>-><span>uploadPath)){
            </span><span>mkdir</span>(<span>$this</span>->uploadPath,0777,<span>true</span><span>);
        }
    }
    </span><span>/*</span><span>*
     * 产生唯一字符串
     * @return string
     </span><span>*/</span>
    <span>protected</span> <span>function</span><span> getUniName(){
        </span><span>return</span> <span>md5</span>(<span>uniqid</span>(<span>microtime</span>(<span>true</span>),<span>true</span><span>));
    }
    </span><span>/*</span><span>*
     * 上传文件
     * @return string
     </span><span>*/</span>
    <span>public</span> <span>function</span><span> uploadFile(){
        </span><span>if</span>(<span>$this</span>->checkError()&&<span>$this</span>->checkSize()&&<span>$this</span>->checkExt()&&<span>$this</span>->checkMime()&&<span>$this</span>->checkTrueImg()&&<span>$this</span>-><span>checkHTTPPost()){
            </span><span>$this</span>-><span>checkUploadPath();
            </span><span>$this</span>->uniName=<span>$this</span>-><span>getUniName();
            </span><span>$this</span>->destination=<span>$this</span>->uploadPath.'/'.<span>$this</span>->uniName.'.'.<span>$this</span>-><span>ext;
            </span><span>if</span>(@<span>move_uploaded_file</span>(<span>$this</span>->fileInfo['tmp_name'], <span>$this</span>-><span>destination)){
                </span><span>return</span>  <span>$this</span>-><span>destination;
            }</span><span>else</span><span>{
                </span><span>$this</span>->error='文件移动失败'<span>;
                </span><span>$this</span>-><span>showError();
            }
        }</span><span>else</span><span>{
            </span><span>$this</span>-><span>showError();
        }
    }
}</span>

 

 

<?<span>php 
</span><span>header</span>('content-type:text/html;charset=utf-8'<span>);
</span><span>require_once</span> 'upload.class.php'<span>;
</span><span>$upload</span>=<span>new</span> upload('myFile1','imooc'<span>);
</span><span>$dest</span>=<span>$upload</span>-><span>uploadFile();
</span><span>echo</span> <span>$dest</span>;

 

四、下载

对于浏览器不识别的,可以直接下载,但对于能识别的,需要多一两步

<span><!</span><span>DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</span><span>></span>
<span><</span><span>html </span><span>xmlns</span><span>="http://www.w3.org/1999/xhtml"</span><span>></span>
<span><</span><span>head</span><span>></span>
<span><</span><span>meta </span><span>http-equiv</span><span>="Content-Type"</span><span> content</span><span>="text/html; charset=UTF-8"</span> <span>/></span>
<span><</span><span>title</span><span>></span>Insert title here<span></</span><span>title</span><span>></span>
<span></</span><span>head</span><span>></span>
<span><</span><span>body</span><span>></span>
<span><</span><span>a </span><span>href</span><span>="1.rar"</span><span>></span>下载1.rar<span></</span><span>a</span><span>></span>
<span><</span><span>br </span><span>/></span>
<span><</span><span>a </span><span>href</span><span>="1.jpg"</span><span>></span>下载1.jpg<span></</span><span>a</span><span>></span>
<span><</span><span>br </span><span>/></span>
<span><</span><span>a </span><span>href</span><span>="doDownload.php?filename=1.jpg"</span><span>></span>通过程序下载1.jpg<span></</span><span>a</span><span>></span>
<span><</span><span>br </span><span>/></span>
<span><</span><span>a </span><span>href</span><span>="doDownload.php?filename=../upload/nv.jpg"</span><span>></span>下载nv.jpg<span></</span><span>a</span><span>></span>
<span><?</span><span>php

</span><span>?></span>
<span></</span><span>body</span><span>></span>
<span></</span><span>html</span><span>></span>

 

<?<span>php 
</span><span>$filename</span>=<span>$_GET</span>['filename'<span>];
</span><span>header</span>('content-disposition:attachment;filename='.<span>basename</span>(<span>$filename</span><span>));
</span><span>header</span>('content-length:'.<span>filesize</span>(<span>$filename</span><span>));
</span><span>readfile</span>(<span>$filename</span>);

 

------------------总结-----------------------

<form action="doAction.php" method="post" enctype="multipart/form-data">

 e6b689fdce2c30da7d31e1a121bdd0cd076402276aae5dbec7f672f8f4e5cc81

 二维数组的降维处理;

$_FILES变量

move_upload_file();copy();

tmp_name临时文件;

拓展名的提取;

真实图片的验证;

唯一文件名的生成;

函数封装以及调用;

利用单个文件函数实现多文件上传;

小功能的封装;

多文件的遍历;

面向对象的开发过程;

下载;

----------------------------------------

妈蛋啊。。。。。。。。。

 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1108741.htmlTechArticlePHP实现文件上传下载——心在忙而已, 这一周都没有写什么东西,是啊,一周时间都没有学习太多新的东西,除了开车。 妈蛋啊,天天中...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。