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

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

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

(0)

相关推荐

  • php和js交互一例-PHP教程,PHP应用

    复制代码 代码如下: <html>  <head>  <meta http-equiv="Content-Type" content="text/html; charset=gb2312">      <title>Untitled</title>  <script language="javascript">  <!--  function rec_delete(me

  • PHP与javascript的两种交互方式

    在网页制作过程中怎样在不刷新页面的情况下使前台页面和 后台CGI页面保持交互一直是个问题.这里介绍两个我在实践中使 用的方法. 方法一:通过Cookie交互.一共是三个文件,分别为: index.htm,action.php,main.htm       原理为前台页面main.htm和后台action.php通过页面框架 index.htm组织起来,将action.php的页面宽度设为0,这样并不 影响显示.action.php将信息放入cookie中,main.htm通过读取 cookie来

  • Ajax异步传输与PHP实现交互示例

    背景 前台页面两个select框,一个与学院关联,另一个与专业关联,现需要选择学院select框后,显示学院相关信息,且专业select下面仅有属于该学院的专业名称.也就是实现一个二级联动效果. 两个select里面分别定义onchange事件,事件中利用ajax的GET方法向后台PHP递交信息,再将查询得到的信息echo出来或document.write. 注:代码参考了有位叫y0umer的博主写的. 复制代码 代码如下: <script type="text/javascript&qu

  • 利用php做服务器和web前端的界面进行交互

    PHP与Web页面交互是实现PHP网站与用户交互的重要手段.希望查看本篇文章的学者首先查看一下PHP的基础知识,因为今天用到这个东西,现学现卖吧.后续会更新php服务器的基础知识! 1.首先你要有一个界面   我这里利用我项目开发的一个简单界面截取下来进行讲解!项目机密  请勿**,你懂得! html代码和界面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or

  • PHP与MySQL交互使用详解

    PHP与MySQL交互使用详解 1.创建自动连接数据库的代码,并生成一些必要的代码.我们仔细研究一下数据库的连接函数,会发现是这样的一行代码. $link_id=@mysql_connect($hostname,$username,$password); 所以我们在include文件connect.inc中添加以下代码就可以了.connect.inc<?php$hostname='localhost'; $username='phpstar';$password='phpstar';$dbnam

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

    1.php.ini中关于文件上传的设置指令 2.文件上传过程 (1)上传文件提交表单html代码: <!--向服务器上传文件的HTML表单(限制为文本文件)--> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Adminstration - upoload new files</title>

  • Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法

    1.背景 最近有个项目,需要搭建一个socket服务器,一个web服务器,然后实现两个服务器之间的通讯交互.刚开始的方案是用Python中socket模块实现一个多线程的socket服务器,然后用Flask实现一个web服务器,他们之前通过线程交互实现通讯. 但是在我看来这个方案有例外一个更好的解决方法,就是用Torndao框架.鉴于网上用Tornado实现一个程序同时实现web服务和socket服务器并且实现交互的文章几乎没有,所以记录一下.觉得写得好麻烦点个赞,写得不好请指出,有疑问可以留言

  • python 与服务器的共享文件夹交互方法

    需求:从服务器拷贝照片到本地,然后再从本地照片筛选照片. 问题:从服务器拷贝到照片本地,太慢,速度只有20~30K,不能忍. 然后想到,利用python直接从服务器的共享文件夹筛选照片. 本以为还要什么socket通信之类,没想到只需将服务器共享文件夹地址当作本地电脑路径就万事大吉了.只需注意路径地址中的正反斜杠即可. 直接从window文件夹地址复制的路径如下: path = "\\11.64.222.50\dataPic" 若不经修改,会报IO error的错误. 改成 path

  • 高性能web服务器框架Tornado简单实现restful接口及开发实例

    有个朋友让我搞搞tornado框架,说实话,这个框架我用的不多... 我就把自己的一些个运维研发相关的例子,分享给大家. 怎么安装tornado,我想大家都懂. pip install tornado 再来说说他的一些个模块,官网有介绍的.我这里再啰嗦的复读机一下,里面掺夹我的理解. 主要模块 web - FriendFeed 使用的基础 Web 框架,包含了 Tornado 的大多数重要的功能,反正你进入就对了. escape - XHTML, JSON, URL 的编码/解码方法 datab

  • CentOS服务器iptables配置简单教程

    iptables是Linux类服务器重要的网络安全防范系统工具,考虑到多数服务器有专门的团队托管,服务器管理员多数时间只能通过SSH进行远程管理,在安全允许的情况下,保证SSH的合法联通,需要做如下的配置. iptables -P INPUT ACCEPT iptables -F iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -

  • Python3与fastdfs分布式文件系统如何实现交互

    一.先配置好自己的分布式文件系统 参考另一篇文章: https://www.jb51.net/article/189283.htm 二.安装第三方库py3Fdfs pip install py3Fdfs 三.实际应用,参考文档 https://pypi.org/project/py3Fdfs/ from fdfs_client.client import get_tracker_conf, Fdfs_client # client.conf配置文件路径 conf = get_tracker_co

  • Ubuntu上安装Nginx服务器程序及简单的环境配置小结

    Ubuntu 从官方源安装 Nginx cd ~ wget http://nginx.org/keys/nginx_signing.key sudo apt-key add nginx_signing.key sudo nano /etc/apt/sources.list # 添加以下两句 deb http://nginx.org/packages/ubuntu/ precise nginx deb-src http://nginx.org/packages/ubuntu/ precise ng

  • 修改nginx服务器类型实现简单伪装(隐藏nginx类型与版本等)

    修改服务器类型为了防止被有所图的人利用,才做的一些调整.比如当前使用的一个低版本正好被爆出漏洞,如果被发现,那岂不是危险. 1.隐藏版本号,修改nginx.conf,在http区块加入 复制代码 代码如下: server_tokens off; 然后重新加载nginx,可以看到server头部也是不带版本号,也可以通过404查看 2.返回自定义服务器类型 通过curl -i http://127.0.0.1 查看当前的类型或者一些站长工具都可以看到,可以修改一为gws或者GFW来威慑一些利用工具

  • jsp页面获取服务器时间的简单调用示例

    Calendar c = Calendar.getInstance(); int year = c.get(Calendar.YEAR); int month = c.get(Calendar.MONTH); int day= c.get(Calendar.DAY); 这三行加在<% %>里面 调用时用<%= year %><%= month%><%= day%>

  • Android通过PHP服务器实现登录功能

    Android客户端和PHP.MySQL搭建的服务器之间的简单交互,实现登录功能 . 实现原理图: Handler消息机制原理: Handler机制主要包括4个关键对象,分别是Message.Handler.MessageQueue.Looper. 下面对这4个关键对象进行简单的介绍. 1.Message Message是线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程之间交换数据.Message的what字段可以用来携带一些整型数据,obj字段可以携带一个Object对象. 2.

随机推荐