php文件操作函数详解

 更新时间:2016年11月25日 16:47  点击:2120
在php中提供了大量的对文件操作的函数,下面我来给大家总结php 文件函数对文件读入,写入操作,有需了解的这些函数的朋友可进入参考。

一、操作文件,获取文件信息

 代码如下 复制代码


<?php

    //打开文件
    $file_path="text.txt";
    if($fp=fopen($file_path,"r")){
        //取出文件的信息
        $file_info=fstat($fp);
        echo "<pre>";
        print_r($file_info);
        echo "</pre>";

        //单个的取出
        $file_size=$file_info['size'];
        //文件大小按字节来计算的
        echo "文件的大小为:".$file_size;
        echo  "<br/>文件上次访问的时间:".date("Y-m-d H:i:s",$file_info['atime']);  //atime表示【该文件上次被访问的时间】
        echo  "<br/>文件上次修改的时间:".date("Y-m-d H:i:s",$file_info['mtime']);  //mtime表示【该文件上次内容被修改的时间】
        echo  "<br/>文件上次change的时间:".date("Y-m-d H:i:s",$file_info['ctime']); //ctime表示【该文件上次 文件所有者/文件组 修改的时间】

    }else{
        echo "打开文件失败";
    }
   
    //关闭文件,这个非常重要
    fclose($fp);
?>

2、第二种获取文件信息方式

 代码如下 复制代码


<?php

    //第二种获取文件信息
    $file_path="text.txt";
    if(!file_exists($file_path)){
        echo "文件不存在";
        exit();
    }

    echo "<br>".date("Y-m-d H:i:s",fileatime($file_path));
    echo "<br>".date("Y-m-d H:i:s",filemtime($file_path));
    echo "<br>".date("Y-m-d H:i:s",filectime($file_path));

    //echo "<br>".filemtime($file_path);
    //echo "<br>".filectime($file_path);
?>

二、读取文件操作

 代码如下 复制代码

<?php

    //读取文件
    $file_path="text.txt";

    if(!file_exists($file_path)){
        echo "文件不存在";
        exit();
    }
   
    //打开文件
    $fp=fopen($file_path,"a+");
    //读取文件
    $content=fread($fp,filesize($file_path));
    echo "文件内容是:<br/>";
    //默认情况下把内容输出到网页后,不会换行显示,因为网页不识别rn
    //所有要把rn =><br/>
   
    $content=str_replace("rn","<br/>",$content);
    echo  $content;

    fclose($fp);
?>


 

2、第二种读取文件的方式

 代码如下 复制代码


<?php


    //第二种读取文件的方式

    $file_path="text.txt";
    if(!file_exists($file_path)){
        echo "文件不存在";
        exit();
    }
    $content=file_get_contents($file_path);

    $content=str_replace("rn","<br/>",$content);
    echo  $content;
?>


 

3、第三种读取方法,循环读取(对付大文件)

 代码如下 复制代码


<?php


    //第三种读取方法,循环读取(对付大文件)

    $file_path="text.txt";
    if(!file_exists($file_path)){
        echo "文件不存在";
        exit();
    }

    //打开文件
    $fp=fopen($file_path,"a+");
    //定义每次读取的多少字节
    $buffer=1024;
    //一边读取。一边判断是否达到文件末尾
    while(!feof($fp)){
        //按1024个字节读取数据
        $content=fread($fp,$buffer);
        echo $content;
    }

    fclose($fp);
?>


 

4、文件读取实际应用:当我们连接数据库的时候,可以把指定的数据配置到一个文件中,然后再PHP运行时,实时获取信息

 代码如下 复制代码

db.ini 文件

host=127.0.0.1
user=root
pwd=root
db=test


获取文件

 代码如下 复制代码


<?php

    $arr=parse_ini_file("db.ini");
    echo "<pre>";
    print_r($arr);
    echo "</pre>";
   
    echo $arr['host'];

    //连接数据库
    $conn = mysql_connect($arr['host'], $arr['user'], $arr['pwd']);

    if(!$conn){
        echo "error";
    }

    echo "OK";
?>

三、写文件

 代码如下 复制代码

