PHP与服务器文件系统的简单交互


Posted in PHP onOctober 21, 2016

1、php.ini中关于文件上传的设置指令

PHP与服务器文件系统的简单交互

2、文件上传过程

(1)上传文件提交表单html代码:

<!--向服务器上传文件的HTML表单(限制为文本文件)--> 
<!DOCTYPE html> 
<html lang="en"> 
<head> 
<meta charset="UTF-8"> 
<title>Adminstration - upoload new files</title> 
</head> 
<body> 
<h1>Upload new files</h1> 
<form action="upload.php" method="post" enctyple="multipart/form-data" > 
<!--enctyple:规定在发送到服务器之前对表单数据进行编码的方式(在上传控件时必须按照以上方式设置该属性)--> 
<div> 
<input type="hidden" name="MAX_FILE_SIZE" value="1000000"> 
<!--规定传输文件的最大字节数--> 
<label for="userfile">Upload a file</label> 
<!--在<label>内点击文本,会触发该控件,此时浏览器会自动对焦到标签for属性所指向的表单控件上面--> 
<input type="file" name="userfile" id="userfile"> 
<!--id属性为<label>标签for所指向控件元素的id号--> 
<input type="submit" value="Send File"> 
</div> 
</form> 
</body> 
</html>

(2)php处理上传文件代码

①在php脚本中,需要处理的数据保存在超级变量数组$_FILES中,开启register_globals指令可以直接通过变量名访问这些信息;

②假如表单变量名为“username“则有:

