首页 > 编程技术 > php

php 文件系统函数整理介绍

发布时间:2016-11-25 16:47

本文章来给各位同学介绍一下关于一些常用的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命令相似度有多么大

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 str_replace 函数参数为数组时的使用,如果你此教程有兴趣不防进入参考。

str_replace 用于字符串替换

 代码如下 复制代码

<?php
str_replace("php","java","php教程4");
//java教程4
?>

被搜索的变量是字符串

 代码如下 复制代码

<?php
/*
被搜索的变量是字符串
*/
$array=array();
$array[]='php教程1';
$array[]='php教程2';
$array[]='php教程3';
$array[]='php教程4';
$arrayNew=str_replace("php","java",$array);
 
print_r($arrayNew);
/*
Array
(
   
[0] => java教程1
   
[1] => java教程2
   
[2] => java教程3
   
[3] => java教程4
)
*/
?>

也可以处理数组形式的变量,查找的值和替换后的值可以是一对一关系

 代码如下 复制代码

<?php
/*
要查找的变量是数组形式
*/
$array=array();
$array[]='php教程1';
$array[]='php教程2';
$array[]='php教程3';
$array[]='php教程4';
$find=array("php","教程");
$replace=array("java","案例");
$arrayNew=str_replace($find,$replace,$array);
print_r($arrayNew);
/*
Array
(
   
[0] => java案例1
   
[1] => java案例2
   
[2] => java案例3
   
[3] => java案例4
)
*/
?>

查找的值和替换后的值可以是多对一关系

 代码如下 复制代码

<?php
/*
要查找的变量是数组形式
*/
$array=array();
$array[]='php教程1';
$array[]='php教程2';
$array[]='php教程3';
$array[]='php教程4';
$find=array("php","教程");
$arrayNew=str_replace($find,"java",$array);
 
print_r($arrayNew);
 
/*
Array
(
   
[0] => javajava1
   
[1] => javajava2
   
[2] => javajava3
   
[3] => javajava4
)
*/

在php中字符串处理有几百上千个函数支持的,可以说php处理字符串的函数是非常强大的,我们只要知道这些函数对于处理字符串都是小菜了,下面我总结一些常用的处理字符串函数。

字符串都是小菜了,下面我总结一些常用的处理字符串函数。

1.确定一个字符串的长度

这是文章中最明显的一个例子,其中的问题是我们如何来确定一个字符串的长度,这里我们不能不提的就是strlen()函数:
$text = "sunny day";

$count = strlen($text);

// $count = 9

2.截取文本,创建一个摘要

新闻性质的网站通常会截取一个大约200字左右的段落,并在次段落的末尾加上省略号来形成一个摘要,这时,你可以使用substr_replace()函数来实现此功能。由于篇幅的原因,这里只演示对40个字符的限制:

$article = "BREAKING NEWS:

In ultimate irony, man bites dog.";

$summary = substr_replace($article, "…", 40);

// $summary = "BREAKING NEWS:

In ultimate irony, man bi…"

3.计算字符串中的字符和单词数

相信您经常会看到一些博客或者新闻类文章,来总结文章的总字数,或者我们也经常看到一些投稿的要求:在一定的字数范围内。这时,你可以使用str_word_count()函数来计算文章字数的总和:

$article = "BREAKING NEWS:

In ultimate irony, man bites dog.";

$wordCount = str_word_count($article);

// $wordCount = 8

有的时候你需要更加严格的控制投稿者的使用空间,例如一些批注等等。如果你想知道有多少个字符来组成一个数组,请使用count_chars()函数。

4.解析CSV文件

数据通常是以逗号分隔的形式存储在文件中的(如一个已知的CSV文件),CSV文件使用一个逗号或者类似于预定义符号,将每列字符串组成一个单独的行。你可能经常创建PHP脚本来导入这些数据,或者解析出你所需要的东西,这些年来,我也看到过很多解析CSV文件的方法,最常见的就是使用fgets()和explode()函数的组合来读取和解析文件,然而,最简单的方法是使用一个函数来解决问题,但它并不属于PHP的字符串处理库里的一部分:fgetcsv()函数。使用fopen()和fgetcsv()函数,我们能够很容易的解析这个文件,同时检索出每个联系人的名字:

