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

PHP -- file

时间:2015-08-02 23:13:48      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:

PHP – file

PHP – file

一些基本的用法

basename         — 返回路径中的文件名部分
dirname          — 返回路径中的目录部分
file_exists      — 检查文件或目录是否存在
is_dir           — 判断给定文件名是否是一个目录
is_executable    — 判断给定文件名是否可执行
is_file          — 判断给定文件名是否为一个正常的文件
is_link          — 判断给定文件名是否为一个符号连接
is_readable      — 判断给定文件名是否可读
is_uploadedfile  — 判断文件是否是通过 HTTP POST 上传的
is_writable      — 判断给定的文件名是否可写
is_writeable     — is_writable 的别名
chmod            — 改变文件模式 *
chown            — 改变文件的所有者
chgrp            — 改变文件所属的组
filegroup        — 取得文件的组
fileowner        — 取得文件的所有者
lchgrp           — Changes group ownership of symlink
lchown           — Changes user ownership of symlink
copy             — 拷贝文件
delete           — 参见 unlink 或 unset
unlink           — 删除文件
rename           — 重命名一个文件或目录
touch            — 设定文件的访问和修改时间
umask            — 改变当前的 umask, 不带参数表示设置 umask 为 0777 (只设置一次)

读写

fopen — 打开文件或者 URL

$fp = fopen ( $filename, ‘r‘ );
r:  读                  (必须存在)
r+: 读写, 如果写, 会被清空 (必须存在)
w:  不存在则创建, 如果写, 会被清空
w+: 读写, 如果写, 会清空

a:  不存在则创建, 追加的写方式, 不会清空
a+: 读写, 不会清空
fclose($fp);
feof ($fp)    主要用来配合写操作

读函数

  1. fread() 最大一次性能读取 8k 长度的字节数, 所以不能一次性读取大文件去作下载.
    优势在于, 操作更加灵活, 每次读取指定字节的内容, 用于下载时方便控制服务器的流量
    $handle  =  fopen ( "http://www.example.com/" ,  "rb" );
    $contents  =  ‘‘ ;
    while (! feof ( $handle )) {
        $contents  .=  fread ( $handle ,  8192 );
    }
    fclose ( $handle );
    
  2. readfile() 优势是能够一次性读取大文件, 不需要 PHP 预读到内存, 下载速度更快, 直接把文件的处理交由服务器.
    缺点就是不能控制负载. 所以它是没有内存限制的, 如果遇到报内存错误, 先调用 ob_end_flush()之类的函数关闭缓冲区
    $file = "test.png";
    header (‘content-type: application/octet-stream‘);                          // 以二进制形式返回
    header (‘accept-ranges: bytes‘);                                            // 按照字节返回
    header (‘accept-length: ‘.filesize($file));                                 // 告诉浏览器文件大小
    header (‘content-disposition: attachment; filename=‘.basename($file));      // 客户端的对话框对应的文件名
    
    ob_clean ();
    flush ();
    readfile ( $file );
    
  3. file_get_contents 也是没 readfile()快, 因为也是走了 php 的内存. 但是在读取小文本内容到字符串变量时,
    这个函数最适合使用, 简单, 更快
    $con = file_get_contents ( ‘/tmp/input.txt‘ );
    
  4. fgets() 是一次读取文件中的一行了, 再需要逐行处理文件的时候, 使用这个
    注: fgetss 和 fgets() 相同,只除了 fgetss() 尝试从读取的文本中去掉任何 HTML 和 PHP 标记
    $handle  = @fopen ( "/tmp/inputfile.txt" ,  "r" );
    if ( $handle ) {
        while (( $buffer  =  fgets ( $handle ,  4096 )) !==  false ) {
            echo  $buffer ;
        }
        if (! feof ( $handle )) {
            echo  "Error: unexpected fgets() fail\n" ;
        }
        fclose ( $handle );
    }
    

写函数

fputs                 是 fwrite 的别名
fwrite ($fp, $str)
    Windows 上 打开二进制文件时,fopen() 函数的 mode 参数要加上 ‘b‘