<?php

    //写文件
    $file_path="text.txt";
    if(!file_exists($file_path)){
        echo "文件不存在";
        exit();
    }
    //"a+" 在文件后面追加  "w+"重新写入

    $fp=fopen($file_path,"w+");
    $con="rn你好";
    for($i=0;$i<10;$i++){
    fwrite($fp,$con);}

    echo "添加成功";
    fclose($fp);

   
?>

2、第二中方式  通过file_put_contents函数

 代码如下 复制代码


<?php


    //第二种方式写文件
    $file_path="text.txt";
    $content="hello,worldrn";

    //将一个字符串写入文件  默认是【FILE_USE_INCLUDE_PATH 】"w+"重新写入
    file_put_contents($file_path,$content,FILE_APPEND);

    echo "OK";
?>

如果你想使用php获取图片的高与宽我们可以直接利用php中的getimagesize函数来操作,下面我来给大家详细介绍getimagesize函数使用方法。

getimagesize() 函数将测定任何 GIF,JPG,PNG,SWF,SWC,PSD,TIFF,BMP,IFF,JP2,JPX,JB2,JPC,XBM 或 WBMP 图像文件的大小并返回图像的尺寸以及文件类型和一个可以用于普通 HTML 文件中 IMG 标记中的 height/width 文本字符串。

 代码如下 复制代码

<?php/* 1.jpg为你想获得其尺寸的图片 */
$arr = getimagesize("1.jpg");

/**
 * 这里$arr为一个数组类型
 * $arr[0] 为图像的宽度
 * $arr[1] 为图像的高度
 * $arr[2] 为图像的格式,包括jpg、gif和png等
 * $arr[3] 为图像的宽度和高度,内容为 width="xxx" height="yyy"
 */

/* 以下两行代码输出的内容都是一样的 */
echo "<img src="1.jpg" $arr[3] alt="" />";
echo "<img src="1.jpg" width="$arr[0]" height="$arr[1]" alt="" />";
?>

以上php代码被解释为内容为:

 代码如下 复制代码


<img src="1.jpg" width="xxx" height="yyy" alt="" />
<img src="1.jpg" width="xxx" height="yyy" alt="" />

Example #1 getimagesize(文件)

 代码如下 复制代码

<?php
list($width, $height, $type, $attr) = getimagesize("img/flag.jpg");
echo "<img src="img/flag.jpg" $attr>";
?>

在php中判断是否为数组很简单,php中利用is_array() 函数就可以快速判断变量是否为数组了,下面我来给大家介绍。

is_array — 检测变量是否是数组

Report a bug 描述
bool is_array ( mixed $var )

如果 var 是 array,则返回 TRUE,否则返回 FALSE。

 代码如下 复制代码

$a =1;

if( is_array( $a ) )
{
  echo '是数组';
}
else
{
   echo '不是数组0';
}

 代码如下 复制代码

<?php
function is_vector( &$array ) {
   if ( !is_array($array) || empty($array) ) {
      return -1;
   }
   $next = 0;
   foreach ( $array as $k => $v ) {
      if ( $k !== $next ) return false;
      $next++;
   }
   return true;
}
?>

判断是否索引数组的方法

echo is_assoc($array)?'索引数组':'不是索引数组';

 代码如下 复制代码

function is_assoc($array) {
        if(is_array($array)) {
            $keys = array_keys($array);
            return $keys != array_keys($keys);
        }
        return false;
}

昨天我有一个功能是需要判断生成的多个数组交集,也就是要判断这些数组中是否存在交集了,下面我来给各位同学介绍php数组交集判断程序代码实例,有需要的朋友可参考。

需要判断两个数组是否有交集,第一个感觉PHP中应该有这个函数,果然:

array array_intersect(array array1,array array2[,arrayN…])

返回N个数组中的交集元素,如果是关联数组可以用array_intersect_assoc()

PHP案例如下:

数组的交集 array_intersect()
array_intersect()函数返回一个保留了键的数组,这个数组只由第一个数组中出现的且在其他每个输入数组中都出现的值组成。其形式如下:

 代码如下 复制代码


