php

xiaoxiao2021-02-28  112

php 上传文件失败$_FILES tmp_name 为空

1.打开php下php extentions 下的 php_curl 2.修改php.ini中的 upload_max_filesize = 2M 太小了 上传失败 一般是指网页中存在的Content-Type, 用于定义网络文件的类型和网页的编码, 决定文件接收方将以什么形式、什么编码读取这个文件 form的enctype属性为编码方式,常用有两种: 1.(没有type=file的控件)application/x-www-form-urlencoded:默认 2.(有type=file的控件)multipart/form-data: 提交图片视频文件的编码格式,使用key/value标准格式

1.打开文件

<?php header("content-type:text/html;charset=utf-8"); //1.打开文本流 $file = fopen("1.txt", "a+"); $str = fread($file, filesize("1.txt"));//读取一个文件,参数2 :读多长个字符 //filesize() 获取文件长度 echo $str; fwrite($file, "hello world");//写 a+ //判断文件是否存在 if(is_file("12.txt")){ echo "yes"; }else{ echo "no"; $file = fopen("12.txt", "a"); fwrite($file, "hello world");//写 } //文件/文件夹->权限问题 //user (正常在本地操作) //group (软件操作文件) //other () ?>

2.给予权限

<?php $old = umask(0); //umask(0) 在创建新文件或目录时 屏蔽掉新文件或目录不应有的访问允许权限 $file = fopen("3.txt", "w"); fwrite($file, ""); //给予权限 umask($old); //开启权限 //chmod("2.txt", 0777); // 4 2 1 // r w x // 777 每一位代表的是 不同用户的操作权限 // user group other // rwxrwxrwx // r----wrw- ?>

3.读写

<?php header("content-type:text/html;charset=utf-8"); $data = "我就要往里写"; //利用user的权限,直接覆盖操作文件 file_put_contents("3.txt", $data); //读取一个任意文件 //echo file_get_contents("http://www.baidu.com/s?wd=王"); echo file_get_contents("3.txt"); ?>

4.序列化与反序列化

<?php header("content-type:text/html;charset=utf-8"); echo "<pre/>"; $str = file_get_contents("jsonURL.json"); //反序列化 json_decode,一定格式的字符串转化为array / object $jsonArr = json_decode($str);//返回对象 print_r($jsonArr); print_r($jsonArr->head); echo "<br/>"; $jsonArr = json_decode($str,true);//返回关联数组 print_r($jsonArr); echo $jsonArr['law']; echo "<br/>"; //序列化 json_encode 把array / object序列化成一定格式的字符串 //重点:PHP向前端返回数组的时候,要返回的是序列化后的字符串给前端使用 $eStr = json_encode($jsonArr); print_r($eStr); ?>

5.文件复制重命名_删除

<?php //复制 true成功 //参1:源文件 //参2:复制为哪个文件 //注:放的是文件路径 //echo copy("jsonURL.json", "2.json"); //重命名 //$a = rename("2.json", "5.json"); //删除 //echo unlink("5.json"); ?>

6.文件夹操作

<?php //1.新建文件夹 //echo mkdir("2b"); //chmod("2b",0777); //删除文件夹 $arr = scandir("2b");//扫描文件夹内的内容 foreach($arr as $v){ if($v != "." && $v != ".."){ unlink("2b/".$v); } echo $v; } echo rmdir("2b");//无法恢复 //判断一个路径是否为文件夹 if(is_dir("../06")){ echo "yes"; }else{ echo "no"; } ?>

7.form表单提交:上传图片

