利用PHP分割字符串函数把字符串成分割数组

 更新时间:2016年11月25日 16:46  点击:1784
在php中字符串分割有很多,如有str_split,explode,chunk_split()函数,下面我给大家分别整理了一些实例,希望能给大家带来帮助。

str_split() 可以将字符串按照需要的长度做分割, 但是如果字符串中有UTF-8编码的中文出现,就会出现乱码。
如果需要实现支持中文的按照长度分割字符串的功能就需要额外处理

 代码如下 复制代码

<?php
$str = 'hello world';
$arr = str_split($str);
print_r($arr);
/*
Array
(
   
[0] => h
   
[1] => e
   
[2] => l
   
[3] => l
   
[4] => o
   
[5] =>
   
[6] => w
   
[7] => o
   
[8] => r
   
[9] => l
   
[10] => d
)
*/
 
$arr = str_split($str,2);
print_r($arr);
/*
Array
(
   
[0] => he
   
[1] => ll
   
[2] => o
   
[3] => wo
   
[4] => rl
   
[5] => d
)
 
*/
?>

支持UTF-8编码的中文的按照长度分割字符串函数

 代码如下 复制代码

<?php
/**
* @version $Id: str_split.php 10381 2008-06-01 03:35:53Z pasamio $
* @package utf8
* @subpackage strings
*/
function utf8_str_split($str, $split_len = 1)
{
    if (!preg_match('/^[0-9]+$/', $split_len) || $split_len < 1)
        return FALSE;
 
    $len = mb_strlen($str, 'UTF-8');
    if ($len <= $split_len)
        return array($str);
 
    preg_match_all('/.{'.$split_len.'}|[^x00]{1,'.$split_len.'}$/us', $str, $ar);
 
    return $ar[0];
}
 
$str = 'hello 你好';
 
$arr = utf8_str_split($str);
print_r($arr);
/*
Array
(
   
[0] => h
   
[1] => e
   
[2] => l
   
[3] => l
   
[4] => o
   
[5] =>
   
[6] => 你
   
[7] => 好
)
*/
?>

主要是chunk_split()函数的功能

与str_split()的区别是str_split()是把字符串按照长度分割成数组,而chunk_split()则是用一个指定的特殊符按照长度分割成新的字符串。

相当于 str_split()+implode()两个函数的功能。

同样这个函数是不支持中文的,需要实现这样的功能需要自定义函数。

 代码如下 复制代码

<?php
    $data = "e0ab71ab9ed24e627a24e7d65367936393cb3b39db9a9e84d65cd7a9254a4665";
    echo chunk_split($data, 30, "<br />");
    echo implode("<br />",str_split($data,30));
//和chunk_split效果一样
?>

支持中文的自定义chunk_split()函数

 代码如下 复制代码

<?php
//from Peter from dezzignz.com 05-Apr-2010 11:30 @ php.net
 
function mbStringToArray ($str) {
    if (empty($str)) return false;
    $len = mb_strlen($str);
    $array = array();
    for ($i = 0; $i < $len; $i++) {
        $array[] = mb_substr($str, $i, 1);
    }
    return $array;
}
 
function mb_chunk_split($str, $len, $glue) {
    if (empty($str)) return false;
    $array = mbStringToArray ($str);
    $n = 0;
    $new = '';
    foreach ($array as $char) {
        if ($n < $len) $new .= $char;
        elseif ($n == $len) {
            $new .= $glue . $char;
            $n = 0;
        }
        $n++;
    }
    return $new;
}
 
$data = "e0ab你好4e627a24e7d65367936393cb3b39db9钓鱼岛a9e84d65cd7a9254a4665";
echo mb_chunk_split($data, 30, "<br />");
?>

PHP explode函数说明,这个函数我们经常会用到

explode 函数
该函数所支持版本(PHP 4, PHP 5),通常是比 split() 更快的替代方案。如果不需要正则表达式的威力,则使用 explode() 更快,这样就不会招致正则表达式引擎的浪费。

explode  —         使用一个字符串分割另一个字符串

 说明
array explode ( string $delimiter , string $string [, int $limit ] )
此函数返回由字符串组成的数组,每个元素都是 string 的一个子串,它们被字符串 delimiter 作为边界点分割出来。

 参数
 

delimiter
边界上的分隔字符。

string
输入的字符串。

limit
如果设置了 limit 参数并且是正数,则返回的数组包含最多 limit 个元素,而最后那个元素将包含 string 的剩余部分。

如果 limit 参数是负数,则返回除了最后的 -limit 个元素外的所有元素。

如果 limit 是 0,则会被当做 1。

 

由于历史原因,虽然 implode() 可以接收两种参数顺序,但是 explode() 不行。你必须保证 separator 参数在 string 参数之前才行。

 返回值
