PHP上传文件摘要

1。先做一个最简单的上传

复制代码代码如下所示:











<形式行动=upload_file .phpmethod=后

enctype =多部分/表单数据>

文件名:















复制代码代码如下所示:

< PHP

如果($ _files {(文件

{

如果($ _files { 文件

{

返回代码:。_files美元{ 文件

}

其他的

{

回声上传:文件 _files美元{

回声型:_files美元{文件

回声($ _files {大小:。文件

临时文件。_files美元{ 文件

如果(file_exists(上传 / $ _files {。文件

{

_files { echo $ 文件

}

其他的

{

move_uploaded_file($ _files { 文件

上载。_files美元{ 文件

存储在:。_files美元{ 文件

}

}

}

其他的

{

无效文件;

}

>



2。然后了解超级全局变量的值_files美元

复制代码代码如下所示:

_files { } { 'userfile美元的'name' }

_files { } { 'userfile美元类型}

_files { } { 'userfile美元的'size}

_files { } { 'userfile美元的'tmp_name}

_files { } {美元'userfile '错误' }



所有的值_files { } {美元'userfile '错误' }是:

upload_err_ok其值为0,没有出现错误,文件上传成功。

upload_err_ini_size的值是1,和上传的文件超过在php.ini中的upload_max_filesize期权的价值。

upload_err_form_size的值是2,和上传文件的大小超过了HTML表单的max_file_size选项指定的值。

upload_err_partial的值是3,只有部分文件上传。

upload_err_no_file的值是4,没有文件上传。

upload_err_no_tmp_dir的值是6,和临时文件夹不能found.php 4.4.7和PHP 5.0.3介绍。

upload_err_cant_write的值是7,和文件的写入fails.php 5.1.0介绍。

三.很多情况下:需要严格判断上传文件的类型

我们知道,_files { } { 'userfile美元类型}是用来确定上传文件的类型是非常不明智的,因为判断是基于文件的后缀名,任何人都可以成为一个MP3文件为JPG后缀伪装的图片上传,所以PHP官方推荐使用PHP来确定文件的MIME打开百度开发的方法有很多php_fileinfo扩张,赢得和Linux都略有不同。

4。场景:自动重命名上传文件名

复制代码代码如下所示:

如果(file_exists(, / /上传_files美元{。文件

{

做{

$后缀 ;

suffix_length = 4美元;

$str =0123456789abcdefghijklmnopqrstuvwxyz ;

$ len = strlen(str)- 1;

添加4个随机字符后的文件名

为($我= 0;美元美元美元我<< suffix_length;i++){

$后缀= $(0,$)};

}

upload_filename美元=美元_files {文件} { 'name' };

为文件名= substr(upload_filename美元,0美元,个子(upload_filename,为后缀。)).. substr($ upload_filename,个子($ _files { 文件

}而(file_exists(, / / 上传。$文件名));

move_uploaded_file($ _files { 文件

其他{ }

move_uploaded_file($ _files { 文件

}



5。场景二:按日期子目录上传文件

复制代码代码如下所示:

=;

如果(!mkdir(合结构,0777,真)){

模具('failed创建文件夹…);

}

move_uploaded_file($ _files { 文件



6。场景三:多文件上传

复制代码代码如下所示:



图片:















复制代码代码如下所示:

< PHP

foreach($ _files { 图片

如果($错误= = upload_err_ok){

tmp_name美元美元_files { = 图片

$name$ _files { = 图片

move_uploaded_file($ tmp_name,数据 / $名称);

}

}

>





在某些情况下,这个多文件的可变结构不好用:

复制代码代码如下所示:

数组(1){

{上传>数组(2){

{名称>数组(2){

{ 0 } = >字符串(9)file0 .txt

{ 1 } = >字符串(9)file1 .txt

}

{类型>>数组(2){

{ 0个字符串(10)文本

{ 1个字符串(10)

}

}

}





在许多情况下,我们需要这样的结构。

复制代码代码如下所示:

数组(1){

{上传>数组(2){

{ 0个数组(2){

{名字} = >字符串(9)file0 .txt

{类型>>字符串(10)文本

},

{ 1个数组(2){

{名字} = >字符串(9)file1 .txt

{类型>>字符串(10)文本

}

}

}



通过以下功能可以很容易地转换结构

复制代码代码如下所示:

功能diverse_array(合矢量){

结果=数组();

foreach(合矢量达key1 = $ value1)

foreach($ value1 value2 KEY2美元=美元)

结果{ } { KEY2美元美元美元美元key1 } = value2;

返回$结果;

}

美元($ _files diverse_array上传= {上传));



7。当需要配置服务器以修改最大上载文件大小时

第一,形式上



您可以限制上传文件的大小(可以绕过)。

然后需要调整服务器上的配置。

Php.ini:

复制代码代码如下所示:

max_execution_time = 30每单位时间最长的剧本,二

max_input_time = 60,每个脚本的时间可以消耗,和单元二

memory_limit = 128M,这是由脚本消耗的最大内存

post_max_size = 8m。表单提交的数据的最大8m,这是不限制上传单个文件大小限制,但通过表单提交的数据。

upload_max_filesize = 2M,上传文件的最大许可尺寸



Nginx:

复制代码代码如下所示:

位置

根HTML;

指数index.html index.htm;

client_max_body_size 1000m;

}



让我们暂时把这些事情总结一下。我希望他们能喜欢他们。