热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP学习文件处理与文件上传课件

主要包括php文件处理,文件的处理,文件指针相关处理函数,文件控制函数
主要包括php文件处理,文件的处理,文件指针相关处理函数,文件控制函数

PHP对文件的处理
PHP 在服务器端文件的应用上,相关的范畴不仅仅在于用户与服务器资料库间的各种连接存取操作,也可以通过 PHP 内建的文件处理函数,来进行一般文件处理操作。

basename -- 返回路径中的文件名部分
语法格式:$path = "/home/httpd/html/index.php";
$file = basename($path); // $file is set to "index.php"
$file = basename($path,".php"); // $file is set to "index"

pathinfo():分析文件当前路径
语法格式:$path_parts = pathinfo("/www/htdocs/index.html");
echo $path_parts["dirname"] . "\n"; /www/htdocs 文件路径
echo $path_parts["basename"] . "\n"; index.html 文件与扩展名
echo $path_parts["extension"] . "\n"; html 文件格式

文件类型与相关信息
filesize():计算文件的大小(byte)
语法格式:$bytes=filesize(“a.txt”);
echo $bytes round($bytes/1024,2);
fileatime():文件最后一次访问时间(时间戳)
语法格式:echo date(“Y-m-d g:i:sa”,fileatime);
filectime():文件建立时间
语法格式:echo date(“Y-m-d g:i:sa”,filectime);
filemtime():文件最后一次更新时间
语法格式:echo date(“Y-m-d g:i:sa”,filemtime);
fileperms():文件属性以及权限10进制
语法格式:echo substr(base_convert(fileperms(a.txt),10,8),3);
fileowner():文件所有者的uid(仅在Linux系统下有用)
语法格式:echo fileowner(“a.txt”);

文件的操作
'r' 只读方式打开,将文件指针指向文件头。
'r+' 读写方式打开,将文件指针指向文件头。
'w' 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'w+' 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'a' 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
'a+' 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。

'x' 创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。
'x+' 创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。

fopen() -- 打开文件或者 URL
fclose() -- 关闭一个已打开的文件指针
fread() -- 读取文件内容
fwrite()--写入文件
语法格式:if(!$f=@fopen("file03.php","x")){//打开一个文件 x方法写入
die("文件读取失败"); //读取失败
}
fwrite($f,"kkkkkkkkkk"); //向那个文件写 写什么
echo fread($f,10); //读取这个文件的内容
fclose($f); 关闭打开文件


file() -- 把整个文件读入一个数组中
语法格式:$arr=file("file03.php");
print_r($arr); //读取文件返回数组

readfile() --读入一个文件并写入到输出缓冲。
语法格式:$str=readfile("file03.php");
echo $str; 输出

一个文件记数器的写法:
$f=fopen("file03.php","r");
$i=fread($f,1000);
echo "这是您第{$i}次访问";
fclose($f);
$f=fopen("file03.php","w");
$i++;
fwrite($f,$i);
fclose($f);
"""""""""""""`
file_get_contents() – 将整个文件读入一个字符串
语法格式:file_get_contents(文件名称或URL)

file_put_contents() –?将一个字符串写入文件,和依次调用 fopen(),fwrite() 以及 fclose() 功能一样
file_put_contents(文件名称,写入数据)


feof() -- 测试文件指针是否到了文件结束的位置
ftell() -- 返回文件指针读/写的位置
语法格式ftell(文件指针)
flock() -- 轻便的咨询文件锁定
语法格式:flock(文件指针,控制参数)
文件指针:是一个已经打开(fopen)的文件指针控制参数:
“LOCK_SH”表示要取得共享锁定(读取程序),(PHP4.0.1以前版本设置1)。
“LOCK_EX”表示要取得独占锁定(写入程序),(PHP4.0.1以前版本中设置为 2)。
“LOCK_UN”表示要释放锁定(无论共享或独占),(PHP4.0.1以前版本中设置为 3)。
“LOCK_NB”表示如果你不希望 flock() 在锁定时堵塞,则给控制参数再加上这个参数

