php访问服务器文件路径,PHP与服务器文件系统的简单交互

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

033f0ec77a8863196ba8c6303b08c065.png

2、文件上传过程

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

Adminstration - upoload new files

Upload new files

Upload a file

(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代码

//检验文件传输异常

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
";

//对传输文件清除html和php标记

$contents = file_get_contents($upfile); //将文件内容提取为一个字符串;

$contents = strip_tags($contents); //对该字符串擦除html和tags标记;

file_put_contents($_FILES['userfile']['name'],$contents); //将该字符串重新写入文件中;

//在浏览器上显示传输的文本文件内容

echo "

Preview of uploaded file contents:


>";

echo nl2br($contents);

echo "";

3、使用目录函数

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

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

$current_dir = '/uploads/'; //创建目录url对象

$dir = opendir($current_dir); //打开目录,结果返回一个目录对象

echo "

Upload directory is $current_dir

";

echo "

Directory Listing:

  • ";

while(($file = readdir($dir)) !== false){ //读取目录对象

if($file != "." && $file != ".."){ //过滤当前目录和上一级目录

echo "

$file";

echo "".$file."
";

}

}

echo "

";

closedir($dir); //关闭目录;

?>

②使用php的dir类

$current_dir = '/uploads/'; //创建目录url对象

$dir = dir($current_dir); //创建dir对象

echo "

Handle is $dir->handle

";

echo "

Upload directory is $current_dir

";

echo "

Directory Listing:

  • ";

while(($file = $dir->read()) !== false){ //通过dir对象读取目录下的文件名

if($file != "." && $file != ".."){

echo "

$file";

}

}

echo "

";

$dir->close(); //关闭目录

?>

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

$current_dir = '/uploads/'; //创建目录url对象

$files1 = scandir($current_dir); //将指定目录下的文件名保存为一个数组,默认以字母升序排序

$files2 = scandir($current_dir,1); //将指定目录下的文件名保存为一个数组,以字母降序排序

echo "

Upload directory is $current_dir

";

echo "

Directory Listing in alphabetical order,ascending:

  • ";

foreach($files1 as $file1) {

if($file1 != "." && $file1 != "..")

echo "

$file1";

}

echo "

";

?>

(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 "".$file."
";

}

$current_dir = '/uploads/';

$file = basename($file); //获取文件文件名

echo "

Details of file

";

echo "

File data

";

echo 'File last accessed: '.date('j F Y H:i',fileatime($file))."
"; //返回最近访问的时间戳

echo 'File last modifixed: '.date('j F Y H:i',filemtime($file))."
"; //返回最近修改的时间戳

$user = posix_getpwuid(fileowner($file)); //返回用户标识uid

echo 'File owner: '.$user['name']."
";

$group = posix_getgrgid(filegroup($file)); //返回组织标识gid

echo 'File group: '.$group['name']."
";

echo 'File permissions: '.decoct(fileperms($file))."
"; //返回8位的权限码

echo 'File type'.filetype($file)."
"; //返回文件类型

echo 'File size'.filesize($file)."
"; //返回文件字节数

echo "

File Tests

";

echo 'is_dir?'.(is_dir($file) ? 'true':'false')."
";

echo 'is_executable?'.(is_executable($file) ? 'true':'false')."
"; //判断文件是否可执行;

echo 'is_file?'.(is_file($file) ? 'true':'false')."
";

echo 'is_link?'.(is_link($file) ? 'true':'false')."
";

echo 'is_readable?'.(is_readable($file) ? 'true':'false')."
";

echo 'is_writable?'.(is_writable($file) ? 'true':'false')."
";

?>

(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与服务器文件系统的简单交互,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/367564.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

django F和Q 关键字使用

F 的使用: 想给表里每个价格加上一百就要用上F,直接加是不行的。 转载于:https://www.cnblogs.com/wuheng-123/p/9561422.html

【刷题】BZOJ 4176 Lucas的数论

Description 去年的Lucas非常喜欢数论题&#xff0c;但是一年以后的Lucas却不那么喜欢了。 在整理以前的试题时&#xff0c;发现了这样一道题目“求Sigma(f(i)),其中1<i<N”&#xff0c;其中 表示i的约数个数。他现在长大了&#xff0c;题目也变难了。 求如下表达式的值&…

Java 8的新增功能(第I部分-JavaFX)

免责声明&#xff1a;我不为Oracle工作&#xff0c;也不以任何方式代表Oracle。 此功能列表不是官方的。 作为“局外人”&#xff0c;这只是我研究的一部分。 Java 8已在大约两个月前完成功能&#xff0c;并且开发者预览版即将来临&#xff08;两周后&#xff09;。 这篇博客文…

mysql数据库sql语句优化

昨天帮同事优化了一个sql语句发出来共勉下: SELECT T.*, ( SELECT S.codeName FROM sys_codelist S WHERE S.codeValue T.packagingtype AND S.kindCode PACKAGING ) AS packagingtypeName, S.codeName AS codename, ( SELECT picpath FROM zl_b_gd_pic WHERE 1 1 AND gdid …

java调用外联服务用xml,Spring IOC 依赖注入的两种方式:XML和注解

IoC&#xff0c;直观地讲&#xff0c;就是容器控制程序之间的关系&#xff0c;而非传统实现中&#xff0c;由程序代码直接操控。这也就是所谓“控制反转”的概念所在。控制权由应用代码中转到了外部容器&#xff0c;控制权的转移是所谓反转。IoC还有另外一个名字——“依赖注入…

python第一个程序HelloWorld

在写第一个python程序之前&#xff0c;我们还需要了解的一个东西就是python解释器 解释器&#xff0c;顾名思义&#xff0c;就是解释一段代码的机器&#xff0c;程序运行的平台&#xff0c;例如Java的解释器就是jdk。 我们在写好的python代码&#xff0c;需要在解释器上执行&am…

Python中的__new__()方法的使用

__new__() 函数只能用于从object继承的新式类。 先看下object类中对__new__()方法的定义&#xff1a; class object:staticmethod # known case of __new__def __new__(cls, *more): # known special case of object.__new__""" T.__new__(S, ...) -> a new …

用Java分割大型XML文件

上周&#xff0c;我被要求用Java编写一些东西&#xff0c;该东西能够将单个30GB XML文件拆分为可配置文件大小的较小部分。 该文件的使用者将是一个中间件应用程序&#xff0c;该应用程序存在XML较大的问题。 在后台&#xff0c;它使用某种DOM解析技术&#xff0c;使它在一段时…

信号与线性系统翻转课堂笔记9——傅里叶变换概念

信号与线性系统翻转课堂笔记9——傅里叶变换 The Flipped Classroom9 of Signals and Linear Systems 对应教材&#xff1a;《信号与线性系统分析&#xff08;第五版&#xff09;》高等教育出版社&#xff0c;吴大正著 一、要点 &#xff08;1&#xff0c;重点&#xff09;…

from 下拉框多个值提交_Git commit 多行信息提交

git commit可接受多个消息标志(-m)来允许多行提交原文地址&#xff1a;https://www.stefanjudis.com/today-i-learned/git-commit-accepts-several-message-flags-m-to-allow-multiline-commits/原文作者&#xff1a;Stephan Schneider在命令行上使用git时&#xff0c;您可能已…

处理缓慢的资源泄漏

使用Java监视器查找资源泄漏 查找缓慢的资源泄漏是使应用程序服务器长时间保持正常运行的关键。 在这里&#xff0c;我解释了如何使用Java监视器来发现缓慢的资源泄漏&#xff0c;以及如何验证它们是实际的泄漏&#xff0c;而不仅仅是额外的预分配到某些HTTP连接器或数据库池中…

jquery简单实现点击弹出层效果实例

先看效果图&#xff1a;完整例子&#xff1a; <!-- 渐变弹出层 --><div id"race"><a href"#">点击</a></div><div id"racePop" class"raceShow">这里是弹出层效果</div> <script type&q…

Openfire源码阅读(一)

本篇先分析openfire源码的主要流程&#xff0c;模块细节后续再继续分析&#xff1b; 一、简介&#xff1a; Openfire是开源的实时协作服务器&#xff08;RTC&#xff09;&#xff0c;它是基于公开协议XMPP&#xff08;RFC-3920&#xff09;&#xff0c;并在此基础上实现了XMPP-…

php 查询方法all,获取多条:all静态方法

查询多条数据&#xff1a;all( )方法all方法与前节课学习的get方法都是静态方法&#xff0c;可用模型类直接访问2. 源码&#xff1a;/*** 查找所有记录* access public* param mixed $data 主键列表或者查询条件(闭包)* param array|string $with 关联预查询* param b…

[译文]过犹不及,别再在编程中高射炮打蚊子

原文链接&#xff1a;Anyway,stop recommending bazookas to kill flies in programming. 众成翻译地址&#xff1a;过犹不及&#xff0c;别再在编程中高射炮打蚊子 译者注&#xff1a;翻译这篇吐槽的文章&#xff0c;主要是为了自省~日常工作中确实会犯类似的错误&#xff0…

Java中的for循环

上一章呢我们学习了一下java中的while循环和do while循环 现在我们来了解一下另外一种循环 for循环 for循环是编程语言中一种开界的循环语句&#xff0c;而循环语句 由循环体及循环的终止条件两部分组成&#xff0c;for循环其在各种编程语言中的实现与表达有所出入&#xff0…

SpringFox swagger2 and SpringFox swagger2 UI 接口文档生成与查看

依赖&#xff1a; <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 --> <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version> <…

matlab期末复习资料,MATLAB期末复习习题及答案

MATLAB期末复习习题及答案13&#xff0c; ysin(x)&#xff0c;x从0到2 &#xff0c; x0.02 &#xff0c;求y的最大值、最小值、均值和标准差。(应用max,min,mean,std) 14&#xff0c; 参照课件中例题的方法&#xff0c;计算表达式z 10x3 y5e xcontour, hold on, quiver)15&…

多核可扩展计数器

到处都需要计数器&#xff0c;例如&#xff0c;查找应用程序的关键KPI&#xff0c;应用程序的负载&#xff0c;服务的请求总数&#xff0c;用于查找应用程序吞吐量的一些KPI等。 由于所有这些需求&#xff0c;并发复杂性也增加了&#xff0c;这使这个问题变得有趣。 如何实现…

三年前端,面试思考(二)

为什么还有&#xff08;二&#xff09; 没有想到上一篇 《三年前端&#xff0c;面试思考》 有这么多前端同学看到。 在评论区也有很多鼓励和质疑的声音&#xff0c;而且群里面交流的同学两天就达到了700人。 群里有同学问了很多问题&#xff0c;同时希望我再分享一些面试技巧…