【www.shanpow.com--手抄报图片】
finfo篇(1):使用finfo
在输入输出中,文件的交互必不可少,比如文件的上传什么的。这里我们来解决一个小问题,就是如何判断用户上传文件的文件类型。
举一个应用场面:在我们的Web应用中,比如用户上传头像,要求是png,jpg,gif格式,接收到图片后会根据图片格式类型做不同的头像切割处理,但个别用户会传一些只更改过文件后缀的非标准图片,比如nowamagic.jpg 强行修改成 nowamagic.png,这样程序无法对该类型图片进行切割,切割失败。这个时候就需要对文件进行检测,并且仅仅根据后缀来判断是不行的。
这种这么常见的需求,PHP肯定自带了某些函数来实现的,这个函数就是 finfo_file。
finfo_file
(PHP >= 5.3.0, PECL fileinfo >= 0.1.0)
finfo_file -- finfo::file — Return information about a file,This function is used to get information about a file.
函数很简单,看看官方文档就大概清楚了,这里就举一个使用例子吧,就是上传一张图片,并判断它的类型:
01
<html>
02
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
03
<head>
04
<title>文件上传</title>
05
</head>
06
<body>
07
<form accept="" method="post" enctype="multipart/form-data">
08
<input type="file" name="img[]" /><br />
09
<input type="submit" name="s" /><br />
10
</form>
11
12
<?php
13
//上传文件信息
14
$img = $_FILES["img"];
15
if ($img)
16
{
17
//文件存放目录,和本php文件同级
18
$dir = dirname(__file__);
19
20
$filename = $img["name"][0];
21
$tempname = $img["tmp_name"][0];
22
23
$savepath = "$dir\\$filename";
24
$state = move_uploaded_file($tempname, $savepath);
25
//如果上传成功,预览
26
if($state)
27
{
28
echo "<img src="$filename" alt="$filename" /> ";
29
}
30
31
$finfo = finfo_open(FILEINFO_MIME_TYPE);
32
//$mime = finfo_file($finfo, dirname(__FILE__)."/".$filename);
33
$mime = finfo_file($finfo, $savepath);
34
echo $mime;
35
36
}
37
?>
38
</body>
39
</html>
需要注意的是,finfo_file 函数需要 PHP 版本 >= 5.3.0,如果低于 5.3,那么需要到 php.ini 里,将 extension=php_fileinfo.dll 前面的分号去掉来启用。
当然,检测文件类型的方式很多种,后面我们会慢慢讲到。
finfo篇(2):FATFS读取数据问题(实例2) (amoBBS 阿莫电子论坛)
/*
说明:
* 下面的函数是测试把跟目录中的txt文件读出,并把内容拷贝到在根目录下新建立的a2.txt中
* 下面测试的条件是TF卡中必须有一个.txt的文件,并且.txt文件里面有内容,.txt文件必须在跟目录下
* 通过调用f_read(&fsrc, buffer, sizeof(buffer), &br),然后读取br可以得到读取数据的大小
* 要注意的是f_close(&fsrc);和f_close(&fdst);千万不要搞混
* 作者:Flame
* 测试时间:20130710
*/
/*void OutPutFile(void)
{
unsigned int a;
FILINFO finfo;
DIR dirs;
char path[50]={""}; //目录名为空,表示是根目录
//开启长文件名功能时, 要预先初始化文件名缓冲区的长度
#if _USE_LFN
static char lfn[_MAX_LFN * (_DF1S ? 2 : 1) + 1];
finfo.lfname = lfn;
finfo.lfsize = sizeof(lfn);
#endif
USART_OUT(USART1,"\n稴TM32开发板文件系统(Tini-FatFS0.08b)启动成功! \n");
disk_initialize(0); //fatfs可以管理多个介质的分区, 所以把物理存储介质SST25VF016B标示为0区,相当于磁盘编号
f_mount(0, &fs); //将文件系统设置到0区
if (f_opendir(&dirs, path) == FR_OK) //读取该磁盘的根目录
{
while (f_readdir(&dirs, &finfo) == FR_OK) //循环依次读取文件名
{
if (finfo.fattrib & AM_ARC) //判断文件属性是否为存档型 TXT文件一般都为存档型
{
if(!finfo.fname[0]) break; //如果是文件名为空表示到目录的末尾。退出
if(finfo.lfname[0]){USART_OUT(USART1,"\r\n文件名是:\n %s\n",finfo.lfname);} //输出长文件名
else{USART_OUT(USART1,"\r\n文件名是:\n %s\n",finfo.fname);} //输出8.3格式文件名
//if(result1!=NULL||result2!=NULL)//是的话就输出文件的内容
{
if(finfo.lfname[0]){res = f_open(&fsrc, finfo.lfname, FA_OPEN_EXISTING | FA_READ);}//以读的方式打开文件
else{res = f_open(&fsrc, finfo.fname, FA_OPEN_EXISTING | FA_READ); }//8.3格式文件名 以读的方式打开文件
res1 = f_open(&fdst, "a2.txt", FA_CREATE_ALWAYS | FA_WRITE); //以写的方式打开文件,如果不存在,就直接建立,如果存在就覆盖掉
br=1;
for (;;)
{ //循环读出被打开文件的扇区
for(a=0; a<512; a++) buffer[a]=0; //因为可以一次读出512字节,先清空数据缓冲区
res = f_read(&fsrc, buffer, sizeof(buffer), &br); //将文件内容读出到数据缓冲区 br存储此次读出数据的数量,最大512
USART_OUT(USART1,"%s\n",buffer); //将缓冲区的内容输出到串口1
if (res || br == 0) break; // error or eof //判断是否到文件结束
res1 = f_write(&fdst, buffer, br, &bw); //将缓冲区的内容写入到目标文件 也就是a2.txt br是在读的时候设置了写入的大小,通过查看br可以确定写入数据的多少
if (res1 || bw < br) break; // error or disk full //如果写入时异常,或者磁盘满,退出
}
f_close(&fsrc); //关闭源文件
//res1 = f_write(&fdst, buffer, br, &bw);在这里可以添加f_write,以便添加其他数据
}
f_close(&fdst);//关闭目标文件 本条函数即时保存写入的数据,又是关闭目标文件,如有很多数据要写入,但不需要现在关闭可以调用f_sync函数,但是调用 f_sync前必蠪S_READONLY == 0可用
}
}
}
}*/
finfo篇(3):xlsfinfo列举当前文件夹里所有的文件与文件夹
功能简介:
列举当前文件夹里(或指定文件夹)所有的文件与文件夹。
Matlab 6.5以后所有版本
使用方法:typ = xlsfinfo(filename)
book.iLoveMatlab.cn
判断文件(filename)是否是Microsof Excel文件。
[typ, desc] = xlsfinfo(filename)把数据表的名称返回到desc中。
[typ, desc, fmt] = xlsfinfo(filename)
Matlab中文论坛
把文件的格式返回到fmt中,比如说CSV or xls等。
xlsfinfo filename简易用法
应用举例:[typ, desc, fmt] = xlsfinfo("myaccount.xls")
book.iLoveMatlab.cn
typ = Microsoft Excel Spreadsheetdesc = "Sheet1" "Income" "Expenses"fmt = xlWorkbookNormal 《Simulink与信号处理》
相关函数:xlsread, xlswrite