$fh = fopen("contacts.csv", "r");

while($line = fgetcsv($fh, 1000, ","))

{ echo "Contact: {$line[1]}";

}

5.转换成一个字符串数组

某些时候,你可能需要创建CSV文件,同时又在这些文件中进行读取,这就意味着你需要将那些同逗号分隔的字符串转换成数据。如果这些数据最初是从数据库检索出的,那么它很可能会只给您提供一个数组。这时,您可以使用implode()函数,将这些字符串转换成一个数组:

$csv = implode(",", $record);

6.将网址转换成超链接

目前许多WYSIWYG编辑器提供的工具栏,都允许用户标记文本,包括超链接。但是,当内容呈现到页面上时,你可以很容易的自动执行此过程,同时保证您不出现额外的错误。要转换成超链接的URL,你可以使用preg_replace()函数,它可以按照正则表达式来搜索一个字符串,并定义了URL的结构:

$url = "W.J. Gilmore, LLC (http://www.wjgilmore.com)";

$url = preg_replace("//([A-z0-9./-]+)/", "$0", $url);

// $url = "W.J. Gilmore, LLC "

7.从一个字符串中去除HTML标签

作为Web开发人员,其中的一个主要工作就是要确保用户输入中不含有危险字符,如果有,这会导致SQL注入或脚本攻击。PHP语言中包含了很多安全方面的功能,这些功能能够帮助你过滤数据,包括延长过滤器。例如,你可以允许用户中带有一些基本的HTML语句,包括一些注释。实现这个功能,你可以使用带有检查功能函数:strip_tags()。它在默认的情况下是从字符串中删除所有的HTML标签,但同时也允许覆盖默认或者你指定的标签。例如,在下面的例子中,你可以除去所有的标签:

$text = strip_tags($input, "  ");

8.比较两个字符串

比较两个字符串,以确保它们是相同的。例如,判断用户第一次与第二次输入的密码是否相同,你可以使用substr_compare()函数来很容易的现实:

$pswd = "secret";

$pswd2 = "secret";

if

(! strcmp($pswd, $pswd2))

{ echo "The passwords are not identical!";

}

如果你想判断两个字符串不区分大小写,可以使用strcasecmp()函数。

9.转换换行符

在本文中我介绍了如何轻松转换成超超链接的URL,现在介绍nl2br()函数,这个函数能够帮助你将任何换行符转换成HTML标签。

$comment = nl2br($comment);

10.应用自动换行

应用自动换行,你可以使用PHP中的这个函数:wordwrap():

$speech = "Four score and seven years ago our fathers brought forth,

upon this continent, a new nation,

conceived in Liberty,

and dedicated to the proposition that all men are created equal.";

echo wordwrap($speech, 30);

执行上面的代码,结果是:

Four score and seven years ago our fathers brought forth, upon this continent, a new nation, conceived in Liberty, and dedicated to the proposition that all men are created equal.


1.拼接字符串
拼接字符串是最常用到的字符串操作之一,在PHP中支持三种方式对字符串进行拼接操作,分别是圆点.分隔符{}操作,还有圆点等号。=来进行操作,圆点等号可以把一个比较长的字符串分解为几行进行定义,这样做是比较有好处的。

2.替换字符串
在PHP这门语言中,提供了一个名字叫做substr_replace()的函数,该函数的作用可以快速的完成扫描和编辑文本内容较多的字符串替换功能。他的语法格式:mixed substr_replace(mixed $string,string $replacement,int $start,[int $length])

3.计算字符串
计算字符串的长度:在PHP中,strlen()函数用来计算字符串的长度并且返回该字符串的长度信息。该语法的格式如下:int strlen(string $string)格式里面的string就是用来指定要计算长度的字符串。

计算字符串的数目:在PHP中,substr_count()函数,可以用来非常方便而且准确的确定一个指定的子字符串在所提供的字符串中有多少个,substr_count()函数的语法格式如下:int substr_count(string $haystack,string $needle[,int $offset=0[,int $length]])在上面的语法中设计的参数的说明如下:haystack指定要检查的字符串,needle用来指定要插入的字符串,offset用来指定在字符串中何处开始搜索,默认值为0,length用来指定搜索的长度。