此函数返回由字符串组成的 array,每个元素都是 string 的一个子串,它们被字符串 delimiter 作为边界点分割出来。

如果 delimiter 为空字符串(""), explode() 将返回 FALSE。 如果 delimiter 所包含的值在 string 中找不到,并且使用了负数的 limit , 那么会返回空的 array, 否则返回包含 string 单个元素的数组。

Report a bug
 更新日志
 

版本 说明
5.1.0 支持负数的 limit
4.0.1 增加了参数 limit
Example #1 explode() 例子
PHP代码

 

 代码如下 复制代码
   <?php      
    // 示例 1      
    $pizza  = "piece1 piece2 piece3 piece4 piece5 piece6";      
    $pieces = explode(" ", $pizza);      
    echo $pieces[0]; // piece1      
    echo $pieces[1]; // piece2      
         
    // 示例 2      
    $data = "foo:*:1023:1000::/home/foo:/bin/sh";      
    list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data);      
    echo $user; // foo      
    echo $pass; // *      
         
    ?>      

Example #2 explode() return examples
PHP代码

  

 代码如下 复制代码

  <?php      
    /* A string that doesn't contain the delimiter will simply return a one-length array of the original string. */     
    $input1 = "hello";      
    $input2 = "hello,there";      
    var_dump( explode( ',', $input1 ) );    
    var_dump( explode( ',', $input2 ) );      
         
    ?>      

 


以上例程会输出:

array(1)
(
    [0] => string(5) "hello"
)
array(2)
(
    [0] => string(5) "hello"
    [1] => string(5) "there"
)

Example #3 limit 参数的例子
PHP代码

  

 代码如下 复制代码
  <?php      
    $str = 'one|two|three|four';      
         
    // 正数的 limit      
    print_r(explode('|', $str, 2));      
         
    // 负数的 limit(自 PHP 5.1 起)      
    print_r(explode('|', $str, -1));      
    ?>   

 

以上例程会输出:
Array
(
    [0] => one
    [1] => two|three|four
)
Array
(
    [0] => one
    [1] => two
    [2] => three
)

isset函数我们多用于判断变量是不是存在了,如isset($a)了,如果存在返回 true,否则返回false了,下面我们一起来看看。

isset函数是检测变量是否设置。

格式:bool isset ( mixed var [, mixed var [, ...]] )

返回值:

若变量不存在则返回 FALSE
若变量存在且其值为NULL,也返回 FALSE
若变量存在且值不为NULL,则返回 TURE
同时检查多个变量时,每个单项都符合上一条要求时才返回 TRUE,否则结果为 FALSE
如果已经使用 unset() 释放了一个变量之后,它将不再是 isset()。若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE。同时要注意的是一个 NULL 字节("")并不等同于 PHP 的 NULL 常数。


获取用户属性时有的用户能,有的用户不能,同样的逻辑为什么不能经检查使用了类似这样的代码

 代码如下 复制代码

$userInfo=’abc’;
if(isset($userInfo['account'])) {
$account=$userInfo['account'];
} else {
$account=$userInfo;
}

发现$account得到的是空,查了一些资料也没得到结果
做了一个实验得到了结论

 代码如下 复制代码

$a=’abc’;
echo $a['account'];

结果是a

当是字符串key没有时,它会转化成数字key,是0,所以得到了a
现在php5.4已经修复

趁这机会,整理了一下isset的用法,供大家借鉴

 代码如下 复制代码

<?php

$var = '';

if (isset($var)) {
print "This var is set set so I will print.";
}

// 在后边的例子中,我们将使用 var_dump函数 输出 isset() 的返回值。

$a = "test";
$b = "anothertest";

var_dump( isset($a) ); // TRUE
var_dump( isset ($a, $b) ); // TRUE

unset ($a);

var_dump( isset ($a) ); // FALSE
var_dump( isset ($a, $b) ); // FALSE

$foo = NULL;
var_dump( isset ($foo) ); // FALSE

?>

这对于数组中的元素也同样有效:

 

 代码如下 复制代码

<?php

$a = array ('test' => 1, 'hello' => NULL);

