PHP移动互联网开发笔记之文件上传下载

发布时间:2020-07-21编辑:脚本学堂
本文是PHP移动互联网开发笔记的第六部分,有关php文件上传与下载的相关内容,有学习php移动开发或php手机开发的朋友不妨参考下。

php文件上传下载

一、文件的上传

1、客户端设置:
1)、在<form>标签中将enctype和method两个属性指明相应的值。
 

Enctype="multipart/form-data"; Method="POST"

2)、form表单中设置一个hidden类型的input框,其中name的值为MAX_FILE_SIZE的隐藏值

2、服务器端设置:
1)、$_FILES多维数组:用于存储各种上传文件有关的信息
2)、文件上传与php配置文件的设置,如以下php.ini文件中的一些指令
 

指令  默认值 功能描述
file_uploads ON 确定服务器上的PHP脚本是否可以接受HTTP文件上传
memory_limit 8M 设置脚本可以分配的最大内存量,防止失控的脚本独占服务器内存
upload_max_file 2M 限制PHP处理上传文件大小的最大值,此值必须小于POST_MAX_SIZE值
post_max_size 8M 限制通过POST方法可以接受信息的最大值
upload_tmp_dir NULL 上传文件的临时路径,可以是一个绝对路径

例子:
 

复制代码 代码示例:
<html> 
    <head> 
        <title>file</title> 
    </head> 
    <body> 
        <form name="form1" method="post" action="upload.php" enctype="multipart/form-data"> 
            file:<input type="file" name="file"/><br> 
            <input type="hidden" name="MAX_FILE_SIZE" value="1000000"/> 
            <input type="submit" value="fileUpload"/> 
            <input type="reset" value="reset"/> 
        </form> 
    </body> 
</html>

如下图:
 

php文件上传下载 图1

3、PHP的文件上传及资源指令
file_uploads(boolean)
是否开启HTTP POST文件上传功能

max_execution_time(integer)
PHP脚本最长执行时间

memory_limit(integer) 单位M
PHP脚本运行的最大内存

upload_max_filesize(integer) 单位M
PHP上传文件的最大尺寸

upload_tmp_dir(string)
上传文件存储的临时位置

post_max_size(integer) 单位M
HTTP POST数据的最大尺寸

4、$_FILES数组
$_FILES['userfile'][size]
获取上传文件的字节数

$_FILES['userfile']['type']
获取上传文件的MIME类型,每种MIME类型都是由“/”分隔的主类型和子类型组成

$_FILES['userfile']['error']
获取上传文件的错误代码,0:无任何错误,文件上传成功;1:上传文件大小超出了PHP配置文件中upload_max_filesize选项限定的值;2:上传文件大小超出了HTML表单中MAX_FILE_SIZE指定的值;3:表示文件只被部分上传;4:表示没有上传任何文件。

$_FILES['userfile']['name']
获取上传文件的原始名称,包含扩展名

$_FILES['userfile']['tmp_name']
获取上传文件的临时位置名称,这是存储在临时目录中所指定的文件名。

5、文件上传函数

is_upload_file
判断指定的文件是否是通过HTTP POST上传

bool is_upload_file(string $filename)
move_upload_file
将上传文件移至新位置

bool move_upload_file(string $filename, string $destination)
注意:文件上传后,首先会存储于服务器的临时目录中,可以使用该函数将上传文件移动到新位置,与copy()和move()相比,它能检测并确保第一个参数filename指定的文件是否是合法上传的文件。

6、错误信息描述
 

UPLOAD_ERR_OK{value=0}
UPLOAD_ERR_INI_SIZE{value=1}
UPLOAD_ERR_FORM_SIZE{value=2}
UPLOAD_ERR_PARTIAL{value=3}
UPLOAD_ERR_NO_FILE{value=4}
UPLOAD_ERR_NO_TMP_DIR{value=6}
UPLOAD_ERR_CANT_WRITE{value=7}

例子:
 

复制代码 代码示例:
<?php 
    print_r($_FILES);    
?>

如下图:
 

php文件上传下载 图2 相关阅读:

您可能感兴趣的文章:

二、文件下载
简单文件下载只需要使用HTML的链接标记<a>,并将属性href的URL值指定下载的文件即可。这种方法只能处理一些浏览器不能识别的MIME类型文件。
 

复制代码 代码示例:
<html> 
    <head> 
        <title>file</title> 
    </head> 
    <body> 
        <a href="php.zip">php.zip文件下载</a> 
    </body> 
</html> 

 为了提高安全性,不希望在a标签中给出文件链接,则必须向浏览器发送必要的头信息,我们可以使用如下代码。
 

复制代码 代码示例:
<?php  
    //发送指定文件MIME类型的头信息 
    header("content-type:application/x-msdownload"); 
     
    $fileName=$_GET['fileNmae']; 
    $path="[$fileName]"; 
    //发送描述文件的头信息,附件和文件名 
    header(content-disposition:attachment:filename=[$fileName]); 
     
    readfile($path); 
?> 

如下图:
 

php文件上传下载 图3

 

三、文件函数库
touch
设置文件的访问和修饰时间
bool touch(string $filename[, int $time[, int $time]])
copy
复制文件
bool copy(string $source, string $dest)

注意:移动文件请使用rename函数
file_put_contents
将一个字符串写入文件

int file_put_contents(string $filename, string $data[, int $flag[, resource $content]])
file_get_contents
将整个文件读到字符串
string file_get_contents(string $filename[, bool user_include_path [, resource $content[, int $offset[, int $maxlen]]]])

四、序列化与反序列化
serialize
序列化
string serialize(mixed $value)

注意:serialize()可处理除了resouce之外的任何类型。甚至可以serialize()那些包含了指向其自身引用的数组。
unserialize

反序列化
mixed unserialize(string $str)

例子:
 

复制代码 代码示例:
<?php  
$var="abcdefj"; 
 
//序列化 
$arr=serialize($var); 
echo '序列化<br>'; 
var_dump($arr); 
echo '<br>'; 
 
//反序列化 
echo '反序列化<br>'; 
$arr1=unserialize($arr); 
var_dump($arr1); 
echo '<br>'; 
?>

如下图:
php文件上传下载 图4