$_FILES['userfile']['tmp_name']:储存文件在Web服务器中的临时保存位置;
$_FILES['userfile']['name']:储存用户系统中文件的名称;
$_FILES['userfile']['size']:储存文件的大小;
$_FILES['userfile']['type']:储存文件的类型;
$_FILES['userfile']['error]:储存任何与文件上传相关的错误代码;

错误类型说明:

UPLOAD_ERR_INI_SIZE:1,上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
UPLOAD_ERR_FORM_SIZE:2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
UPLOAD_ERR_PARTIAL:3,文件只有部分被上传。
UPLOAD_ERR_NO_FILE:4,没有文件被上传。
UPLOAD_ERR_NO_TMP_DIR:6,找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进。
UPLOAD_ERR_CANT_WRITE:7,文件写入失败。PHP 5.1.0 引进。

③php代码

<?php 
//检验文件传输异常 
if($_FILES['userfile']['error']>0){ 
echo 'Problem'; 
switch($_FILES['userfile']['error']){ 
case 1: echo 'File exceeded upload_max_filesize';break; 
case 2: echo 'File exceeded max_file_size';break; 
case 3: echo 'File only partially upload';break; 
case 4: echo 'No file uploaded';break; 
case 6: echo 'Cannot upload file: No temp directory specified';break; 
case 7: echo 'Upload failed:Cannot write to disk';break; 
} 
exit; 
} 
//检验传输的文件是否为文本文件 
if($_FILES['userfile']['type'] != 'text/plain'){ 
echo 'Problem: file is not plain text'; 
exit; 
} 
//将上传文件包含在服务器中/uploads/的目录下(该目录必须独立于Web文档树) 
$upfile = '/uploads/'.$_FILES['userfile']['name']; //在指定目录下以传输文件的文件名创建一个新文件 
if(is_uploaded_file($_FILES['userfile']['tmp_name'])){ 
if(! move_uploaded_file($_FILES['userfile']['tmp_name'],$upfile)){ //将传输文件的临时文件移动到创建的新文件 
echo 'Problem: Could not move file to destination directory'; 
exit; 
} 
} 
else{ 
echo 'Problem: Possible file upload attack.Filename:'; 
echo $_FILES['username']['name']; 
exit; 
} 
echo "File uploaded seuucessfully<br/><br/>"; 
//对传输文件清除html和php标记 
$contents = file_get_contents($upfile); //将文件内容提取为一个字符串; 
$contents = strip_tags($contents); //对该字符串擦除html和tags标记; 
file_put_contents($_FILES['userfile']['name'],$contents); //将该字符串重新写入文件中; 
//在浏览器上显示传输的文本文件内容 
echo "<p>Preview of uploaded file contents:<br/><hr>>"; 
echo nl2br($contents); 
echo "</br></hr>";

3、使用目录函数

(1)从目录中读取文件名

①使用opendir(),readdir(),closedir()函数;

<?php 
$current_dir = '/uploads/'; //创建目录url对象 
$dir = opendir($current_dir); //打开目录,结果返回一个目录对象 
echo "<p>Upload directory is $current_dir</p>"; 
echo "<p>Directory Listing:</p><ul>"; 
while(($file = readdir($dir)) !== false){ //读取目录对象 
if($file != "." && $file != ".."){ //过滤当前目录和上一级目录 
echo "<li>$file</li>"; 
echo "<a href=\"filedetails.php?file=\'.$file.\'\">".$file."</a><br/>"; 
} 
} 
echo "</ul>"; 
closedir($dir); //关闭目录; 
?>

②使用php的dir类

<?php 
$current_dir = '/uploads/'; //创建目录url对象 
$dir = dir($current_dir); //创建dir对象 
echo "<p>Handle is $dir->handle</p>"; 
echo "<p>Upload directory is $current_dir</p>"; 
echo "<p>Directory Listing:</p><ul>"; 
while(($file = $dir->read()) !== false){ //通过dir对象读取目录下的文件名 
if($file != "." && $file != ".."){ 
echo "<li>$file</li>"; 
} 
} 
echo "</ul>"; 
$dir->close(); //关闭目录 
?>

(2)使用scandir()函数对文本名称进行字母表的排序方式

<?php 
$current_dir = '/uploads/'; //创建目录url对象 
$files1 = scandir($current_dir); //将指定目录下的文件名保存为一个数组,默认以字母升序排序 
$files2 = scandir($current_dir,1); //将指定目录下的文件名保存为一个数组,以字母降序排序 
echo "<p>Upload directory is $current_dir</p>"; 
echo "<p>Directory Listing in alphabetical order,ascending:</p><ul>"; 
foreach($files1 as $file1) { 
if($file1 != "." && $file1 != "..") 
echo "<li>$file1</li>"; 
} 
echo "</ul>"; 
?>

(3)获取当前目录的其他信息

dirname($path):返回路径的目录部分;

basename($path):返回路径的名称部分;

disk_free_space($path):返回路径所在磁盘可以保存上传文件的容量;

(4)创建和删除目录

①mkdir():创建目录;

代码:

$oldumask = umask(0); //重置当前权限码
mkdir("/tmp/testing",0777); //创建目录
umask($oldumask); //恢复当前权限码

②rmdir():删除目录;

代码:

rmdir("/temp/testing");
或rmdir("c:\\tmp\\testing');

※要删除的目录必须是空目录;

4、与文件系统的交互

(1)获取文件信息:

while(($file = readdir($dir)) !== false){ 
echo "<a href=\"filedetails.php?file=\'.$file.\'\">".$file."</a><br/>";
}
<?php 
$current_dir = '/uploads/'; 
$file = basename($file); //获取文件文件名 
echo "<h1>Details of file</h1>"; 
echo "<h2>File data</h2>"; 
echo 'File last accessed: '.date('j F Y H:i',fileatime($file))."<br>"; //返回最近访问的时间戳 
echo 'File last modifixed: '.date('j F Y H:i',filemtime($file))."<br>"; //返回最近修改的时间戳 
$user = posix_getpwuid(fileowner($file)); //返回用户标识uid 
echo 'File owner: '.$user['name']."<br/>"; 
$group = posix_getgrgid(filegroup($file)); //返回组织标识gid 
echo 'File group: '.$group['name']."<br/>"; 
echo 'File permissions: '.decoct(fileperms($file))."<br/>"; //返回8位的权限码 
echo 'File type'.filetype($file)."<br/>"; //返回文件类型 
echo 'File size'.filesize($file)."<br/>"; //返回文件字节数 
echo "<h2>File Tests</h2>"; 
echo 'is_dir?'.(is_dir($file) ? 'true':'false')."<br/>"; 
echo 'is_executable?'.(is_executable($file) ? 'true':'false')."<br/>"; //判断文件是否可执行; 
echo 'is_file?'.(is_file($file) ? 'true':'false')."<br/>"; 
echo 'is_link?'.(is_link($file) ? 'true':'false')."<br/>"; 
echo 'is_readable?'.(is_readable($file) ? 'true':'false')."<br/>"; 
echo 'is_writable?'.(is_writable($file) ? 'true':'false')."<br/>"; 
?>

(2)更改文件属性

chgrp(file,group):修改文件的分组;

chmod(file,permissions):修改文件的权限;

chown(file,user):修改文件的所有者;

(3)创建、删除和移动文件

bool touch($filename,[int time,[ int atime]]):创建一个文件(time指定创建时间戳,atime指定可选时间戳)

unlink($filename):删除一个文件

copy($source_path,$destination_path):复制一个文件

rename($oldfile,$newfile):重命名一个文件;

(4)使用程序执行函数

①String exec(String command[ ,array result [ ,int result_value]])

返回命名结果的最后一行,result变量可以返回字符组数,这些字符串代表输出的每一行,result_value获取返回代码;

②void passthru(String command[ ,int result_value])

结果直接输出到浏览器;

③String system(string command[ ,int return_value])

输出结果到浏览器,返回命令结果的最后一行或false;

※在用户提交的数据包括执行命令的一部分,应该进行以下包装:

system(escapeshellcmd($command));

5、与环境变量交互

phpinfo()函数:获取php的所有变量列表;

getenv("$key_name"):

setenv("$key_name=$value");

以上所述是小编给大家介绍的PHP与服务器文件系统的简单交互,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
IStream与TStream之间的相互转换
Aug 01 PHP
解析php开发中的中文编码问题
Aug 08 PHP
使用PHP强制下载PDF文件示例
Jan 17 PHP
php生成QRcode实例
Sep 22 PHP
jQuery Mobile + PHP实现文件上传
Dec 12 PHP
PHP实现QQ登录实例代码
Jan 14 PHP
php字符串比较函数用法小结(strcmp,strcasecmp,strnatcmp及strnatcasecmp)
Jul 18 PHP
php使用PDO从数据库表中读取数据的实现方法(必看)
Jun 02 PHP
yii2.0整合阿里云oss上传单个文件的示例
Sep 19 PHP
PHP基于swoole多进程操作示例
Aug 12 PHP
PHP7 安装event扩展的实现方法
Oct 08 PHP
Laravel如何实现适合Api的异常处理响应格式
Jun 14 PHP
微信公众号开发客服接口实例代码
Oct 21 #PHP
PHP抓取远程图片(含不带后缀的)教程详解
Oct 21 #PHP
PHP Header用于页面跳转时的几个注意事项
Oct 21 #PHP
phpcms中的评论样式修改方法
Oct 21 #PHP
PHP+jquery+CSS制作头像登录窗(仿QQ登陆)
Oct 20 #PHP
PHP中的多种加密技术及代码示例解析
Oct 20 #PHP
php rmdir使用递归函数删除非空目录实例详解
Oct 20 #PHP
You might like
Windows 下的 PHP-PEAR 安装方法
2010/11/20 PHP
PHP中SESSION使用中的一点经验总结
2012/03/30 PHP
PHP实现简单数字分页效果
2015/07/26 PHP
PHP连接SQL Server的方法分析【基于thinkPHP5.1框架】
2019/05/06 PHP
Laravel手动返回错误码示例
2019/10/22 PHP
php pdo连接数据库操作示例
2019/11/18 PHP
基于php+MySql实现学生信息管理系统实例
2020/08/04 PHP
javascript 鼠标悬浮图片显示原图 移出鼠标后原图消失(多图)
2009/12/28 Javascript
jQuery实现响应浏览器缩放大小并改变背景颜色
2014/10/31 Javascript
JavaScript函数作用域链分析
2015/02/13 Javascript
个人总结的一些JavaScript技巧、实用函数、简洁方法、编程细节
2015/06/10 Javascript
AngularJS的表单使用详解
2015/06/17 Javascript
jQuery.form插件的使用及跨域异步上传文件
2016/04/27 Javascript
基于JavaScript实现随机颜色输入框
2016/12/10 Javascript
原生ajax处理json格式数据的实例代码
2016/12/25 Javascript
angular中的http拦截器Interceptors的实现
2017/02/21 Javascript
使用bootstrap插件实现模态框效果
2017/05/10 Javascript
全面解析Node.js 8 重要功能和修复
2017/06/02 Javascript
JavaScript标准对象_动力节点Java学院整理
2017/06/27 Javascript
JS实现获取毫秒值及转换成年月日时分秒的方法
2018/08/15 Javascript
在vue中使用G2图表的示例代码
2019/03/19 Javascript
vue父子组件的通信方法(实例详解)
2019/11/10 Javascript
vscode 插件开发 + vue的操作方法
2020/06/05 Javascript
[50:21]Liquid vs Winstrike 2018国际邀请赛小组赛BO2 第二场
2018/08/19 DOTA
Python基于pygame实现图片代替鼠标移动效果
2015/11/11 Python
Python实现利用最大公约数求三个正整数的最小公倍数示例
2017/09/30 Python
Python 列表理解及使用方法
2017/10/27 Python
python-tkinter之按钮的使用,开关方法
2019/06/11 Python
python使用pandas处理excel文件转为csv文件的方法示例
2019/07/18 Python
win10系统Anaconda和Pycharm的Tensorflow2.0之CPU和GPU版本安装教程
2019/12/03 Python
keras 解决加载lstm+crf模型出错的问题
2020/06/10 Python
Python 使用Opencv实现目标检测与识别的示例代码
2020/09/08 Python
精彩的推荐信范文
2013/11/26 职场文书
《纸船和风筝》教学反思
2014/02/15 职场文书
旅行社各个岗位职责
2014/03/15 职场文书
县级领导干部开展党的群众路线教育实践活动工作汇报
2014/10/25 职场文书