<?php
$fruit1 = array("Apple","Banana","Orange");
$fruit2 = array("Pear","Apple","Grape");
$fruit3 = array("Watermelon","Orange","Apple");
$intersection = array_intersect($fruit1, $fruit2, $fruit3);
print_r($intersection);
// 输出 Array ( [0] => Apple )
?>

我的应用如下:

 代码如下 复制代码

if($user->role != 1){
            $count = count($projects);
            for($i=0;$i<$count;$i++){
                if(!array_intersect(explode(',', $projects[$i]['role']),  explode(',', $projects[$i]['next_approve_role']))){
                    unset($projects[$i]);
                    continue;
                }
            }
 }

关联数组的交集 array_intersect_assoc()

 代码如下 复制代码

<?php
$fruit1 = array("red"=>"Apple","yellow"=>"Banana","orange"=>"Orange");
$fruit2 = array("yellow"=>"Pear","red"=>"Apple","purple"=>"Grape");
$fruit3 = array("green"=>"Watermelon","orange"=>"Orange","red"=>"Apple");
$intersection = array_intersect_assoc($fruit1, $fruit2, $fruit3);
print_r($intersection);

// output
// Array ( [red] => Apple )
?>

数组交集的优化

假定每个参数会包含一千个左右的产品ID(int),以此为前提来模拟生成一些数据:

 代码如下 复制代码

<?php

$rand = function() {
    $result = array();

    for ($i = 0; $i < 1000; $i++) {
        $result[] = mt_rand(1, 10000);
    }

    return $result;
};

$param_a = $rand();
$param_b = $rand();

?>

注意:如果测试数据集过小的话,结论可能会出现不一致。

先看看通过PHP内置方法array_intersect实现的性能:

 代码如下 复制代码

<?php

$time = microtime(true);

$result = array_intersect($param_a, $param_b);

$time = microtime(true) - $time;

echo "array_intersect: {$time}n";

?>

在优化之前,我们先来看看array_intersect一些特殊的地方:

 代码如下 复制代码

<?php

$param_a = array(1, 2, 2);
$param_b = array(1, 2, 3);

var_dump(
    array_intersect($param_a, $param_b),
    array_intersect($param_b, $param_a)
);

?>

array_intersect($param_a, $param_b): 1, 2, 2
array_intersect($param_b, $param_a): 1, 2
也就是说,如果在第一个数组参数中有重复元素的话,则array_intersect会返回所有满足条件的重复元素。改写array_intersect的时候最好兼容这些功能。

下面看看通过自定义方法int_array_intersect实现的性能:

 代码如下 复制代码

<?php

function int_array_intersect()
{
    if (func_num_args() < 2) {
        trigger_error('param error', E_USER_ERROR);
    }

    $args = func_get_args();

    foreach ($args AS $arg) {
        if (!is_array($arg)) {
            trigger_error('param error', E_USER_ERROR);
        }
    }

    $intersect = function($a, $b) {
        $result = array();

        $length_a = count($a);
        $length_b = count($b);

        for ($i = 0, $j = 0; $i < $length_a && $j < $length_b; null) {
            if($a[$i] < $b[$j] && ++$i) {
                continue;
            }

            if($a[$i] > $b[$j] && ++$j) {
                continue;
            }

            $result[] = $a[$i];

            if (isset($a[$next = $i + 1]) && $a[$next] != $a[$i]) {
                ++$j;
            }
            ++$i;
        }

        return $result;
    };

    $result = array_shift($args);
    sort($result);

    foreach ($args as $arg) {
        sort($arg);
        $result = $intersect($result, $arg);
    }

    return $result;
}

$time = microtime(true);

$result = int_array_intersect($param_a, $param_b);

$time = microtime(true) - $time;

echo "int_array_intersect: {$time}n";

?>

直觉上,我们肯定会认为内置函数快于自定义函数,但本例中结果恰恰相反:

array_intersect: 0.023918151855469
int_array_intersect: 0.0026049613952637

date()函数是我们在php开发中常碰到并且会使用到的一个日期函数,下面我来给大家介绍date()函数的一些基本扮靓和方法,有需要了解的朋友可进入参考。

日期时间函数是PHP 的核心组成部分。无需安装即可使用这些函数。下面来详细说说date函数的具体用法:

