找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 993|回复: 0
打印 上一主题 下一主题

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

[复制链接]

3444

主题

3465

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
11142
跳转到指定楼层
楼主
发表于 2018-2-14 05:31:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

2、文件上传过程
(1)上传文件提交表单html代码:





Adminstration - upoload new files


Upload new files





Upload a file
内点击文本,会触发该控件,此时浏览器会自动对焦到标签for属性所指向的表单控件上面-->

标签for所指向控件元素的id号-->




(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代码
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 "review of uploaded file contents:
>";
echo nl2br($contents);
echo "";
3、使用目录函数
(1)从目录中读取文件名
①使用opendir(),readdir(),closedir()函数;
Upload directory is $current_dir
";
echo "Directory Listing:
";
while(($file = readdir($dir)) !== false){ //读取目录对象
if($file != "." && $file != ".."){ //过滤当前目录和上一级目录
echo "
  • $file";
    echo "[url=]".$file."[/url]
    ";
    }
    }
    echo "
    ";
    closedir($dir); //关闭目录;
    ?>
    ②使用php的dir类
    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()函数对文本名称进行字母表的排序方式
    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 "[url=]".$file."[/url]
    ";
    }
    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与服务器文件系统的简单交互,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
                
                
    您可能感兴趣的文章:
  • PHP与MySQL交互使用详解
  • PHP与&#106avascript的两种交互方式
  • php和js交互一例-PHP教程,PHP应用
  • Ajax异步传输与PHP实现交互示例
  • 利用php做服务器和web前端的界面进行交互
            
  • 分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    用户反馈
    客户端