var_dump( isset ($a['test') ); // TRUE
var_dump( isset ($a['foo') ); // FALSE
var_dump( isset ($a['hello') ); // FALSE

// 'hello' 等于 NULL,所以被认为是未赋值的。
// 如果想检测 NULL 键值,可以试试下边的方法。
var_dump( array_key_exists('hello', $a) ); // TRUE

?>

 

键 ‘b’ 的值等于 NULL,所以被认为是未置值的。
但是键’c'的值是空结果是true,空值是代表 有设置的 如果想检测 NULL 键值,可以试试下边的方法。

 代码如下 复制代码

var_dump( array_key_exists(‘hello’, $a) ); // TRUE

警告: isset() 只能用于变量,因为传递任何其它参数都将造成解析错误。若想检测常量是否已设置,可使用 defined() 函数。

一些应用中实例


PHP isset()对PHP参数判断您可以使用 PHP isset() 来判断一个参数是否被定义,注意如果该参数为空,或者"n"(NULL字节)使用 PHP isset() 判断之后,都会为TRUE。

 代码如下 复制代码

<?php
$weigeti=''; //这里初始参数$weigeti='';
$weigeti0=FALSE //这里初始参数为布尔FALSE
$weigeti2=NULL;  //这里定义$weigeti2=NULL,用isset()判断返回FALSE
$weigeti3=""; // 这里是NULL字节,用isset()判断,返回TRUE,不同于NULL常数
$weigeti4="www.v-get.com";  //这里定义会在下面给unset掉

if(isset($weigeti)){ echo '参数$weigeti已经设定,且值不为NULL'; }
// 参数$weigeti已经赋值,而且值为$weigeti='',所以会输出“参数$weigeti已经设定”

if(isset($weigeti0)){ echo '参数$weigeti0已经设定,且值不为NULL'; }
// 参数$weigeti0已经赋值,而且值为$weigeti=FALSE,所以会输出“参数$weigeti已经设定”

if(isset($vget)){ echo '参数$vget已经设定,且值不为NULL'; }
// 参数$vget根本就没有被提及过,isset($vget)返回FALSE,不会输出

if(isset($weigeti2)){ echo '参数$weigeti2已经设定,且值不为NULL'; }
// 这里是$weigeti2虽然被设定了,但是$weigeti2=NULL,所以isset($weigeti2)返回FALSE,不会输出

if(isset($weigeti3)){ echo '参数$weigeti3已经设定,且值不为NULL'; }
// 参数$weigeti3 虽然 就是代表NULL字节,但是这个不是常数NULL,所以$isset("")返回TRUE,会输出

unset($weigeti4);  //这里给$weigeti4 释放掉了
if(isset($weigeti4)){ echo '参数$weigeti4已经设定,且值不为NULL'; }
// 虽然开始已经定义$weigeti4,而且还不为NULL,但是后来又给 unset() 掉了,所以不会输出。
?>

PHP isset() 对数组的判断在使用PHP数组的时候,需要判断数组的某个值是否存在也可以使用 PHP isset() 函数。

 代码如下 复制代码

<?php
$V=array(
'WeiGeTi'=>'www.111cn.net',
'V-Get'=>array(
    'www'=>'www.v-get.com',
    'e'=>'e.v-get.com',
    'wuliu'=>array(
        'www'=>'wuliu.v-get.com',
        'yiwu'=>'www.111cn.net'
     )
   )
);

// var_dump用于输出TRUE 或 FALSE


var_dump(isset($V['WeiGeTi']));
// 数组$V 的$V['WeiGeTi'] ='www.111cn.net'已经存在,所以输出TRUE

var_dump(isset($V['V-Get']['e']));
//$V['V-Get']['e']='e.v-get.com' 所以输出 TRUE

var_dump(isset($V['V-Get']['wuliu']['yiwu']));
// $V['V-Get']['wuliu']['yiwu']='www.111cn.net'所以输出TRUE

var_dump(isset($V['V-Get']['wuliu']['sh']));
//根据数组,根本就没有设定该项,所以输出FALSE
?>

PHP isset()多参数判断很多时候我们需要对多个参数进行判断,可以使用isset($A)&&isset($B)……来判断这些参数是不是都已经设定了,而且都不为NULL,对此您可以使用isset()多参数来判断是不是都设定了。

 代码如下 复制代码
<?php
isset($v1)&&isset($v2)&&isset($v3)……
等价于
isset($v1,$v2,$v3……)
?>

使用isset()判断多个参数,需要所有参数都被设定,且不为NULL,只要其中有一个参数没有被设定过,或者为NULL,那么整个isset()就为FALSE。

PHP isset()判断$_POST、$_GET、$_REQUEST等值。用isset() 或者empty() 判断通过表单传递来的参数是isset() 最常见的用法。

 代码如下 复制代码
if(isset($_POST['from'])&&'E.V-Get.com'==$_POST['from']){
echo '网站通过POST传递的来源是E.V-Get.com';
}

根据上面我们可以用isset判断多参数,在对表单传递来的值进行判断就最方便了。

 代码如下 复制代码

<?php
//表单传递来user用户名和 pass必须同时存在才能执行
if(isset($_POST['user'],$_POST['pass'])){
$user=$_POST['user'];
$pass=$_POST['pass'];
echo '您填写的用户名是:',$user,';密码是:',$pass;

}
?>

PHP isset($var{字符串长度}) 判断字符串长度用PHP判断字符串是否存在或者判断字符串长度是否超过某一数字或者判断字符串长度是否为空一般使用strlen(),但是其实使用isset()性能更优越。

 代码如下 复制代码

<?php
//三元,等同于 if(isset($_POST['from'])){$weigeti=$_POST['from'];}else{$weiget='';}

$weigeti=isset($_POST['from'])?$_POST['from']:'';

//判断$weigeti存在,且字符串长度大于0
/* 菜鸟写法 
if(strlen($weigeti)>0){
echo '$weigeti子符长度大于0';}
*/

// 性能更优越的写法,判断$weigeti第1个字符是否设定了
if(isset($weigeti{1})){
echo '$weigeti字符长度大于0';
}
?>

在php中我们对错误的处理会常用到error_reporting函数了,大家可以看到最多的是error_reporting(E_ALL ^ E_NOTICE)了,这个到底什么意思呢,下面我来来看看。

我们在程序中可能经常看到这么一个函数

 代码如下 复制代码

function setErrorReporting()
{
    //从配置文件读取当前是否为开发环境
    if (DEV_ENV == true) {
        ini_set("error_reprorting", "E_ALL & ~E_NOTICE");
        ini_set("display_errors", "on");
    } else {
        error_reporting(E_ALL);
        ini_set('display_errors', 'Off');
        ini_set("log_errors" , "On");
        ini_set('error_log', '/var/log/phperror.log');

    }
}

举例说明:

在Windows环境下:原本在php4.3.0中运行正常的程序,在4.3.1中为何多处报错,大体提示为:Notice:Undefined varialbe:变量名称.


例如有如下的代码:

 代码如下 复制代码

if (!$tmp_i) {
$tmp_i=10;
}

在4.3.0中运行正常,在4.3.1中运行会提示Notice:Undefined varialbe:tmp_i

问题如下:1.问题出在哪里?
2.应如何修改这段代码?
3.不改段代码,如何修改php.ini中的设置使原来在4.3.0中的程序在4.3.1的环境下运行正常而不出现这个错误提示.

解决办法:


在程序开头加一句:

 代码如下 复制代码

error_reporting(E_ALL & ~E_NOTICE); 或error_reporting(E_ALL ^ E_NOTICE);

或者修改php.ini:

 代码如下 复制代码

error_reporting = E_ALL & ~E_NOTICE

有关error_reporting()函数: error_reporting() 设置 PHP 的报错级别并返回当前级别。
; 错误报告是按位的。或者将数字加起来得到想要的错误报告等级。
; E_ALL - 所有的错误和警告
; E_ERROR - 致命性运行时错
; E_WARNING - 运行时警告(非致命性错)
; E_PARSE - 编译时解析错误
; E_NOTICE - 运行时提醒(这些经常是是你的代码的bug引起的,也可能是有意的行为造成的。(如:基于未初始化的变量自动初始化为一个空字符串的事实而使用一个未初始化的变量)
; E_CORE_ERROR - 发生于PHP启动时初始化过程中的致命错误
; E_CORE_WARNING - 发生于PHP启动时初始化过程中的警告(非致命性错)
; E_COMPILE_ERROR - 编译时致命性错
; E_COMPILE_WARNING - 编译时警告(非致命性错)
; E_USER_ERROR - 用户产生的出错消息
; E_USER_WARNING - 用户产生的警告消息
; E_USER_NOTICE - 用户产生的提醒消息

E_NOTICE 表示一般情形不记录,只有程式有错误情形时才用到,例如企图存取一个不存在的变数,或是呼叫 stat() 函式检视不存在的档案。

E_WARNING 通常都会显示出来,但不会中断程式的执行。这对除错很有效。例如:用有问题的常规表示法呼叫 ereg()。

E_ERROR 通常会显示出来,亦会中断程式执行。意即用这个遮罩无法追查到记忆体配置或其它的错误。

E_PARSE 从语法中剖析错误。

E_CORE_ERROR 类似 E_ERROR,但不包括 PHP 核心造成的错误。

E_CORE_WARNING 类似 E_WARNING,但不包括 PHP 核心错误警告


使用方法:

error_reporting(0);//禁用错误报告
error_reporting(E_ALL ^ E_NOTICE);//显示除去 E_NOTICE 之外的所有错误信息
error_reporting(E_ALL^E_WARNING^E_NOTICE);//显示除去E_WARNING E_NOTICE 之外的所有错误信息
error_reporting(E_ERROR | E_WARNING | E_PARSE);//显示运行时错误,与error_reporting(E_ALL ^ E_NOTICE);效果相同。error_reporting(E_ALL);//显示所有错误

error_reporting(0)

error_reporting(255);

是列出所有提示

error_reporting(0);

是不显示所有提示

建议使用

error_reporting(7);

只显示严重错误

1 E_ERROR 致命的运行时错误

2 E_WARNING 运行时警告(非致命性错误)

4 E_PARSE 编译时解析错误

8 E_NOTICE 运行时提醒(经常是bug,也可能是有意的)

16 E_CORE_ERROR PHP启动时初始化过程中的致命错误

32 E_CORE_WARNING PHP启动时初始化过程中的警告(非致命性错)

64 E_COMPILE_ERROR 编译时致命性错

128 E_COMPILE_WARNING 编译时警告(非致命性错)

256 E_USER_ERROR 用户自定义的致命错误

512 E_USER_WARNING 用户自定义的警告(非致命性错误)

1024 E_USER_NOTICE 用户自定义的提醒(经常是bug,也可能是有意的)

2048 E_STRICT 编码标准化警告(建议如何修改以向前兼容)

4096 E_RECOVERABLE_ERROR 接近致命的运行时错误,若未被捕获则视同E_ERROR

6143 E_ALL 除E_STRICT外的所有错误(PHP6中为8191,即包含所有)

php文件操作函数包括有上千个,这里我来给大家总结一些常用的php文件操作函数吧,希望此文章对各位同学会有所帮助哦。

 

最近写了几个计数器的源码实例和生成静态文章CMS,用到了php的文件操作,php的文件操作函数还是很强大的,真正常常使用的却经常是哪么几个。所以在学习时只需要记住使用频率很高的几个就行了,不用记得那么多无用的函数代码,至于使用频率不是很高的,只要看到是什么意思就可以了。下面是本博04ie.com几个在php中使用频率很高的函数,几乎在用到php操作函数时经常会使用到,其实只有六个,先备份下来,在温习php知识时正好拿来用。

一、判断文件是否存在

if(file_exists(“data.txt”)) {//内容;}

二、打开文件

$openfile=fopen(“路径和文件名”,”打开方式”); //打开方式: r只读,w只写,a读写;

三、读取文件

$str=fread($openfile, filesize(“路径和文件名”)); //参数:打开的文件,截止字符位置;

四、读取文件大小(单位:字节)

filesize(“路径和文件名”);

五、写入文件内容

fwrite(“路径和文件名”,写入的内容);

六、关闭文件

fclose($openfile); //参数:打开的文件

知识:替换函数str_replace(“原内容”,”要替换成的内容”,变量);

以下是个人总结的PHP文件操作函数。当然,这只是部分,还有很多,我没有列出来。

一 、解析路径:

1 获得文件名:
basename();
给出一个包含有指向一个文件的全路径的字符串,本函数返回基本的文件名。如果文件名是以 suffix 结束的,那这一部分也会被去掉。
eg:


$path = "/home/httpd/html/index.php";
$file = basename($path,".php"); // $file is set to "index"
 

2 得到目录部分:
dirname();
给出一个包含有指向一个文件的全路径的字符串,本函数返回去掉文件名后的目录名。
eg:


$path = "/etc/passwd";
$file = dirname($path); // $file is set to "/etc"
 

3 得到路径关联数组
pathinfo();
得到一个指定路径中的三个部分:目录名,基本名,扩展名。
eg:


$pathinfo = pathinfo("www/test/index.html");
var_dump($pathinfo);
// $path['dirname']
$path['basename']
$path['extenssion']
 
二、文件类型
1. filetype();
返回文件的类型。可能的值有 fifo,char,dir,block,link,file 和 unknown。
eg:


echo filetype('/etc/passwd'); // file
echo filetype('/etc/');        // dir
 
三、得到给定文件有用信息数组(很有用)

1. fstat();
通过已打开的文件指针取得文件信息
获取由文件指针 handle 所打开文件的统计信息。本函数和 stat() 函数相似,除了它是作用于已打开的文件指针而不是文件名。
eg:


 

// 打开文件
$fp = fopen("/etc/passwd", "r");
// 取得统计信息
$fstat = fstat($fp);
// 关闭文件
fclose($fp);
// 只显示关联数组部分
print_r(array_slice($fstat, 13));
2. stat()
获取由 filename 指定的文件的统计信息(类比fstat())

四、计算大小
1. filesize()
返回文件大小的字节数,如果出错返回 FALSE 并生成一条 E_WARNING 级的错误。
eg:


// 输出类似:somefile.txt: 1024 bytes
$filename = 'somefile.txt';
echo $filename . ': ' . filesize($filename) . ' bytes';
 
2. disk_free_space()
获得目录所在磁盘分区的可用空间(字节单位)
eg


// $df 包含根目录下可用的字节数
$df = disk_free_space("/");
//在 Windows 下:
disk_free_space("C:");
disk_free_space("D:");

 
3. disk_total_space()
返回一个目录的磁盘总大小
eg:(同上,换掉函数)

另:如需要计算一个目录大小,可以编写一个递归函数来实现


代码
function dir_size($dir){
$dir_size = 0;
if($dh = @opendir($dir)){
while(($filename = readdir($dh)) != false){
if($filename !='.' and $filename !='..'){

     if(is_file($dir.'/'.$filename)){
$dir_size +=filesize($dir.'/'.$filename);

}else if(is_dir($dir.'/'.$filename)){

      $dir_size +=dir_size($dir.'/'.$filename);
}
}

                   }#end while

            }# end opendir

@closedir($dh);
return $dir_size;
} #end function

 

五、 访问与修改时间
1. fileatime(): 最后访问时间
2. filectime(): 最后改变时间(任何数据的修改)
3. filemtime(): 最后修改时间(指仅是内容修改)

 

六、 文件的I/O操作


1. fopen -- 打开文件或者 URL

mode 说明
'r' 只读方式打开,将文件指针指向文件头。
'r+' 读写方式打开,将文件指针指向文件头。
'w' 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'w+' 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'a' 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
'a+' 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
'x' 创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,
'x+' 创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE
eg:


$handle = fopen("/home/rasmus/file.txt", "r");
 

2. file -- 把整个文件读入一个数组中(此函数是很有用的)
和 file_get_contents() 一样,只除了 file() 将文件作为一个数组返回。数组中的每个单元都是文件中相应的一行,包括换行符在内。如果失败 file() 返回 FALSE。
eg:


代码
$lines = file('http://www.example.com/');
// 在数组中循环,显示 HTML 的源文件并加上行号。
foreach ($lines as $line_num => $line) {
echo "Line #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br />n";
}
// 另一个例子将 web 页面读入字符串。参见 file_get_contents()。
$html = implode('', file ('http://www.example.com/'));

 

3. fgets -- 从文件指针中读取一行
从 handle 指向的文件中读取一行并返回长度最多为 length - 1 字节的字符串。碰到换行符(包括在返回值中)、EOF 或者已经读取了 length - 1 字节后停止(看先碰到那一种情况)。如果没有指定 length,则默认为 1K,或者说 1024 字节。
eg:


$handle = @fopen("/tmp/inputfile.txt", "r");
if ($handle) {
while (!feof($handle)) {
$buffer = fgets($handle, 4096);
echo $buffer;
}
fclose($handle);
}
 

4. fgetss -- 从文件指针中读取一行并过滤掉 HTML 标记
和 fgets() 相同,只除了 fgetss 尝试从读取的文本中去掉任何 HTML 和 PHP 标记。

   可以用可选的第三个参数指定哪些标记不被去掉


   另:对的目录的操作:
1. opendir -- 打开目录句柄,打开一个目录句柄,可用于之后的 closedir(),readdir() 和 rewinddir() 调用中。
2. readdir -- 从目录句柄中读取条目,返回目录中下一个文件的文件名。文件名以在文件系统中的排序返回。
eg:

 

代码
// 注意在 4.0.0-RC2 之前不存在 !== 运算符

if ($handle = opendir('/path/to/files')) {
echo "Directory handle: $handlen";
echo "Files:n";
 
while (false !== ($file = readdir($handle))) {
echo "$filen";
}
  
while ($file = readdir($handle)) {
echo "$filen";
}
     closedir($handle);
}
 


3. scandir -- 列出指定路径中的文件和目录(很有用),返回一个 array,包含有 directory 中的文件和目录。
默认的排序顺序是按字母升序排列。如果使用了可选参数 sorting_order(设为 1),则排序顺序是按字母降序排列。
eg:

$dir    = '/tmp';
$files1 = scandir($dir);
$files2 = scandir($dir, 1);

print_r($files1);
print_r($files2);  
 

另外注:

七、 对文件属性的操作(操作系统环境不同,可能有所不一样,这点要注意)

    1文件是否可读:

       boolis_readable ( string filename )

         如果由 filename 指定的文件或目录存在并且可读则返回 TRUE。

        记住 PHP 也许只能以运行 webserver 的用户名(通常为 'nobody')来访问文件。不计入安全模式的限制。

    2 文件是否可写

         bool is_writable ( string filename )

        如果文件存在并且可写则返回 TRUE。filename 参数可以是一个允许进行是否可写检查的目录名。

         记住 PHP 也许只能以运行 webserver 的用户名(通常为 'nobody')来访问文件。不计入安全模式的限制

   3  检查文件是否存在

    boolfile_exists ( string filename )

      如果由 filename 指定的文件或目录存在则返回 TRUE,否则返回 FALSE

本文章来给各位同学介绍一下关于一些常用的php 文件系统函数整理,希望这些东西对各位同学会有所帮助哦。


简介:本次介绍的是PHP中与文件操作相关的系统函数,这些函数也是非常的重要,下面天涯依然是对比较常用的进行详细举例说明。

basename — 返回路径中的文件名部分
dirname — 返回路径中的目录部分

    string basename ( string $path [, string $suffix ] )
    string dirname ( string $path )

示例:

 

 代码如下 复制代码
   <?php
    //天涯PHP博客 http://www.111cn.net
    $path = "/home/httpd/www.111cn.net/index.php";
    echo basename($path);
    echo basename($path, '.php');
    echo basename($path, '.xxx');
    echo dirname($path);
    ?>
    //结果:
    index.php
    index
    index.php
    /home/httpd/www.111cn.net

说明:如果文件名是以正确的suffix结束的,那这一部分也会被去掉。

chgrp — 改变文件所属的组
chown — 改变文件的所有者
chmod — 改变文件模式

    bool chmod ( string $filename , int $mode )

示例:

 

 代码如下 复制代码
   <?php
    chmod('/home/phpha.txt', 0755);
    ?>

copy — 拷贝文件

  

 代码如下 复制代码
  if(copy('index.php', 'index.php.bak')){
    echo 'copy success';
    }
    ?>

    //在当前目录下生存了index.php.bak文件

delete — 参见 unlink 或 unset
unlink — 删除文件

 代码如下 复制代码

    <?php
    if(unlink('index.php.bak')){
    echo 'unlink success';
    }
    ?>
    //删除了index.php.bak

disk_free_space — 返回目录中的可用空间
disk_total_space — 返回一个目录的磁盘总大小
diskfreespace — disk_free_space 的别名

  

 代码如下 复制代码
  <?php
    //在 Windows 下:
    echo disk_free_space("C:"), '<br />';
    echo disk_total_space("C:");
    ?>
    //结果:返回的是字节数
    17433419776
    32218386432

fopen — 打开文件或者 URL
fgets — 从文件指针中读取一行
feof — 测试文件指针是否到了文件结束的位置
fread — 读取文件(可安全用于二进制文件)
fwrite — 写入文件(可安全用于二进制文件)
fclose — 关闭一个已打开的文件指针

   

 代码如下 复制代码
<?php
    //天涯PHP博客 http://www.111cn.net
    $fp = fopen('hello.txt', 'r'); //打开一个文件
    $n = 1;
    while(!feof($fp)){
    echo $n, ' - ', fgets($fp), '<br />'; //读取一行并输出
    $n++;
    }
    fclose($fp); //关闭文件
    ?>
    //输出:
    1 - Welcome to my blog:
    2 - http://www.111cn.net

fgetc — 从文件指针中读取字符
fgetcsv — 从文件指针中读入一行并解析 CSV 字段
fgetss — 从文件指针中读取一行并过滤掉 HTML 标记
fputcsv — 将行格式化为 CSV 并写入文件指针
fputs — fwrite 的别名

  

 代码如下 复制代码
  <?php
    $fp = fopen('hello.txt', 'r');
    while(false !== ($char = fgetc($fp))){
    echo $char, '-';
    }
    ?>
    //输出:
    W-e-l-c-o-m-e- -t-o- -m-y- -b-l-o-g-:- - -h-t-t-p-:-/-/-b-l-o-g-.-p-h-p-h-a-.-c-o-m-

file_exists — 检查文件或目录是否存在

   

 代码如下 复制代码
<?php
    if(file_exists('hello.txt')){
    echo 'hello.txt exists';
    }else{
    echo 'hello.txt not exists';
    }
    ?>
    //输出:
    hello.txt exists

file_get_contents — 将整个文件读入一个字符串
file_put_contents — 将一个字符串写入文件
file — 把整个文件读入一个数组中

   

 代码如下 复制代码
<?php
    if($content = file_get_contents('hello.txt')){
    file_put_contents('hello.txt.bak', $content);
    }
    ?>
    //相当于copy了一份hello.txt
    <?php
    if($content = file('hello.txt')){
    print_r($content);
    }
    ?>
    //数组形式,每一行是一个数组成员
    Array
    (
    [0] => Welcome to my blog:
    [1] => http://www.111cn.net
    )

fileatime — 取得文件的上次访问时间
filectime — 取得文件的 inode 修改时间
filegroup — 取得文件的组
fileinode — 取得文件的 inode
filemtime — 取得文件修改时间
fileowner — 取得文件的所有者
fileperms — 取得文件的权限
filesize — 取得文件大小
filetype — 取得文件类型

   

 代码如下 复制代码
<?php
    echo fileatime('hello.txt');
    echo filectime('hello.txt');
    echo filegroup('hello.txt');
    echo filemtime('hello.txt');
    echo fileowner('hello.txt');
    echo substr(sprintf('%o', fileperms('hello.txt')), -4);
    echo filesize('hello.txt');
    echo filetype('hello.txt');
    ?>
    //输出:
    1353329003
    1353329003
    0
    1353330002
    0
    0666
    42
    file

flock — 轻便的咨询文件锁定
fnmatch — 用模式匹配文件名
fflush — 将缓冲内容输出到文件
fpassthru — 输出文件指针处的所有剩余数据
fscanf — 从文件中格式化输入
fseek — 在文件指针中定位
fstat — 通过已打开的文件指针取得文件信息
ftell — 返回文件指针读/写的位置
ftruncate — 将文件截断到给定的长度
glob — 寻找与模式匹配的文件路径

is_dir — 判断给定文件名是否是一个目录
is_executable — 判断给定文件名是否可执行
is_file — 判断给定文件名是否为一个正常的文件
is_link — 判断给定文件名是否为一个符号连接
is_readable — 判断给定文件名是否可读
is_uploaded_file — 判断文件是否是通过 HTTP POST 上传的
is_writable — 判断给定的文件名是否可写
is_writeable — is_writable 的别名
说明:以上函数都是用来判断文件或目录是否符合对应的条件,返回TRUE或FALSE。

lchgrp — Changes group ownership of symlink
lchown — Changes user ownership of symlink
link — 建立一个硬连接
linkinfo — 获取一个连接的信息
lstat — 给出一个文件或符号连接的信息
mkdir — 新建目录
move_uploaded_file — 将上传的文件移动到新位置
parse_ini_file — 解析一个配置文件
pathinfo — 返回文件路径的信息
pclose — 关闭进程文件指针
popen — 打开进程文件指针
readfile — 输出一个文件
readlink — 返回符号连接指向的目标
realpath — 返回规范化的绝对路径名
rename — 重命名一个文件或目录
rewind — 倒回文件指针的位置
rmdir — 删除目录
set_file_buffer — stream_set_write_buffer 的别名
stat — 给出文件的信息
symlink — 建立符号连接
tempnam — 建立一个具有唯一文件名的文件
tmpfile — 建立一个临时文件
touch — 设定文件的访问和修改时间
umask — 改变当前的 umask
clearstatcache — 清除文件状态缓存

总结:其实这么多的文件操作函数,大部分用不到,同时可以看到这些函数与linux命令相似度有多么大

[!--infotagslink--]

相关文章

  • 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
  • C#中截取字符串的的基本方法详解

    这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
  • Python astype(np.float)函数使用方法解析

    这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08
  • c#中判断字符串是不是数字或字母的方法

    这篇文章介绍了C#判断字符串是否数字或字母的实例,有需要的朋友可以参考一下...2020-06-25
  • Python 图片转数组,二进制互转操作

    这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
  • PostgreSQL判断字符串是否包含目标字符串的多种方法

    这篇文章主要介绍了PostgreSQL判断字符串是否包含目标字符串的多种方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-23
  • Python中的imread()函数用法说明

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

    这篇文章主要介绍了C++ string常用截取字符串方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
  • C# 中如何取绝对值函数

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

    下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • php数组操作 键名比较 差集 交集赋值

    本文章提供在量的数据中级操作实例有如对键名比较计算数组的差集 计算差集 给指定数组中插入一个元素 反转数组 交集赋值新的数组实例。 //定义回调函数 funct...2016-11-25
  • php字符串按照单词逐个进行反转的方法

    本文实例讲述了php字符串按照单词进行反转的方法。分享给大家供大家参考。具体分析如下:下面的php代码可以将字符串按照单词进行反转输出,实际上是现将字符串按照空格分隔到数组,然后对数组进行反转输出。...2015-03-15
  • C#二维数组基本用法实例

    这篇文章主要介绍了C#二维数组基本用法,以实例形式分析了C#中二维数组的定义、初始化、遍历及打印等用法,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • C#数组的常用操作方法小结

    Array数组在C#中同样是最基本的数据结构,下面为大家C#数组的常用操作方法小结,皆为细小的代码段,欢迎收看收藏...2020-06-25
  • php curl模拟post请求和提交多维数组的示例代码

    下面一段代码给大家介绍php curl模拟post请求的示例代码,具体代码如下: <&#63;php$uri = "http://www.cnblogs.com/test.php";//这里换成自己的服务器的地址// 参数数组$data = array ( 'name' => 'tanteng'// 'passwor...2015-11-24
  • 金额阿拉伯数字转换为中文的自定义函数

    CREATE FUNCTION ChangeBigSmall (@ChangeMoney money) RETURNS VarChar(100) AS BEGIN Declare @String1 char(20) Declare @String2 char...2016-11-25
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • 使用list stream: 任意对象List拼接字符串

    这篇文章主要介绍了使用list stream:任意对象List拼接字符串操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-09
  • C++中 Sort函数详细解析

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