PHP Date() 函数
PHP Date() 函数可把时间戳格式化为可读性更好的日期和时间。

语法
date(format,timestamp)

format 必需。规定时间戳的格式。
timestamp 可选。规定时间戳。默认是当前的日期和时间。


PHP的日期时间函数date()

 代码如下 复制代码

$t=time();
echo date("Y-m-d H:i:s",$t);

第一个参数的格式分别表示:
a - "am" 或是 "pm"
A - "AM" 或是 "PM"
d - 几日,二位数字,若不足二位则前面补零; 如: "01" 至 "31"
D - 星期几,三个英文字母; 如: "Fri"
F - 月份,英文全名; 如: "January"
h - 12 小时制的小时; 如: "01" 至 "12"
H - 24 小时制的小时; 如: "00" 至 "23"
g - 12 小时制的小时,不足二位不补零; 如: "1" 至 12"
G - 24 小时制的小时,不足二位不补零; 如: "0" 至 "23"
i - 分钟; 如: "00" 至 "59"
j - 几日,二位数字,若不足二位不补零; 如: "1" 至 "31"
l - 星期几,英文全名; 如: "Friday"
m - 月份,二位数字,若不足二位则在前面补零; 如: "01" 至 "12"
n - 月份,二位数字,若不足二位则不补零; 如: "1" 至 "12"
M - 月份,三个英文字母; 如: "Jan"
s - 秒; 如: "00" 至 "59"
S - 字尾加英文序数,二个英文字母; 如: "th","nd"
t - 指定月份的天数; 如: "28" 至 "31"
U - 总秒数
w - 数字型的星期几,如: "0" (星期日) 至 "6" (星期六)
Y - 年,四位数字; 如: "1999"
y - 年,二位数字; 如: "99"
z - 一年中的第几天; 如: "0" 至 "365"
其它不在上列的字符则直接列出该字符


1,年-月-日

 代码如下 复制代码
echo date('Y-m-j');
2007-02-6
 
echo date('y-n-j');
07-2-6

 
大写Y表示年四位数字,而小写y表示年的两位数字;
小写m表示月份的数字(带前导),而小写n则表示不带前导的月份数字。
 

 代码如下 复制代码
echo date('Y-M-j');
2007-Feb-6
 
echo date('Y-m-d');
2007-02-06

 
大写M表示月份的3个缩写字符,而小写m则表示月份的数字(带前导0);
没有大写的J,只有小写j表示月份的日期,无前导o;若需要月份带前导则使用小写d。
 

 代码如下 复制代码
echo date('Y-M-j');
2007-Feb-6
 
echo date('Y-F-jS');
2007-February-6th

 
大写M表示月份的3个缩写字符,而大写F表示月份的英文全写。(没有小写f)
大写S表示日期的后缀,比如“st”、“nd”、“rd”和“th”,具体看日期数字为何。
 
小结:
表示年可以用大写的Y和小写y;
表示月可以用大写F、大写M、小写m和小写n(分别表示字符和数字的两种方式);
表示日可以用小写d和小写j,大写S表示日期的后缀。
 
 
2,时:分:秒
 
默认情况下,PHP解释显示的时间为“格林威治标准时间”,与我们本地的时间相差8个小时。
 

 代码如下 复制代码
echo date('g:i:s a');
5:56:57 am
 
echo date('h:i:s A');
05:56:57 AM

 
小写g表示12小时制,无前导0,而小写h则表示有前导0的12小时制。
当使用12小时制时需要表明上下午,小写a表示小写的“am”和“pm”,大写A表示大写的“AM”和“PM”。

 代码如下 复制代码
 
echo date('G:i:s');
14:02:26

 
大写G表示24小时制的小时数,但是不带前导的;使用大写的H表示带前导的24小时制小时数
 
小结:
字母g表示小时不带前导,字母h表示小时带前导;
小写g、h表示12小时制,大写G、H表示24小时制。
 
3,闰年、星期、天
 

 代码如下 复制代码
echo date('L');
今年是否闰年:0
 
echo date('l');
今天是:Tuesday
 
echo date('D');
今天是:Tue

 
大写L表示判断今年是否闰年,布尔值,为真返回1,否则为0;
小写l表示当天是星期几的英文全写(Tuesday);
而使用大写D表示星期几的3个字符缩写(Tue)。

 代码如下 复制代码
 