fseek( ) -- 在文件指针中定位
语法结构: fseek(文件指针,移动字元数 [,起始位置常数])
文件指针:不能用于在 fopen() 中以 “http://” 或 “ftp://” 格式打开所返回的文件指针。
移动字元数:为正数时,将文件指针向前移动指定个数:为负数时,将文件指针向后移动指定个数:
起始位置常数:
SEEK_CUR - 设定位置为当前位置。
SEEK_SET - 设定位置等于文件开头。(默认值)
SEEK_END - 设定位置为文件尾。


rewind( ) -- 倒回文件指针的位置,也就是将文件指针移向文件的开头位置。
语法结构: rewind(文件指针)
注意:如果将文件以附加(“a” 或者 “a+”)模式打开,写入文件的任何数据总是会被附加在后面,不管文件指针的位置

chgrp( ) -- 改变文件所属的组
语法结构:chgrp(文件名称,群组名称)

filegroup( ) -- 取得文件的组
语法结构:filegroup(文件名称)

chmod( ) -- 改变文件模式
语法结构:chmod(文件名称,权限常数)755 666

chown( ) -- 改变文件的所有者
语法结构:chown(文件名称,使用者)

fileowner( ) -- 取得文件的所有者
语法结构:fileowner(文件名称)
posix_getpwuid() 来将其解析为用户名。



copy( ) -- 拷贝文件
语法结构:copy(来源文件,目的文件)
返回类型:bool型,如果成功则返回 TRUE,失败则返回 FALSE。
参数说明:将来源文件拷贝到目的文件。
unlink( ) -- 删除文件
语法结构:unlink(目标文件)
返回类型:bool型,如果成功则返回 TRUE,失败则返回 FALSE。
参数说明:删除指定的目标文件
rename( ) -- 重命名一个文件或目录
语法结构:rename(旧文件名,新文件名)
返回类型:bool型,如果成功则返回 TRUE,失败则返回 FALSE。
参数说明:尝试把旧文件名重命名为新文件名。

文件属性处理
file_exists( ) -- 检查文件或目录是否存在
语法结构:file_exists(文件名称)
返回类型:bool型,若存在返回 true,否则返回 false。
filesize( ) -- 取得文件大小
语法结构:filesize(文件名称)
返回类型:返回文件大小字节数,若出错返回 false.
filetype( ) -- 取得文件类型
语法结构:filetype(文件名称)
返回类型:返回文件类型。可能的值有 fifo,char,dir,block,link,file 和 unknown。 出错则返回 false
is_dir( ) -- 判断给定文件名是否是一个目录
语法结构:is_dir(名称)
返回类型:如果文件名存在并且是一个目录则返回 true,否则返回 false。
is_executable( ) -- 判断给定文件名是否可执行
语法结构:is_executable(名称)
返回类型:如果文件存在且可执行则返回 TRUE,否则返回 FALSE。
is_file( ) -- 判断给定文件名是否为一个正常的文件
语法结构:is_file(名称)
返回类型:如果文件存在且为正常的文件则返回 TRUE。
is_link( ) -- 判断给定文件名是否为一个符号连接
语法结构:is_link(名称)
返回类型:如果文件存在并且是一个符号连接则返回 true。
is_readable( ) -- 判断给定文件名是否可读
语法结构:is_readable(文件名称)
返回类型:如果文件存在并且可读则返回 TRUE。
is_writable( ) -- 判断给定的文件名是否可写
语法结构:is_writable(文件名称)
返回类型:如果文件存在并且可写则返回 TRUE。


实现iterator接口的目录读取
Iterator接口的标准方法
current():返回当前列表(list)中的元素值。
next():用于在一个列表中向下移动一个位置。
valid():检测在当前列表中是否还有下一个元素,如果有,返回true,否则返回false。
rewind():可以访问指定特征的元素列表,在开始操作iterator时,会将指针设置在顶部。