在PHP中,str_word_count()函数,可以用来非常方便而且准确的确定一个某一个单词在所提供的字符串中有多少个,str_word_count()函数的语法格式如下:mixed str_word_count(string $string[,int $format=0[,string $charlist]])在上面的语法中涉及到的参数的说明如下:string用来指定要进行检查的字符串,format用来指定str_word_count()函数的返回值,这个参数的返回值可以返回三个值,分别是0,1,2。其中返回0的意思是默认值,返回找到的单词的数目,如果返回值为1的话,那么str_word_count()返回的就是一个数组,其中的键名是从0开始的连续整数,值是实际的单词。如果format的值取3的时候,那么str_word_count()函数的返回值就是一个数组,其中,数组的键名是单词在字符串中的位置,值是实际的单词。

4.查找字符串
字符串的查找可以分为很多种,比如说查找子字符串,查找某个字符串的位置等等,PHP分别为每个字符串查找操作提供了相应的函数。

查找子字符串:在PHP语言中,strstr()函数可以用来查找子字符串,该函数返回的结果为子字符串第一次出现的所有的内容,strstr()函数的格式如下:string strstr(string $haystack,mixed $needle)在上面的语法中,涉及到的参数的说明如下haystack:指定被搜索的字符串,needle指定所要搜索的字符串,如果该参数是数字的话,则会匹配器该数字ASCII值的字符。在实际的应用当中,会出现要忽略字母大小写的情况,这个时候,可以使用PHP提供的一个大小写不敏感的查找函数--stristr()函数,该函数的使用方法和strstr()函数的使用是一样的。

查找字符串的位置:strpos()函数的功能和strstr()函数是类似的,只是返回的不是字符串,而是一个字符串在另外一个字符串当中第一次出现的位置,strpos()的语法格式如下:int strpos(string $haystack,mixed $needle[,int $offset =0])在上面的语法中涉及到的参数的说明如下:haystack是要被搜索的字符串,needle指定要进行查找的字符串,offset是指定开始搜索的位置,默认值为0。

strpos()函数是一个对大小写敏感的查找函数,但是在实际的应用过程当中往往会出现需要忽略大小写的,这个时候可以使用PHP提供的一个对大小写不是很敏感的查找函数stripos(),该函数的使用方法和strpos()是一样的。

5.比较字符串
在PHP语言中,比较两个字符串的大小可以通过两种方式来实现:使用"=="操作符比较和使用函数进行比较

使用"=="操作符比较两个字符串的大小:在PHP中比较两个字符串的时候,最容易的方法就是使用双等号操作符(==)。

使用函数比较字符串的大小:在PHP中提供的strcmp()函数可以更加精确的比较两个字符串的大小,语法格式如下int strcmp(string $str1,string $str2)在上述语法中涉及到的参数的说明如下:str1 指定要进行比较的字符串1,str2指定要进行比较的字符串2。这个strcmp谙熟可以确保两个字符串是否完全匹配,并将比较结果以整数的形式返回,这个函数的返回值有以下三种。0:两个字符串是相等的,小于0的时候,第一个字符串是小于后面的字符串的,如果返回值是大于零的,那么就说明,前面的字符串是大于后面的字符串的。

除了strcmp()函数之外,PHP还提供了另外一些比较类似的比较函数,比如strncmp()函数可以选择想要比较的字符串的长度(字符个数),其语法格式如下:int strcmp(string $str1,string $str2,int $len)上面的参数说明 str1:指定要比较的第一个字符串,str2:指定要比较的第二个字符串len:指定每个字符串用于比较的字符个数。

在比较字符串的时候,有的时候需要忽略大小写,就可以使用strcasemp()函数和strncasemp()函数,这两个函数与区分大小写的相应函数的使用方法是完全相同的,strcasecmp()函数和strncasecmp()两个函数的语法格式分别如下:

int strcasecmp(string $str1,string $str2)

int strncasecmp(string $str1,string $str2,int $len)