if ( fwrite ( $handle ,  $somecontent ) ===  FALSE ) {
    echo  "不能写入到文件  $filename " ;
    exit;
}

ftruncate ( $fp, $length ) # 注意 fp 要以 w 的方式打开

fileatime($filename)       — 取得文件的上次访问时间
filectime($filename)       — 取得文件的 inode 修改时间
filemtime($filename)       — 取得文件修改时间
echo date(‘Y-m-d H‘, filemtime($file));

filesize — 取得文件大小

bytes (B)

filetype — 取得文件类型

fifo,char,dir,block,link,file 和 unknown

flock — 轻便的咨询文件锁定

bool flock ( $fp, int $operation [, int &$wouldblock ] )

$operation
  LOCK_SH 取得共享锁定 (读取的程序)
  LOCK_EX 取得独占锁定 (写入的程)
  LOCK_UN 释放锁定 (无论共享或独占)
link        — 建立一个硬连接
linkinfo    — 获取一个连接的信息
lstat       — 给出一个文件或符号连接的信息
readlink    — 返回符号连接指向的目标
symlink     — 建立符号连接
fscanf ( $fp,        $formatStr [, &$... ] )
sscanf ( $inputStr , $formatStr [, &$... ] )

目录操作

$dir = opendir (‘dirname‘);
closedir ($dir);
getcwd();

opendir();
readdir(); # 注意 使用 !== false, 还有 目录名称最后不会有 ‘/‘ 符号

if (is_dir( $dir )) {
    if ($dh  =  opendir ( $dir )) {
        while (( $file  =  readdir ( $dh )) !==  false ) {
            echo  "filename:  $file  : filetype: "  .  filetype ( $dir  .  $file ) .  "\n" ;
        }
        closedir ( $dh );
    }
}

$files1 = scandir ( $dir ); # 如果是目录, 不会递归扫描, 没什么用 想用 ls

mkdir — 新建目录

mkdir($dirname, 0700);        # 创建目录, 权限是 0700, 注意, 还要减去 umask
mkdir(a/b/c/d, 0700, true);   # 递归创建目录

rmdir — 删除目录 # 只能删除空目录

function rrmdir($src) {
    $dir = opendir($src);
    while(false !== ( $file = readdir($dir)) ) {
        if (( $file != ‘.‘ ) && ( $file != ‘..‘ )) {
            $full = $src . ‘/‘ . $file;
            if ( is_dir($full) ) {
                rrmdir($full);
            }
            else {
                unlink($full);
            }
        }
    }
    closedir($dir);
    rmdir($src);
}

路径信息

realpath — 返回规范化的绝对路径名

chdir ( ‘/var/www/‘ );
echo  realpath ( ‘./../../etc/passwd‘ );   # /etc/passwd

pathinfo — 返回文件路径的信息

$path_parts  =  pathinfo ( ‘/www/htdocs/inc/lib.inc.php‘ );

echo  $path_parts [ ‘dirname‘ ],  "\n" ;
echo  $path_parts [ ‘basename‘ ],  "\n" ;
echo  $path_parts [ ‘extension‘ ],  "\n" ;
echo  $path_parts [ ‘filename‘ ],  "\n";

/www/htdocs/inc
lib.inc.php
php
lib.inc

glob — 寻找与模式匹配的文件路径

foreach ( glob ( "*.txt" ) as $filename ) {
    echo  " $filename  size "  .  filesize ( $filename ) .  "\n" ;
}

sys_get_temp_dir() - 返回用于临时文件的目录

tempnam — 建立一个具有唯一文件名的文件, 返回的是文件名 (绝对路径)

string tempnam ( string $dir , string $prefix )

dir 不存在会在系统临时目录中生成一个文件

tmpfile — 建立一个临时文件, 文件关闭后, 自动被删除

$fp  =  tmpfile ();
fwrite ( $fp ,  "writing to tempfile" );
fclose ( $fp );

PHP -- file

标签:

原文地址:http://www.cnblogs.com/sunznx/p/4696949.html

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