DirectoryIterator自定义的类
getATime ():文件最后访问时间
getCTime ():文件最后的修改时间
getGroup ():文件所属组(仅UNIX)
getInode ():文件的节点(仅UNIX)
getOwner ():文件的宿主(仅UNIX)
getPerms ():访问该文件的权限
getSize ():文件的大小
getType ():文件的类型
getFileName ():文件的名称
getPath ():文件的路径
isDir ():是否是目录
isExecutable ():是否可以执行
isFile ():是否是文件
isLink ():是否是软链接文件
isReadable ():是否可读
isWritable ():是否可写
isDot ()方法分别过滤掉“.”和“..”目录。


$dname=$_GET["dname"]; //获取from表的信息
if(isset($dname)&&!empty($dname)){ //判断变量是否被设置 检测一个变量是否为空
$dir=new DirectoryIterator("{$dname}"); //new一个类
echo $dir->getPath()." //类的方法
}else{
$dir=new DirectoryIterator("D:\\"); //new d://目录
echo $dir->getPath();
}
$delname=$_GET["del"];
if(isset($delname)&&!empty($delname)){
if(unlink("{$dir->getPath()}\\$delname"))
echo "删除成功";
}

while($dir->valid()){
if($dir->isDir())
echo "getPath()}\\{$dir->current()}'>".
"{$dir->current()}

";
else
echo "{$dir->current()} 复制".
" current()}'>删除
";
$dir->next();
}

范例2:function showdir($iter){ //设置一个函数方法 并赋值
for(;$iter->valid();$iter->next()){ //检测目录是否还有下一个目录 想下移动一位
if($iter->isDir() && $iter->isDot()){//检测是否是目录 并过滤掉.和..目录位置
echo "目录".$iter->current()."
"; //指向返回列表元素的值
}else{
echo $iter->current().$iter->getSize()."字节
"; 反则 返回列表的值 并查看文件大小
}
}
}
showdir(new DirectoryIterator("C:/")); //传参 new一个系统默认类
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

PHP文件上传
与文件系统和服务器的交互
文件上传`使用目录函数 `与文件系统的交互`使用程序执行函数`与环境变量交互