6.复制字符串
如果需要重复n次显示一个字符或者一个字符串的功能,则最简单的实现方法就是调用复制函数,在PHP中可以使用str_repeat()函数实现字符串的复制,这个函数的语法格式如下:string str_repeat(string $input,int $multiplier)在上述的语法中设计的参数的说明如下input指定要重复的字符串,multiplier指定字符串将被重复的次数。

7.翻转字符串
处理字符串的操作还包括对字符串进行翻转在PHP语言中,使用strrev()函数可以实现反转字符串的功能,strrev()函数的语法格式为 string strrev(string $string)

上面的参数string就是用于指定要进行翻转的字符串。

8.切分,合并字符串
把一个字符串按照某种规则切分成多个字符串,或者把多个字符串合并成一个长的字符串,是在处理字符串操作的时候会经常碰到的问题。使用PHP提供的explode()函数,str_split()函数,implode()函数可以处理类似切分,合并字符串的问题。

切分字符串:explode()函数的功能就是用指定的分隔符把字符串切分成数组,explode()函数的语法格式如下:array explode(string $delimiter,string $string[,int $limit])在上面的语法中涉及到的参数的说明如下:delimiter:指定在哪里分隔字符串,string:指定要进行分割的字符串,limit:指定所返回的数组元素的最大数目,最后的子块将会包含string的剩余部分。

str_split()函数的作用是能够将一个字符串分割成等长度的多个子字符串。str_split()函数的语法格式如下:array str_split(string $string[,int $split_length=1])上面的语法中的参数说明如下:string:指定要分割的字符串,split_length:指定每个数组元素的长度,默认值为"1"。

合并字符串:implode()函数的功能是将数组的元素连接起来成为字符串,implode()函数的语法格式如下:string implode([string $glue],array $pieces)在上述的语法中涉及到的参数的说明如下:glue()指定数组元素之间放置的内容,默认值为""(表示空格字符串)pieces指定要合并为字符串的数组。调用implode()函数可以根据参数所限制的条件获取一个新的字符串,达到合并字符串的目的。

join()是implode()函数的别名,两个函数的用法是完全一样的,需要强调的是,虽然参数glue是可以选的,但是为了使程序拥有更好的兼容性,推荐使用两个参数

 

总结一下字符串的相关操作方法:

1.printf()函数:可以对字符串进行格式化操作
2.sprintf()函数:可以对字符串进行格式化操作,与printf()函数的区别就是需要使用echo才能将格式化后的字符串显示输出。
3.nl2br()函数:可以将字符串中的换行符"n"转换为HTML中的"
"后显示出来。
4.wordwrap()函数:指定从某列字符进行强制换行
5.strtolower()函数:该函数实现的功能是将字符串中的所有的字符全部转换为小写字符
6.strtoupper()函数:该函数的作用就是将字符串中的所有的字符全部转换为大写的字符
7.ucwords()函数:该函数的作用就是将字符串中所有的首字符全部转换为大写字符
8.substr_replace()函数:可以快速完成扫描并且编辑文本内容较多的字符串的功能
9.strlen()函数:可以计算字符串的长度并且返回该字符串的长度
10.substr_count()函数:可以确定一个字符串在所提供的字符串中有多少个
11.str_word_count()函数,可以确定一个字符串中某个单词的出现次数。
12.strstr()函数,可以用来查找子字符串,该函数的返回结果为子字符串第一次出现后的所有内容
13.strpos()函数,功能和strstr()函数是类似的,只是返回的不是字符串,而是一个字符串在另一个字符串中第一次出现的位置。
14.strcmp()函数,该函数的功能可以精确的比较两个字符串的大小
15.strncmp()函数,可以选择要比较的字符串的长度(字符个数)
16.strcasecmp()函数,可以在忽略大小写的时候,对两个字符串进行比较
17.strncasecmp()函数,可以在忽略大小写的前提下,对两个字符串时候进行长度或者字符数目的比较。
18.str_repeat()函数,重复n次显示一个字符或者字符串的功能
19.strrev()函数,提供对字符串进行翻转的操作
20.explode()函数,提供了将某个字符串切分为多个字符串的功能,指定分隔符吧字符串切分成数组。
21.str_split()函数,能够将一个字符串分割成等长度的多个子字符串
22.implode()函数,将数组的元素连接起来成为字符串
23.join()函数,使用方法与implode()函数是一摸一样的,它的作用也是将数组元素连接起来成为一个字符串