<body> <!-- 表单中enctype="multipart/form-data"的意思, 是设置表单的MIME编码。默认情况,这个编码格式是application/x-www-form-urlencoded, 不能用于文件上传;只有使用了multipart/form-data,才能完整的传递文件数据 --> <form action="09php_perfect_pic.php" method="post" enctype="multipart/form-data"> <input type="file" name="myFile" id="" value="" /> <input type="submit" value="提交文件"/> </form> </body> ---------------------------------------------------------- normal版本 <?php //$_GET //$_POST //$_FILES 保存的是接收到的文件信息 header("content-type:text/html;charset=utf-8"); var_dump($_FILES); $arr = $_FILES["myFile"];//(Key前台约定的) $oldPosition = $arr["tmp_name"]; //移动(前端传递的文件,实在缓存里,自己移动到只定位置) $content = iconv("GBK", "UTF-8", $content); echo move_uploaded_file($oldPosition, $arr["name"]); //$_FILES["myFile"]["name"] 前端上传的文件的文件名 //$_FILES["myFile"]["type"] 前端上传的文件的文件类型 //image/jpg,image/jpeg,image/png,image/pjpeg,image/gif,bmp,image/x-png,text/php //$_FILES["myFile"]["tmp_name"] 前端上传的文件的文件类型 //$_FILES["myFile"]["error"] 错误信息 //0:文件上传成功 //1:超过文件大小限制(默认php.ini,2MB) //2:超过文件大小MAX_FILE_SIZE 选项规定的值 //3:文件☞传了一部分 //4:文件没有被上传 //5:文件上传大小为0 //$_FILES["myFile"]["size"] 文件大小 ?> -------------------------------------------------------- super版本 <?php header("content-type:text/html;charset=utf-8"); //判断缓存里的文件是否上传完毕 if(is_uploaded_file($_FILES["myFile"]["tmp_name"])){ $upFileArr = $_FILES["myFile"]; $name = $upFileArr["name"]; $type = $upFileArr["type"]; $size = $upFileArr["size"]; $tmp_name = $upFileArr["tmp_name"]; $err = $upFileArr["error"]; $isOk = 0;//保存此次判断结果( 0非法 1 合法) switch($type){ case "image/jpeg":$isOk = 1; break; case "image/png":$isOk = 1; break; case "image/jpg":$isOk = 1; break; case "image/gif":$isOk = 1; break; default: } if(1 == $isOk && 0 == $err){ if(!is_dir("up")){ mkdir("up"); chmod("up", 0777); } $mResult = move_uploaded_file($tmp_name, "up/".iconv("UTF-8", "gbk",$name));//将字符串的编码从UTF-8 转到gbk if($mResult == true){ echo "文件上传成功"; } }else{ echo "请检查文件类型"; } } ?>

8.ajax上传文件(单个)

<body> <input type="file" name="upload_file" id="upload_file" multiple="multiple" /> <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script> <script type="text/javascript"> document.getElementById("upload_file").addEventListener("change",function(){ //console.log(this.files); console.log(this.files["length"]); var file = this.files[0]; var reader = new FileReader(); reader.readAsDataURL(file); reader.onload = function(ev){ var base64Str = ev.target.result; var name = file["name"] arr = base64Str.split(",")["1"]; $.ajax({ type:"post", url:"08php_accept_ajax_up_pic.php", data:{ base64Str:arr, name : name }, success:function(res){ alert(res); } }); } }); </script> </body> ----------------------------------------------------------- <?php //首先 前端利用Ajia上传图片的时候, //没法直接上传整个文件, //我们需要把图片转成Base64编码,发给后台 //后台收到编码,进行解码得到图片 //建议:post提交 因为get长度有限制 header("content-type:text/html;charset=utf-8"); $base64Str = $_POST["base64Str"]; $name = $_POST["name"]; //反序列化 将图片解析成base64图片 $img = base64_decode($base64Str); // $name = md5(trim(microtime())).$name; $result = file_put_contents("up/".iconv("UTF-8", "gbk",$name), $img);//时间戳作为图片名 if($result){ echo "上传成功"; }else{ echo "上传失败"; } ?>
转载请注明原文地址: https://www.6miu.com/read-68577.html

最新回复(0)