文件上传
在B/S程序中文件上传已经成为一个常用功能。其目的是客户可以通过浏览器(Browser)将文件上传到服务器(Server)上的指定目录
PHP中文件上传的基础知识
表单提交`对文件的操作

何为文件上传?
为了满足传递文件信息的需要:HTTP协议实现了文件上传机制,从而可以将客户端的文件通过自己的浏览器上传到服务器上指定目录存放。
HTML规范规定上传文件时表单头必须使用



//返回值 post 方式上传 表示要上传一个文件

上传文件:
提交:



注意几个特征属性:
POST方法:
表单最常用的功能,向目标页面传递变量,我们在上传文件的时候,会在表单中设置相应的属性,来完成文件的传递.
enctype="multipart/form-data"
这样服务器就会知道,我们要传递一个文件,这样服务器可以知道上载的文件带有常规的表单信息。
MAX_FILE_SIZE
此字段必须在文件输入字段之前,控制最大的传递文件的大小(字节) ——真的可以控制吗?

设置浏览器文件输入浏览按钮

我们在服务器端的php.ini中设置对表单传递的数据进一步判断
file_uploads = On /Off 是否允许文件上传
upload_max_filesize = 2M 上传的文件的最大大小
post_max_size = 8M POST数据所允许的最大大小
表单传递的数据,文件只是其中的一部分,所以设置时,upload_max_filesize应该小于post_max_size


超级全局数组$_FILES
PHP程序中,需要处理的上传数据保存在全局数组中$_FILES(超级全局数组)
保存$_FILES数组中的元素,将HTML表单的type="file"标记的名称name="userfile" 存放在数组中。
存储在$_FILES['userfile']['name']中的值是:客户端文件系统的文件的名称
存储在$_FILES['userfile']['type']中的值是:客户端传递的文件的类型
存储在$_FILES['userfile']['size']中的值是:文件的字节的大小
存储在$_FILES['userfile']['tmp_name']中的值:文件被上传后在服务器存储的临时全路径
""""""""""""""`
存储在$_FILES['userfile']['error']中的值是:文件上传的错误代码-php 4.2以后增加的功能
存储在$_FILES['userfile']['error']中的值
值为0:表示没有发生任何错误。
值为1:表示上传文件的大小超出了约定值。文件大小的最大值是在PHP配置文件中指定的,该指令是:upload_max_filesize。
值为2:表示上传文件大小超出了HTML表单隐藏域属性的MAX_FILE_SIZE元素所指定的最大值。
值为3:表示文件只被部分上传。
值为4:表示没有上传任何文件。
""""""""""""
is_uploaded_file( )检测是否是上传文件
move_uploaded_file(临时路径/临时文件名,目的路径/目的文件名 ) 函数将存放在临时目录下的上传文件拷贝出来,存放到指定目录的指定文件名,如果目标存在将会被覆盖。
范例:print_r($_FILES["upfile"]);//将表单提交的系统存放在这
echo "文件名字".$_FILES["upfile"]["name"];//文件名字
if($_FILES["upfile"]["error"]<=1){//错误代码小于1 大于1表示有错误
echo "请选择文件";
}
if(is_uploaded_file($_FILES["upfile"]["tmp_name"])){//检测这个文件是否是上传文件 文件的临时路径
echo &#39;是上传文件&#39;;
move_uploaded_file($_FILES["upfile"]["tmp_name"],"./upload/".$_FILES["upfile"]["name"]);
//将临时文件转移到upload目录 文件名 为原名
}else{
echo &#39;不是上传文件&#39;;
}
文件上传后的临时存放目录

上传的文件被放置到服务器端临时目录:/tmp目录里面 命名为一个唯一的,随机生成的临时文件名。 注:该文件在程序执行完后将自动被删除掉。在删除前可以像本地文件一样操作。
/tmp目录是默认的上传临时文件存放地点, 如果需要更改这个目录: 可以编辑/etc/php.ini 文件File Uploads 段的upload_tmp_dir 属性值。
当配置文件php.ini的register_globals属性被设置成on的情况

将生成全局变量:$myfilename等

"""""""""""""""``
当需要上传多个文件的情况,有两种实现的解决方法:
使用不同的表单元素


使用数组格式的表单元素


""""""""""""""""`
使用目录函数
opendir?--?打开目录句柄
closedir?--?关闭目录句柄
readdir?--?从目录句柄中读取条目
语法格式:$d=opendir("./upload"); //打开这个文件目录
while($s=readdir($d)){ //循环输出读取到的条目
echo $s."
";
}
closedir($d); //关闭句柄

创建和修改目录
mkdir?--?新建目录
rmdir?--?删除目录
mkdir("D:\\up");//创建一个目录
rmdir("up");//删除一个目录

磁盘操作
disk_free_space():统计某个磁盘的剩余空间
disk_total_space():显示逻辑磁盘的容量
echo disk_free_space("D:\\")/1024/1024/1024;
echo disk_total_space("D:\\")/1024/1024/1024;
getcwd():返回当前脚本所在路径
chdir():类似DOS的cd命令,改变当前路径
echo getcwd();//查看当前脚本路径
chdir("D:\\");//改变

使用程序执行函数
exec( ) 函数可以将要执行的命令作为参数。
passthru( ) 结果直接输出显示到浏览器。
system( )也是直接输出显示到浏览器,但有返回值

推荐阅读
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文介绍了使用CentOS7.0 U盘刻录工具进行安装的详细步骤,包括使用USBWriter工具刻录ISO文件到USB驱动器、格式化USB磁盘、设置启动顺序等。通过本文的指导,用户可以轻松地使用U盘安装CentOS7.0操作系统。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
author-avatar
郭原雪2865
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有