PHP文件目录操作
1、简单写文件:
// 写数据到指定文件中
file_put_contents("文件名","数据字符串");
2、简单读文件:
// 从指定文件中读取内容
$file=file_get_contents(“文件名”);
// 获取某个网页源码到文件中
file_put_contents("index.html",file_get_contents("http://php.cn/"));
3、读文件并输出:
readfile("ww.txt"); // 也可传递URL,内容自接输出无需加echo等
4、读文件以行为单位存入数组:
$arr=file("文件名");
echo $arr[0]; // 第一行内容echo
$arr[1]; // 第二行内容
5、取目录名:
dirname($文件路径字符串) // 返回目录字符串
6、获取文件名:
basename("字符串"); // 获取文件名
7、创建目录:
// 创建的目录必须是一个不存在的,存在会出现错误 //第二个参数如:0777
mkdir(“目录名字符串“);
8、删除空目录:
rmdir("空目录名"); // 返回bool
9、创建文件:
touch("文件名"); // 返回bool
10、删除文件:
unlink("文件名或文件名路径");
11、检查文件或目录是否存在:
file_exists(“文件字符串”); // 返回bool
12、基本判断(内容必须存在):判断是否是目录【is_dir(“字符串”)】、 判断是否是文件【is_file(“字符串”)】
13、获取文件修改时间:filemtime(“文件字符串”);//返回时间戳
14、获取文件大小:filesize(“文件字符串”);//返回字节数
15、文件重命名和移动:rename(“原文件”,”新文件”);//返回bool
16、文件复制:copy(“原文件”,”新文件”);//返回bool
17、文件权限:【is_readable()】、【is_writable()】【is_executable()】//读 写 执行
18、目录分隔符:DIRECTORY_SEPARATOR; // 在liux系统为“/”,在win下为“\”
19、换行符:PHP_EOL // 在liux系统为“\n”,在win下位“\r\n”
20、获取磁盘总大小:echo disk_total_space(“C:”);//返回字节数
21、获取磁盘可用空间总大小:echo disk_free_space(“C:”);//返回字节数
echo “C磁盘总大小:”.round(disk_total_space(“C:”)/pow(2,30),2).”G”;//打印以G为单位大小
22、目录:当前目录(点加斜杠)【 . / 】,上级目录(点点加斜杠)【 . . / 】
23、打印目录下文件:
print_r(glob("./admin/config/*php")); // 获取文件夹admin/config下的php文件,无到子目录,只返回当前目录下
24、遍历文件夹:
$dir=opendir("./dirdong");//打开文件资源
while($fi=readdir($dir)){//循环
if(is_dir("./dirdong/".$fi)) echo "目录:".$fi."<br/>";
if(is_file("./dirdong/".$fi)) echo "文件:".$fi."<br/>";
}
closedir($dir);//关闭文件资源
25、利用文件指针的方式读写文件:
/*打开模式:
r 只读方式,文件指针处于开始
r+ 读写方式,文件指针处于开始,文件无报错
w 只写方式,文件指针处于开始
w+ 读写方式,文件指针处于开始,文件无则创建
a 写追加方式,文件指针处于末尾,文件无则创建
a+ 读写方式,文件指针处于末尾,文件无则创建
rb wb 二进制读写方式
rt wt 文本方式读写方式
*/
$f=fopen("ww.txt","r+");//打开文件 ww.txt 资源
fseek($f,3);//从前往后移动文件指针3个字节
fseek($f,-2,SEEK_END);//从后往前移动文件指针2个字节
rewind($f);//将指针数组移动至开头
echo ftell($f);//查看文件指针位置
//循环读取文件内容
//while(!feof($f)){//判断文件结尾
//echo fgetc($f);//只读取一个字节
//}
//echo fgets($f);//一次读一行
//echo fread($f,2);//读取两个字节
//fwrite($f,"32w东小东\nxxx");//写内容
fclose($f);//关闭文件资源
26、文件锁,防止同时操作文件造成数据絮乱:
flock($f,LOCK_EX);//设置写锁,返回bool
flock($f,LOCK_SH);//设置读锁,返回bool
//文件读写操作
flock($f,LOCK_UN);//释放锁,返回bool
27、文件上传到服务器:
HTML:
<form action="wan.php" method="post" enctype="multipart/form-data">
<input type="text" name="namexx">
<br>
<input type="file" name="filexx">
<br/>
<input type="submit" value="东小东上传">
</form>
PHP:
//error_reporting("E_ALL & ~ E_NOTICE");
//post数据,无文件数据
print_r($_POST);
//文件数据 名字,类型,零时目录,大小等
print_r($_FILES["filexx"]);
//设置保存地址
$filepath="img/".$_POST["namexx"];
//拷贝零时文件到保存目录
if(move_uploaded_file($_FILES["filexx"]["tmp_name"],$filepath)){
echo "上传成功";
}else{
echo "上传失败";
}
文件上传错误值:
28、多文件上传基本思路:利用文件数组
<input type="file" name="filexx[]" multiple>
29、文件下载:通过返回头告诉客户端此为附件即可
//告诉浏览器此文件为附件(可下载,不用浏览器解析)
header("Content-Disposition:attachment;filename=任意文件名1");
//输出内容
readfile("任意文件名1");
PHP文件上传
文件上传是 PHP 文件系统的重要功能之一,要使用文件上传功能,我们首先需要在配置文件 php.ini 中对上传做一些设置;然后通过预定义变量 $_FILES 对上传文件做一些限制和判断;最后使用 move_uploaded_file() 函数来实现上传。
1. 文件上传的配置
实现文件上传功能,首先要在 php.ini 中开启文件上传,并对其中的一些参数作出合理的设置。找到 Uploads 项,可以看到下面 3 个属性值,其含义如下:
- file_uploads:如果值是 on,则说明服务器开启了文件上传功能:如果为 off,则说明服务器关闭了文件上传功能;
- upload_tmp_dir:上传文件的临时目录。在文件被成功上传之前,文件首先会存放到服务器端的临时目录中,不设置的为系统默认的目录;
- upload_max_filesize:服务器允许上传文件的最大值,以MB为单位,系统默认为2MB,用可以自行设置。
除了 File Uploads 项,还有几个属性也会影响到上传文件的功能:
- max_execution_time:PHP 中一个指令所能执行的最大时间,单位是秒;
- memory_limit:PHP 中一个指令所分配的内存空间,单位是 MB。
一般情况下将 php.ini 配置称下面的样子即可,当然也可以根据自己的需求做相应的调整。
; Whether to allow HTTP file uploads.
; http://php.net/file-uploads
file_uploads = On
; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
; http://php.net/upload-tmp-dir
;upload_tmp_dir =
; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 100M
; Maximum number of files that can be uploaded via a single request
max_file_uploads = 100
; Maximum amount of memory a script may consume (128MB)
; http://php.net/memory-limit
memory_limit=256M
; Maximum execution time of each script, in seconds
; http://php.net/max-execution-time
; Note: This directive is hardcoded to 0 for the CLI SAPI
max_execution_time = 300
文件上传项目项在
php.ini
中设置,常用的配置项有:
序号 | 配置项 | 默认值 | 描述 |
---|---|---|---|
1 | file_uploads |
On |
使 PHP 支持文件上传 |
2 | upload_tmp_dir |
/tmp |
指示应该临时把上传的文件存储在什么位置 |
3 | max_file_uploads |
20 |
单次请求时允许上传的最大文件数量 |
4 | max_execution_time |
30 |
设置脚本被解析器终止之前PHP最长执行时间(秒) ,防止服务器资源被耗尽 |
5 | max_input_time |
60 |
设置 PHP 通过 POST/GET/PUT 解析接收数据的时长(秒) |
6 | memory_limit |
128M |
系统分配给当前脚本执行可用的最大内存容量 |
7 | post_max_size |
8M |
允许的 POST 数据的总大小 |
8 | upload_max_filesize |
32M |
允许的尽可能最大的文件上传 |
2. 预定义变量$_FILE
$_FILES 变量存储的是上传文件的相关信息,这些信息对于上传功能有很大的作用。该变量是一个二维数组。
- 上传文件的描述信息,全部保存在系统全局变量
$_FILES
中 $_FILES
以二维数组形式保存:$_FILES['form_file_name']['key']
'form_file_name'
: 对应着表单中<input type="file" name="my_pic">
中name
属性值'key'
: 共有 5 个键名, 描述如下:
序号 | 键名 | 描述 |
---|---|---|
1 | name |
文件在客户端的原始文件名(即存在用户电脑上的文件名) |
2 | type |
文件的 MIME 类型, 由浏览器提供, PHP 并不检查它 |
3 | tmp_name |
文件被上传到服务器上之后,在临时目录中临时文件名 |
4 | error |
和该文件上传相关的错误代码 |
5 | size |
已上传文件的大小(单位为字节) |
- 文件上传错误信息描述
序号 | 常量 | 值 | 描述 |
---|---|---|---|
1 | UPLOAD_ERR_OK |
0 |
没有错误发生,文件上传成功 |
2 | UPLOAD_ERR_INI_SIZE |
1 |
文件超过php.ini 中upload_max_filesize 值 |
3 | UPLOAD_ERR_FORM_SIZE |
2 |
文件大小超过表单中MAX_FILE_SIZE 指定的值 |
4 | UPLOAD_ERR_PARTIAL |
3 |
文件只有部分被上传 |
5 | UPLOAD_ERR_NO_FILE |
4 |
没有文件被上传 |
6 | UPLOAD_ERR_NO_TMP_DIR |
6 |
找不到临时文件夹 |
7 | UPLOAD_ERR_CANT_WRITE |
7 |
文件写入失败 |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>PHP文件上传</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="upfile">
<input type="submit" value="上传">
</form>
</body>
</html>
<?php
if(!empty($_FILES)){
// $_FILES["file"]["error"] 由文件上传导致的错误代码
if ($_FILES["upfile"]["error"] > 0)
{
echo "Error: " . $_FILES["upfile"]["error"] . "<br />";
}
else
{
// 被上传文件的名称
echo "Upload: " . $_FILES["upfile"]["name"] . "<br />";
// 被上传文件的类型
echo "Type: " . $_FILES["upfile"]["type"] . "<br />";
// 被上传文件的大小,字节 byte
echo "Size: " . ($_FILES["upfile"]["size"] / 1024) . " Kb<br />";
// 存储在服务器的文件的临时副本的名称
echo "Stored in: " . $_FILES["upfile"]["tmp_name"];
}
}
?>
3. 单文件上传
通过上面的代码我们已经可以获取到上传文件的信息了,通过这些信息再联合 move_uploaded_file() 函数就可以实现文件上传。move_uploaded_file() 函数的主要功能就是将上传的文件移动到新的位置,执行成功时返回 TRUE,否则返回 FALSE
move_uploaded_file(string $filename, string $destination)
其中,$filename 为上传文件的文件名;$destination 为文件要移动到的位置。
注意:$filename 接受的是文件上传后的临时名称而不是文件的原名称,它可以通过
$_FILES["upfile"]["tmp_name"]
得到
文件上传一般有下面2种方式:
1、标准input表单方式,典型的用$_FILES进行接收;
2、以Base64的方式进行传送,一般是AJAX异步上传。
<form>
标签的 enctype 属性规定了在提交表单时要使用哪种内容类型。在表单需要二进制数据时,比如文件内容,请使用 “multipart/form-data”。<input>
标签的 type=”file” 属性规定了应该把输入作为文件来处理。举例来说,当在浏览器中预览时,会看到输入框旁边有一个浏览按钮。action=""
表示当前页面提交,method=”post”传输方式为post
前端表单上传文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>PHP文件上传</title>
</head>
<body>
<form action="./upload_file.php" method="post" enctype="multipart/form-data">
<fieldset>
<legend>单文件上传</legend>
<input type="file" name="file">
<input type="submit" value="上传">
</fieldset>
</form>
</body>
</html>
后端文件上传限制
<?php
/**
* 文件上传 :客户端上传文件到服务器, 首先存在临时文件夹下, 做一些严格的验证(大小, 后缀,合法文件,),通过以后,移动文件到指定的文件夹
*/
// 在php文件开头调用以下函数 ini_set()设置php配置文件的单个属性
//报告所有错误
error_reporting(E_ALL);
// 接收错误信息但不打印
ini_set("display_errors", "Off");
// 开启错误日志
ini_set("log_errors", "On");
// 设置错误日志文件路径
ini_set("error_log", "./error.log");
if(!empty($_FILES)){
printf('<pre>%s</pre>',print_r($_FILES,true));
// 允许上传的图片后缀
$allowExts = ['jpg','jpeg','pjpeg','png','wbmp','gif'];
$temp = explode(".", $_FILES["file"]["name"]);
// 获取文件后缀名
$extension = array_pop($temp);
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "image/wbmp"))
&& in_array($extension, $allowExts)){
if ($_FILES["file"]["error"] > 0)
{
switch($_FILES["file"]["error"]) :
case 1:
echo '文件超过`php.ini`中`upload_max_filesize`值<br>';
break;
case 2:
echo '文件大小超过表单中`MAX_FILE_SIZE`指定的值<br>';
break;
case 3:
echo '文件只有部分被上传<br>';
break;
case 4:
echo '没有文件被上传<br>';
break;
case 6:
echo '找不到临时文件夹<br>';
break;
case 6:
echo '文件写入失败<br>';
break;
default:
echo 'Error: 系统错误<br>';
break;
endswitch;
}else{
$maxSize = '2MB';
// 检查文件上传大小 需小于2MB
if($_FILES["file"]["size"] > intval($maxSize)*1024*1024){
die("图片超大,请上传小于5MB的图片!");
}
// 检测图片是否合法
if(!getimagesize($_FILES['file']['tmp_name'])){
die("不是真实图片内容,get out~");
}
// 检测图片是否通过http post方式上传
if(!is_uploaded_file($_FILES['file']['tmp_name'])){
die("上传方式错误:请使用http post方式上传");
}
// 检测uploads文件夹是否存在
$destination = "uploads/";
// 如果没有 uploads 目录,你需要创建它,uploads 目录权限为 777
if(!file_exists($destination))
{
// 不存在则创建uploads文件夹
mkdir($destination,0777,true);
chmod($destination,0777);
}
// 判断当前目录下的 uploads 目录是否存在该文件
if (file_exists($destination . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " already exists. ";
}else{
$tmpname = $_FILES['file']['tmp_name']; // 临时文件名称
$name = $_FILES['file']['name']; // 文件的原名称
$path = './uploads'; // 上传目录
$file_name = date('YmdHis').rand(100,999).$name;// 避免文件重名,更改文件名称
// 检测是否上传成功
if(move_uploaded_file($tmpname, $path.'/'.$file_name)){
echo $name." 上传成功!<br>";
echo "<img src='./$path/$file_name' width='100'>";
}else{
echo $name." 上传失败!";
}
}
}
}else {
echo "非法的文件格式 Invalid file";
}
}
?>
4. 多文件上传
前面我们成功上传了一个文件,但有些时候我们往往需要一次上传多个文件。例如上传相片到博客就需要多个文件同时上传。实现多文件上传也非常简单
在使用 input 上传图片的时候,为了避免用户选择非图片的文件,于是就在 input 标签里面加入了 accept="image/*" 来规定能够上传的文件类型。
multiple支持一次选多个文件,pic[]以数组的形式接收多个文件。手机端端还可以加入参数capture=”camera”选择摄像头拍照上传。
使用multipart属性可以支持多文件上传,允许选中多个文件。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>PHP多文件上传</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="pic[]" multiple capture accept="image/*" >
<input type="submit" value="上传">
</form>
</body>
</html>
<?php
if(!empty($_FILES)){
$tmpname = $_FILES['pic']['tmp_name'];
$name = $_FILES['pic']['name'];
$path = './uploads';
for ($i=0; $i < count($tmpname); $i++) {
$file_name = date('YmdHis').rand(100,999).$name[$i];
if(move_uploaded_file($tmpname[$i], $path.'/'.$file_name)){
echo $name[$i].' 上传成功!<br>';
}else{
echo $name[$i].' 上传失败!<br>';
}
}
}
?>
$_FILES数据格式
array(1) {
["pic"] => array(5) {
["name"] => array(2) {
[0] => string(5) "1.jpg"
[1] => string(5) "2.jpg"
}
["type"] => array(2) {
[0] => string(10) "image/jpeg"
[1] => string(10) "image/jpeg"
}
["tmp_name"] => array(2) {
[0] => string(27) "C:\Windows\Temp\php7A7E.tmp"
[1] => string(27) "C:\Windows\Temp\php7A7F.tmp"
}
["error"] => array(2) {
[0] => int(0)
[1] => int(0)
}
["size"] => array(2) {
[0] => int(77357)
[1] => int(56720)
}
}
}
不使用multipart属性,设置表单不同的name:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>PHP多文件上传</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="id_pic_1" accept="image/*" /><br>
<input type="file" name="id_pic_2" accept="image/*" /><br>
<input type="file" name="id_pic_3" accept="image/*" /><br>
<input type="submit" value="上传">
</form>
</body>
</html>
<?php
if(!empty($_FILES)){
foreach($_FILES as $k=>$v){
$tmpname = $v['tmp_name'];
$name = $v['name'];
$path = './uploads';
$file_name = date('YmdHis').rand(100,999).$name;
if(move_uploaded_file($tmpname, $path.'/'.$file_name)){
echo $name.' 上传成功!<br>';
}else{
echo $name.' 上传失败!<br>';
}
}
}
?>
$_FILES数据格式
array(1) {
["id_pic_1"] => array(5) {
["name"] => string(5) "1.jpg"
["type"] => string(10) "image/jpeg"
["tmp_name"] => string(27) "C:\Windows\Temp\phpBBEE.tmp"
["error"] => int(0)
["size"] => int(77357)
}
["id_pic_2"] => array(5) {
["name"] => string(5) "2.jpg"
["type"] => string(10) "image/jpeg"
["tmp_name"] => string(27) "C:\Windows\Temp\phpBBEF.tmp"
["error"] => int(0)
["size"] => int(56720)
}
["id_pic_2"] => array(5) {
["name"] => string(5) "2.jpg"
["type"] => string(10) "image/jpeg"
["tmp_name"] => string(27) "C:\Windows\Temp\phpBBEF.tmp"
["error"] => int(0)
["size"] => int(56720)
}
}
5. 设置PHP错误提示
第一种修改配置文件php.ini,将前面;分号去掉开启对应的配置项
# 错误级别
; error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT # 生产
; error_reporting = E_ALL | E_STRICT # 默认
error_reporting = E_ALL # 开发
# 是否显示错误信息
# 开启状态下,若出现错误,则报错,出现错误提示
; display_errors = On
# 关闭状态下,若出现错误,则提示:服务器错误。但是不会出现错误提示
dispaly_errors = Off
# 接收但不显示错误信息的时候,可以开启错误报告
log_errors = On
# 设置错误报告文件路径
error_log="D:\UPUPW\Apache\logs\php_errors.log"
第二种单个脚本文件中设置
// 在php文件开头调用以下函数 ini_set()设置php配置文件的单个属性
//禁用错误报告
// error_reporting(0);
//报告运行时错误
// error_reporting(E_ERROR | E_WARNING | E_PARSE);
//报告所有错误
error_reporting(E_ALL);
// 接收错误信息但不打印
ini_set("display_errors", "Off");
// 开启错误日志
ini_set("log_errors", "On");
// 设置错误日志文件路径
ini_set("error_log", "./error.log");
// 输入一个未定义的变量
echo $s;
这时候我们同级目录下就会生成一个error.log文件存放着错误信息
[15-May-2021 15:48:51 Asia/Shanghai] PHP Notice: Undefined variable: s in E:\zhang\0514\upload_file.php on line 21
封装文件上传
目录结构为:
test
|-----upload # 文件上传的目录
|-----form.html # 表单文件
|-----upload_file.php # php 上传代码
根据需求封装文件上传限制函数:
- 文件大小不超过5M
- 后缀只能是[‘jpg’,’jpeg’,’png’,’wbmp’,’gif’]
- 检查图片合法性
- 为每一张图片处理散列名称
- 目标目录不存在,创建目录
- 设置错误日志接收系统错误
<?php
/*
封装文件上传函数
*/
function uploadFile(array $fileInfo,$uploadPath="./uploads/",$flag = true,array $allowExts=['jpg','jpeg','png','wbmp','gif'],$maxSize="5MB"){
if(!empty($fileInfo)){
if ($fileInfo['error']>0) {
switch($fileInfo['error']) :
case 1:
$res['mess'] = '文件超过`php.ini`中`upload_max_filesize`值<br>';
break;
case 2:
$res['mess'] = '文件大小超过表单中`MAX_FILE_SIZE`指定的值<br>';
break;
case 3:
$res['mess'] = '文件只有部分被上传<br>';
break;
case 4:
$res['mess'] = '没有文件被上传<br>';
break;
case 6:
$res['mess'] = '找不到临时文件夹<br>';
break;
case 6:
$res['mess'] = '文件写入失败<br>';
break;
default:
$res['mess'] = 'Error: 系统错误<br>';
break;
endswitch;
return $res['mess'];
}else{
// 按照指定字符拆分为数组
$temp = explode(".",$fileInfo["name"]);
// 获取文件后缀名
$extension = array_pop($temp);
if(!in_array($extension, $allowExts)){
$res['mess'] = ("该文件格式占不支持!");
}
$maxSize = '2MB';
// 检查文件上传大小 需小于2MB
if($fileInfo["size"] > intval($maxSize)*1024*1024){
$res['mess'] = ("图片超大,请上传小于{$maxSize}的图片!");
}
if($flag){
// 检测图片是否合法
if(!getimagesize($fileInfo['tmp_name'])){
$res['mess'] = ("不是真实图片内容,get out~");
}
}
// 检测图片是否通过http post方式上传
if(!is_uploaded_file($fileInfo['tmp_name'])){
$res['mess'] = ("上传方式错误:请使用http post方式上传");
}
// 如果以上发生错误,就直接return结束返回错误内容
if(!empty($res['mess'])){
return $res['mess'];
}
// 检测uploads文件夹是否存在
// 如果没有 uploads 目录,你需要创建它,uploads 目录权限为 777
if(!file_exists($uploadPath))
{
// 不存在则创建uploads文件夹
mkdir($uploadPath,0777,true);
chmod($uploadPath,0777);
}
// 判断当前目录下的 uploads 目录是否存在该文件
if (file_exists($uploadPath . $fileInfo["name"]))
{
echo $fileInfo["name"] . " already exists. ";
}else{
$tmpname = $fileInfo['tmp_name']; // 临时文件名称
$name = $fileInfo['name']; // 文件的原名称
$file_name = md5(date('YmdHis')).rand(100,999).'.'.$extension; // 避免文件重名,更改文件名称
$fileRealPath = $uploadPath.$file_name;
// 检测是否上传成功
if(move_uploaded_file($tmpname, $fileRealPath)){
$res['mess'] = $name."图片上传成功!";
$res['imgurl'] = $fileRealPath;
}else{
$res['mess'] = $name."图片上传失败!请检查网络状况……";
}
return $res['mess'];
}
}
}
}
?>
利用form表单进行上传
<?php
//报告所有错误
error_reporting(E_ALL);
// 接收错误信息但不打印
ini_set("display_errors", "Off");
// 开启错误日志
ini_set("log_errors", "On");
// 设置错误日志文件路径
ini_set("error_log", "./error.log");
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>PHP文件上传</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
<fieldset>
<legend>单文件上传</legend>
<input type="file" name="file" accept="image/*">
<input type="submit" value="上传">
</fieldset>
</form>
</body>
</html>
<?php
require "./common.php";
/*
uploadFile()函数参数分别为
$_FILES['file'] array
文件存放文件夹 string
是否检测图片合法性 Boolean
支持的图片格式 array
图片最大格式'2MB' string
*/
if(!empty($_FILES['file'])){
$res = uploadFile($_FILES['file'],"./static/");
echo $res['mess']."<br>";
$url = $res['imgurl']??null;
echo !empty($url)?"<img src='$url' width='100'>":'';
}
?>
使用formData上传
var formData = new FormData();
formData.append("file", file); //file是blob数据
//再用ajax发送formData到服务器即可,注意一定要是post方式上传
使用fileReader读取文件数据进行上传
var fr = new FileReader();
fr.readAsDataURL(file);
fr.onload = function (event) {
//此处获得的data是base64格式的数据
var data= event.target.result;
img.src = data;
ajax(url,{data} ,function(){})
}
// data可以用来实现图片上传前的本地预览,也可以用来发送base64数据给后端然后返回该数据块对应的地址。