求php 以上超大文件上传和断点续传服务器的实现
现在这个时代文件存储基本分离到了单独的存储服务上面,比如说阿里云的OSS,七牛云的云存储等等考虑这些第三方服务的话,那么你的大文件上传和断点续传等功能实现只需要去对接服务商提供的API接口即可(好处就是上传服务的压力等因素服务商帮你抗,不好就是你得付钱给服务商),其中方案就是js-sdk只传OSS的方式,稳定性好,只传断点续传和实时浏览上传进度。
如果你是大神,需要自己在服务器实现上述功能,那么要考虑的不仅是实现本身的需求,还得考虑服务器是否能抗得住这样的上传压力(带宽,延时),还有存储空间是否足够等额外的问题
在网站开发的过程中,为了确保能够充分利用服务器的空间,在开发上传功能时,必须对上传文件的大小进行控制。那么我们如何进行对上传文件的大小进行控制呢?
控制文件的大小可以从两个方面入手:
第一个是在PHP的配置文件phpini中对上传文件进行控制,如果上传文件超过它指定的范围,那么执行上传就会识别。
第二个是在PHP配置文件允许的范围内,在程序中对上传文件的大小进行控制!
一:通过配置文件控制上传文件
PHP中通过phpini文件对上传文件进行控制,包括是否支持上传,上传文件的临时文件目录,上传文件的大小,指令执行时间,指令分配的内存空间。
在phpini中,定义 File Uploads项,完成对上传相关选项的设置。上传相关选项的含义如下:
file_uploads:如果值是 no,说明服务器支持上传文件,如果为off ,那么则不支持。一般默认是支持的,这个不用修改!
upload_tmp_dri:上传文件临时目录。文件被成功上传之前,文件首先存放到服务器端的临时目录中。多数使用系统默认目录,但是也可以自行设置!
upload_max_filesize:服务器允许上传文件的最大值,以MB为单位,系统默认为2MB,如果网站需要上传超过2MB的数据,那么就要修改这个值!
上述是phpini中 File_Uploads项中与上述相关参数设置说明,除了File_Uploads项中的内容外,在phpini中还有其他几个选项会影响到文件的上传~
max_execution_time:PHP中一个指令所能执行的最大时间,单位为秒。该选项在上传超大文件时必须要修改,否则即使上传文件在服务器允许的范围内,但是若超过了指令所能执行的最大时间,仍然无法实现上传~
memory_limit:PHP中一个指令所分配的内存空间,单位是 MB 。它的大小同样会影响得到超大文件的上传!
二:在程序中控制上传文件
在客户端控制上传文件应用的是 form 表单中的 enctype 和 method属性以及隐藏域 MAX_FILE_SIZE。
enctype = “multipart/form-data”:指定表单编码数据方式。
method = “post”:指定数据的传输方式。
<input type = "hidden" name="MAX_FILE_SIZE" value=“10000”/>:通过隐藏域控制上传文件的大小(单位为字节),该值不能超过phpini配置文件中 upload_max_filesize 选项设置的值,它不能喝完全控制上传文件的大小。只是可以避免一些不必要的麻烦。
技巧:
在应用隐藏域<input type = "hidden" name="MAX_FILE_SIZE" value=“10000”/>控制文件上传大小时,必须将其放置在文件域之前,否则是不能发挥作用的!
建议写绝对路径
$upload = new \Think\Upload();// 实例化上传类$upload->maxSize = 3145728 ;// 设置附件上传大小
$upload->exts = array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型
$upload->rootPath = '/Uploads/'; // 设置附件上传根目录
$upload->savePath = ''; // 设置附件上传(子)目录
// 上传文件
$info = $upload->upload();
$path='/Uploads/'$info['img']['savepath']$info['img']['savename'];
上面是上传的
path就是你上传的路径
建议在前台和后台上传的路径分开就可以了
<form method=post action="uploadphp" ENCTYPE="multipart/form-data">
<input type="file" name="upload_file">
<input type="submit" name="submit" value="上传文件">
用PHP上传时,需要对内容作详细的检查,例如是否容许读写文件,文件格式、文件大小是否在你指定的大小内等。
<
$file_size_max = 1000000;
// 限制文件上传最大容量(bytes)
$store_dir = "/public/www/upload/";
// 上传文件的储存位置
$accept_overwrite = true;
//允许读写文件
// 检查文件大小
if ($upload_file_size > $file_size_max) {
echo "对不起,你的文件容量大于规定";
exit;
}
// 检查读写文件
if (file_exists($store_dir $upload_file_name) &&&& !$accept_overwrite) {
echo "文件已存在,不能再复制";
exit;
}
//复制文件到指定目录
if (! @ copy($upload_file,$store_dir $upload_file_name)) {
echo "复制文件失败";
exit;
}
echo "上传文件完成";
>
ftp是
文件传输协议
,利用此协议可以在网络上传输文件。
把文件上传到服务器,一般都是使用ftp的方法,因为往往服务器都会提供ftp功能。具体操作需要安装一个方便操作的ftp客户端,例如TotalCommander就很好,在客户端里面建议一个会话,输入服务器的地址、用户名、密码,然后就可以连接服务器,连接成功后可以看见服务器上的文件,可以和本地的进行
双向传输
(可以上传和下载)。
如果只上传个别文件,可以使用浏览器或者DOS进行传输,浏览器的方法是打开地址:ftp://用户名:密码@服务器地址/,DOS命令是ftp
服务器地址,然后输入用户名和密码。
0条评论