php学习笔记(三)——文件上传

这片笔记讲php文件上传的功能及遇到的一些问题。

先看php文件:

 0)  //$_FILES["file"]["error"]>0:有错
    {
        $backinfo = "错误:: " . $_FILES["file"]["error"] . "
"; } else{ // 如果没有 upfiles 目录,你需要创建它,upfiles 目录权限为 777 $dir = iconv("UTF-8", "GBK", "../upfiles"); if (!file_exists($dir)){ mkdir ($dir,0777,true); } // 判断当期目录下的 upfiles 目录是否存在该文件 if (file_exists("../upfiles/" . $_FILES["file"]["name"])) { $backinfo = $_FILES["file"]["name"] . " 文件已经存在。 "; } else { // 如果 upload 目录不存在该文件则将文件上传到 upload 目录下 move_uploaded_file($_FILES["file"]["tmp_name"], "../upfiles/" . $_FILES["file"]["name"]); $backinfo = $_FILES["file"]["name"] ."文件已上传"; } } } else { $backinfo = "非法的文件格式"; } echo sprintf($backinfo);

相关知识点:

 1.$_FILES["file"]["name"]:文件名称

 2.$_FILES["file"]["type"]:文件格式

 3.
$_FILES["file"]["size"]:文件大小

 4.$_FILES["file"]["error"]:文件错误代码
  0:表示没有错误,下面几种对应不同的错误
 1 : 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值.
 2 : 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
 3 : 文件只有部分被上传
 4 : 没有文件被上传
 $_FILES["file"]["error"] >0就是表示有错误发生

 5.
$_FILES["file"]["tmp_name"]:文件临时存储位置

 6.
explode(separator,string,limit)函数:把字符串打散为数组
    separator:必需。规定在哪里分割字符串。
    string:必需。要分割的字符串。
    limit:可选。规定所返回的数组元素的数目。
       可能的值:
       大于 0 - 返回包含最多 limit 个元素的数组
       小于 0 - 返回包含除了最后的 -limit 个元素以外的所有元素的数组
       0 - 返回包含一个元素的数组

 7.end()函数:输出数组中最后一个值  

 相关:   

 current()-返回数组中的当前元素的值   

 next()-将内部指针指向数组中的下一个元素,并输出   

 prev()-将内部指针指向数组中的上一个元素,并输出   

 reset()-将内部指针指向数组中的第一个元素,并输出   

 each()-返回当前元素的键名和键值,并将内部指针向前移动

示例:

"; // 当前元素是 Bill
echo next($people) . "
"; // Bill 的下一个元素是 Steve echo current($people) . "
"; // 现在当前元素是 Steve echo prev($people) . "
"; // Steve 的上一个元素是 Bill echo end($people) . "
"; // 最后一个元素是 David echo prev($people) . "
"; // David 之前的元素是 Mark echo current($people) . "
"; // 目前的当前元素是 Mark echo reset($people) . "
"; // 把内部指针移动到数组的首个元素,即 Bill echo next($people) . "
"; // Bill 的下一个元素是 Steve print_r (each($people)); // 返回当前元素的键名和键值(目前是 Steve),并向前移动内部指针 ?>
 8.
in_array(search,array,type)函数:搜索数组中是否存在指定的值
         search:必需。规定要在数组搜索的值。
         array:  必需。规定要搜索的数组。

     type:   可选。如果设置该参数为 true,则检查搜索的数据与数组的值的类型是否相同。

 9.iconv():iconv方法是为了防止中文乱码,保证可以创建识别中文目录,不用iconv方法格式的话,将无法创建中文目录

 10.file_exists(path) :函数检查文件或目录是否存在,如果指定的文件或目录存在则返回 true,否则返回 false。

 11.mkdir(path,mode,recursive,context):函数创建目录,若成功,则返回true,否则返回false。 

   path:必需。规定要创建的目录的名称及路径。  

   mode:必需。规定权限。默认是0777。  

   recursive:必需。规定是否设置递归模式。  

   context:必需。规定文件句柄的环境。Context是可修改流的行为的一套选项。

 12.move_uploaded_file(file,newloc):将上传的文件移动到新位置。

    file:必需。规定要移动的文件。  

    newloc:必需。规定文件的新位置。

接下来看一下两种方式的做法:

 一、form表单上传

  使用form上传时,enctype属性值必须为multipart/form-data。 

 html:  

结果:
php学习笔记(三)——文件上传_第1张图片

二、ajaxFileUpload.js插件上传

 先得引用ajaxFileUpload.js:

    
  html:

    
  js:
$("#file-btn").click(function () {
            $.ajaxFileUpload ({
                url:'./php/upload.php',
                secureuri:false, //是否启用安全提交,默认为false。
                fileElementId:'file',//与页面处理代码中file相对应的ID值
                dataType: 'text', //返回数据类型:text,xml,json,html,scritp,jsonp五种
                success: function (data) {
                        alert(data);
                }
            })
        })

 结果:

php学习笔记(三)——文件上传_第2张图片

使用ajaxFileUpload.js遇到的问题:

jQuery.handleError is not a function

网上查找了一下这个错误的原因:版本1.4.2之前的版本才有handlerError方法

 解决办法:

ajaxFileUpload.js文件开头添加这一段代码(红色代码):

jQuery.extend({
    handleError: function( s, xhr, status, e )      {
        // If a local callback was specified, fire it
        if ( s.error ) {
            s.error.call( s.context || s, xhr, status, e );
        }
        // Fire the global callback
        if ( s.global ) {
            (s.context ? jQuery(s.context) : jQuery.event).trigger( "ajaxError", [xhr, s, e] );
        }
    },


    createUploadIframe: function(id, uri){...}



你可能感兴趣的:(php)