PHP pcntl_fork — 在当前进程当前位置产生分支(子进程)。译注:fork是创建了一个子进程,父进程和子进程 都从fork的位置开始向下继续执行,不同的是父进程执行过程中,得到的fork返回值为子进程 号,而子进程得到的是0。

注意:

PHP有个pcntl_fork的函数可以实现多进程,但要加载pcntl拓展,而且只有在linux下才能编译这个拓展

1.首先在ubuntu下编译pcntl.so,我的ubuntu下找不到pcntl的包,于是

创建一个文件夹下载了整个PHP包,在里面找到了pcntl包运行如下命令

 代码如下 复制代码

# mkdir php
# cd php
# apt-get source php5
# cd php5-(WHATEVER_RELEASE)/ext/pcntl
# phpize
# ./configure (注一)
# make
# make install phpize 命令是用来准备 PHP 外挂模块的编译环境的。


成功的安装将建立 extname.so 并放置于 PHP 的外挂模块目录中 (预设存放于 /usr/lib/php/modules/ 内) 。
需要调整 php.ini,加入 extension=extname.so 这一行之后才能使用此外挂模块。

void pcntl_exec ( string $path [, array $args [, array $envs ]] )


pcntl_exec — 在当前进程空间执行指定程序

 代码如下 复制代码


$cmds=array(

        array('/home/jerry/projects/www/test2.php'),

        array('/home/jerry/projects/www/test3.php')

);

 


foreach($cmds as $cmd){

        $pid=pcntl_fork();

        if($pid==-1){

        //进程创建失败

            echo '创建子进程失败时返回-1';

            exit(-1);

        }

        else if($pid){

        //父进程会得到子进程号,所以这里是父进程执行的逻辑

            pcntl_wait($status,WNOHANG);

        }

        else{

        //子进程处理逻辑

            sleep(5);

            pcntl_exec('/usr/bin/php',$cmd);

            exit(0);

        }

}


 

例,

实例多图片同步下载

 代码如下 复制代码


#!/usr/bin/php
<?php
// 需要抓取的网页地址
$url = 'http://www.111cn.net';
$content = file_get_contents($url);
preg_match_all('/<imgs+src="(.*?)"/', $content, $matches,PREG_SET_ORDER);
echo "已发现".count($matches)."张图片n";
 
list($sm, $ss) = explode(" ", microtime());
foreach ($matches as $k => $val)
{
 $pid[$k] = pcntl_fork();
 if(!$pid[$k])
 {
  download($url, $val);
  // 子进程要exit否则会进行递归多进程,父进程不要exit否则终止多进程
  exit(0);
 }
 
 if ($pid[$k])
 {
//    pcntl_waitpid($pid[$k], $status, WUNTRACED);
 }
 
}
echo "下载完成n";
 
list($em, $es) = explode(" ", microtime());
 
echo "用时:",($es+$em) - ($ss + $sm),"n";
/**
 * 抓取网页图片
 *
 */
function download($url, $val)
{
 $pic_url = $val[1];
 if (strpos($val[1], '//') !== false)
 {
  ;
 }
 elseif (preg_match('@^(.*?)/@', $val[1], $inner_matches) == 0)
 {
  $pic_url = $url.$val[1];
 }
 elseif (preg_match('@[:.]@', $inner_matches[1], $tmp_matches) == 0)
 {
  $pic_url = $url.$val[1];
 }
 
 $pic = file_get_contents($pic_url);
 
 if ($pic === false)
 {
  return;
 }
 
 preg_match('@/([^/]+)$@', $pic_url, $tmp_matches);
 // 可使用assert处理异常
 $pic_file_name = $tmp_matches[1];
 $f = fopen("tmp/".$pic_file_name, "wb"); #
 fwrite($f, $pic);
 fclose($f);
}
 
/* End of file pcntl_fork.php */

标签:[!--infotagslink--]

您可能感兴趣的文章: