码迷,mamicode.com
首页 > Web开发 > 详细

文件的基本操作二与文件的上传和下载 (45)

时间:2015-06-07 18:49:39      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:

访问远程文件

??如果需要访问远程文件,必须在PHP的配置文件中激活“allow_url_fopen”选项,才能使用fopen( )函数打开运程文件。而且还要确定其他服务器中的文件是否访问权限,如果使用PHP协议对远程文件进行链接,只能以“只读”模式打开。如果需要访问的远程FTP服务器中,对所提供的用户开启了“可写”权限,则使用FTP协议链接远程的文件时,就可以使用“只写”或“只读”模式打开文件。但不可以使用“可读可写”的模式。
??使用PHP访问远程文件就像访问本地文件一样,都是使用相同的读写函数处理。
??$file=fopen(“http://www.ss.com/”,”r”) or die(“打开远程文件失败!!”);
??$file=fopen(“ftp://user:password@ftp.ss.net/path/to/file”,”w”);

移动文件指针

??ftell--返回文件指针读/写的位置
??语法:intftell( resource handle )
??返回由handle 指定的文件指针的位置,也就是文件流中的偏移量。如果出错,返回FALSE。文件指针必须是有效的,且必须指向一个通过fopen()或popen()成功打开的文件。
??fseek--在文件指针中定位
??语法:intfseek( resource handle, intoffset [, intwhence] )
??在与handle关联的文件中设定文件指针位置。新位置,从文件头开始以字节数度量,是以whence指定的位置加上offset。whence的值定义为:
??SEEK_SET -设定位置等于offset字节。
??SEEK_CUR -设定位置为当前位置加上offset。
??SEEK_END -设定位置为文件尾加上offset。(要移动到文件尾之前的位置,需要给offset传递一个负值。)
??如果没有指定whence,默认为SEEK_SET。
??成功则返回0;否则返回-1。注意移动到EOF 之后的位置不算错误

rewind--倒回文件指针的位置
??语法:boolrewind ( resource handle )
??将handle的文件位置指针设为文件流的开头。如果成功则返回TRUE,失败则返回FALSE。文件指针必须合法,并且指向由fopen()成功打开的文件。

文件的锁定机制

??flock--轻便的咨询文件锁定
??语法:boolflock ( inthandle, intoperation [, int&wouldblock] )
??PHP 支持以咨询方式(也就是说所有访问程序必须使用同一方式锁定, 否则它不会工作)锁定全部文件的一种轻便方法。
??handle必须是一个已经打开的文件指针。
??operation可以是以下值之一:
??要取得共享锁定(读取程序),将operation设为LOCK_SH。
??要取得独占锁定(写入程序),将operation设为LOCK_EX。
??要释放锁定(无论共享或独占),将operation设为LOCK_UN。
??如果你不希望flock() 在锁定时堵塞,则给operation加上LOCK_NB。
??如果成功则返回TRUE,失败则返回FALSE。

文件的一些基本操作函数

??copy--拷贝文件
??语法:boolcopy ( string source, string dest)
??将文件从source拷贝到dest。如果成功则返回TRUE,失败则返回FALSE。
??unlink--删除文件
??语法:boolunlink ( string filename )
??删除filename。和Unix C 的unlink() 函数相似。如果成功则返回TRUE,失败则返回FALSE。
??ftruncate--将文件截断到给定的长度
??语法:boolftruncate( resource handle, intsize )
??接受文件指针handle作为参数,并将文件大小截取为size。如果成功则返回TRUE,失败则返回FALSE。
??rename--重命名一个文件或目录
??语法:boolrename ( string oldname, string newname[, resource context] )
??尝试把oldname重命名为newname。如果成功则返回TRUE,失败则返回FALSE。

文件的上传与下载

文件上传

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

HTML规范规定上传文件时表单头必须使用
<html>
<head><title>文件上传</title></head>
<body>
<form action="todo.php" method="post"
enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE"
value="100000">
上传文件:<input type="file"name="userfile">
提交:<input type="submit" value="提交查询">
</form>
</body>
</html>

注意几个特征属性:

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

php.ini文件上传参数设置

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

超级全局数组$_FILES

PHP程序中,需要处理的上传数据保存在全局数组中$_FILES(超级全局数组)
??保存$_FILES数组中的元素,将HTML表单的type="file"标记的名称name="userfile" 存放在数组中。
1:存储在$_FILES[‘userfile‘][‘name‘]中的值是:
??客户端文件系统的文件的名称
2:存储在$_FILES[‘userfile‘][‘type‘]中的值是:
??客户端传递的文件的类型

3:存储在$_FILES[‘userfile‘][‘size‘]中的值是:
??文件的字节的大小
4:存储在$_FILES[‘userfile‘][‘tmp_name‘]中的值
??文件被上传后在服务器存储的临时全路径
5:存储在$_FILES[‘userfile‘][‘error‘]中的值是:
??文件上传的错误代码-php4.2以后增加的功能

存储在$_FILES[‘userfile‘][‘error‘]中的值

在$_FILES[‘userfile‘][‘error‘]中返回的错误代码是在PHP4.2.0版本中引入的。具体如下:
??值为0:表示没有发生任何错误。
??值为1:表示上传文件的大小超出了约定值。文件大小的最大值是在PHP配置文件中指定的,该指令是:upload_max_filesize。
??值为2:表示上传文件大小超出了HTML表单隐藏域属性的MAX_FILE_SIZE元素所指定的最大值。
??值为3:表示文件只被部分上传。
??值为4:表示没有上传任何文件。

错误值对应的常量

??UPLOAD_ERR_OK :对应值0
??UPLOAD_ERR_INI_SIZE :对应值1
??UPLOAD_ERR_FORM_SIZE :对应值2
??UPLOAD_ERR_PARTIAL :对应值3
??UPLOAD_ERR_NO_FILE :对应值4

数据格式(MIME)

技术分享

文件上传后的临时存放目录

上传的文件被放置到服务器端临时目录:/tmp目录里面
命名为一个唯一的,随机生成的临时文件名。
注:该文件在程序执行完后将自动被删除掉。在删除前可
以像本地文件一样操作。

??/tmp目录是默认的上传临时文件存放地点,
如果需要更改这个目录:
可以编辑/etc/php.ini文件File Uploads 段的
upload_tmp_dir属性值

上传后的文件处理

使用is_uploaded_file( )函数来检查此文件是否是上传文件。
??应该使用move_uploaded_file(临时路径/临时文件名,目的路径/目的文件名)函数将存放在临时目录下的上传文件拷贝出来,存放到指定目录的指定文件名,如果目标存在将会被覆盖。
??当配置文件php.ini的register_globals属性被设置成on的情况
??<input type=file name=myfilename>
??将生成全局变量:$myfilename等

文件上传后的处理页面

<html>
<head> <title>上传文件...</title></head>
<body> <h1>上传文件...</h1>
<?php
if ($_FILES[userfile][error] > 0){
echo 上传错误: ;
switch ($_FILES[userfile][error]){
case 1:
echo ‘上传文件大小超出了PHP配置文件中的约定值:upload_max_filesize;
break;
case 2:
echo 上传文件大小超出了表单中的约定值:max_file_size;
break;
case 3:
echo 文件只被部分上载;
break;
case 4:
echo 没有上传任何文件;
break;
} exit;
}

if ($_FILES[‘userfile‘][‘type‘] != ‘text/plain‘){
echo ‘问题: 文件不是一个文本文件。‘;
exit;
}
$upfile= ‘./uploads/‘.$_FILES[‘userfile‘][‘name‘];
if (is_uploaded_file($_FILES[‘userfile‘][‘tmp_name‘])){
//判断是否为上传文件
if (!move_uploaded_file($_FILES[‘userfile‘][‘tmp_name‘], $upfile)){
//移动文件
echo ‘问题: 不能将文件移动到指定目录。‘;
exit;
}
}else {
echo ‘问题: 上传文件不是一个合法文件: ‘;
echo $_FILES[‘userfile‘][‘name‘];
exit;
}
echo ‘文件上传成功!<br><br>‘;
?>

 

 

文件的基本操作二与文件的上传和下载 (45)

标签:

原文地址:http://www.cnblogs.com/zhenghongxin/p/4556720.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!