echo date('w');

今天星期:2

 代码如下 复制代码
 
echo date('W');

本周是全年中的第 06 周
 
小写w表示星期几,数字形式表示
大写W表示一年中的星期数

 代码如下 复制代码
 
echo date('t');

本月是 28 天

 代码如下 复制代码
 
echo date('z');

今天是今年的第 36 天
 
小写t表示当前月份又多少天
小写z表示今天是本年中第几天
 
4,其他
 

 代码如下 复制代码
echo date('T');
UTC

大写T表示服务器的时间区域设置

 代码如下 复制代码
 
echo date('I');
0

大写I表示判断当前是否为夏令时,为真返回1,否则为0

 代码如下 复制代码
 
echo date('U');
1170769424

大写U表示从1970年1月1日到现在的总秒数,就是Unix时间纪元的UNIX时间戳。

 代码如下 复制代码
 
echo date('c');
2007-02-06T14:24:43+00:00

小写c表示ISO8601日期,日期格式为YYYY-MM-DD,用字母T来间隔日期和时间,时间格式为HH:MM:SS,时区使用格林威治标准时间(GMT)的偏差来表示。

 代码如下 复制代码
 
echo date('r');
Tue, 06 Feb 2007 14:25:52 +0000

小写r表示RFC822日期。

[!--infotagslink--]

相关文章

  • php读取zip文件(删除文件,提取文件,增加文件)实例

    下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
  • php正确禁用eval函数与误区介绍

    eval函数在php中是一个函数并不是系统组件函数,我们在php.ini中的disable_functions是无法禁止它的,因这他不是一个php_function哦。 eval()针对php安全来说具有很...2016-11-25
  • php中eval()函数操作数组的方法

    在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
  • Python astype(np.float)函数使用方法解析

    这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08
  • Jupyter Notebook读取csv文件出现的问题及解决

    这篇文章主要介绍了JupyterNotebook读取csv文件出现的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2023-01-06
  • Python中的imread()函数用法说明

    这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
  • C# 中如何取绝对值函数

    本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
  • C#学习笔记- 随机函数Random()的用法详解

    下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • Photoshop打开PSD文件空白怎么解决

    有时我们接受或下载到的PSD文件打开是空白的,那么我们要如何来解决这个 问题了,下面一聚教程小伙伴就为各位介绍Photoshop打开PSD文件空白解决办法。 1、如我们打开...2016-09-14
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • 解决python 使用openpyxl读写大文件的坑

    这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
  • C#实现HTTP下载文件的方法

    这篇文章主要介绍了C#实现HTTP下载文件的方法,包括了HTTP通信的创建、本地文件的写入等,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • SpringBoot实现excel文件生成和下载

    这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
  • php无刷新利用iframe实现页面无刷新上传文件(1/2)

    利用form表单的target属性和iframe 一、上传文件的一个php教程方法。 该方法接受一个$file参数,该参数为从客户端获取的$_files变量,返回重新命名后的文件名,如果上传失...2016-11-25
  • 金额阿拉伯数字转换为中文的自定义函数

    CREATE FUNCTION ChangeBigSmall (@ChangeMoney money) RETURNS VarChar(100) AS BEGIN Declare @String1 char(20) Declare @String2 char...2016-11-25
  • C++中 Sort函数详细解析

    这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • php批量替换内容或指定目录下所有文件内容

    要替换字符串中的内容我们只要利用php相关函数,如strstr,str_replace,正则表达式了,那么我们要替换目录所有文件的内容就需要先遍历目录再打开文件再利用上面讲的函数替...2016-11-25
  • PHP文件上传一些小收获

    又码了一个周末的代码,这次在做一些关于文件上传的东西。(PHP UPLOAD)小有收获项目是一个BT种子列表,用户有权限上传自己的种子,然后配合BT TRACK服务器把种子的信息写出来...2016-11-25
  • PHP用strstr()函数阻止垃圾评论(通过判断a标记)

    strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。语法:strstr(string,search)参数string,必需。规定被搜索的字符串。 参数sea...2013-10-04