标题: [转]php文件文本操作
作者: 梦幻天使 @Ta
时间: 2013-01-27
文件夹操作常用的几个
is_dir bool is_dir ( string$filename )如果文件名存在并且为目录则返回 TRUE。如果 filename 是一个相对路径,则按照当前工作目录检查其相对路径。
opendir resource opendir ( string $path [, resource$context ] ) 打开一个目录句柄,可用于之后的 closedir(),readdir() 和 rewinddir() 调用中.
readdir string readdir ( resource $dir_handle ) 返回目录中下一个文件的文件名。文件名以在文件系统中的排序返回。
closedir void closedir ( resource $dir_handle ) 关闭由 dir_handle 指定的目录流。流必须之前被 opendir() 所打开。
一个遍历文件夹打印所有文件的例子
[php]
01. $path = "web0721" ;
02.
03. function showFile( $path , $l ){
04. $file_hander = opendir( $path );
05. while ( ( $file = readdir( $file_hander )) != false){
06. if ( $file != "." && $file != ".." ){ //每个文件夹下都有.(表示当前目录) ..(上级目录)
07. $new_path = $path . "/" . $file ;
08. if ( is_dir ( $new_path )){
09. echo $l . "<strong style='color:#f00'>" . $file . "</strong><br>" ;
10. showFile( $new_path , $l . " " );
11. } else {
12. echo $l . $file . "<br>" ;
13. }
14. }
15. }
16. closedir ( $file_hander );
17. }
18. showFile( $path , " " );
操作文件的常用的几个方法
file array file ( string$filename [, int$use_include_path [, resource $context ]] )
和 file_get_contents() 一样,只除了 file() 将文件作为一个数组返回。数组中的每个单元都是文件中相应的一行,包括换行符在内。如果失败 file()返回 FALSE。
file_get_contents stringfile_get_contents ( string$filename [, bool$use_include_path [, resource $context [, int$offset [, int $maxlen ]]]])
和 file() 一样,只除了 file_get_contents() 把文件读入一个字符串。将在参数 offset 所指定的位置开始读取长度为 maxlen 的内容。如果失败,file_get_contents() 将返回 FALSE。
fopen resource fopen ( string $filename , string$mode [, bool$use_include_path [, resource $zcontext ]] )
fopen() 将 filename 指定的名字资源绑定到一个流上。如果 filename 是"scheme://..." 的格式,则被当成一个 URL,PHP 将搜索协议处理器(也被称为封装协议)来处理此模式。如果该协议尚未注册封装协议,PHP 将发出一条消息来帮助检查脚本中潜在的问题并将 filename 当成一个普通的文件名继续执行下去。
如果 PHP 认为 filename 指定的是一个本地文件,将尝试在该文件上打开一个流。该文件必须是 PHP 可以访问的,因此需要确认文件访问权限允许该访问。如果激活了安全模式或者 open_basedir 则会应用进一步的限制。
如果 PHP 认为 filename 指定的是一个已注册的协议,而该协议被注册为一个网络 URL,PHP 将检查并确认 allow_url_fopen 已被激活。如果关闭了,PHP 将发出一个警告,而 fopen的调用则失败制。
fopen() 中 mode 的可能值列表
mode
说明
'r'
只读方式打开,将文件指针指向文件头。
'r+'
读写方式打开,将文件指针指向文件头。
'w'
写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之
w+
读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
a
写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之
a+
a 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
fwrite int fwrite ( resource $handle , string$string [, int $length ] )
fwrite() 把 string 的内容写入 文件指针 handle 处。 如果指定了 length ,当写入了 length 个字节或者写完了 string 以后,写入就会停止,视乎先碰到哪种情况。
fwrite() 返回写入的字符数,出现错误时则返回 FALSE 。
fclose bool fclose ( resource $handle )
将 handle 指向的文件关闭 。 如果成功则返回 TRUE,失败则返回 FALSE .文件指针必须有效,并且是通过 fopen() 或 fsockopen() 成功打开的。
之前做个项目 做多国语言版本,用的php提取所有文件的中文,替换成php标记,然后将替换的中文全部保存在一个lang.php里面,然后再每个文件的头部引入lang.php
这样工作量就小了, 至于中文翻译英文,我用的是fiddler挂载的百度翻译首页,然后写的一段代码,可以批量翻译(先要翻译出给领导看,之后才会找专门的翻译);
下面是一个替换中文 创建lang.php文件的例子
[php]
01. <?php
02. header( "Content-Type: text/html; charset=utf-8" );
03.
04. $root_path = "web0721" ;
05.
06. $lang = "<?php\r\n \$lang = array(\r\n" ;
07.
08. function openPath( $path ){
09. if (! is_dir ( $path )){
10. return false;
11. }
12.
13. $dir_hander = opendir( $path );
14.
15. while ( ( $file = readdir( $dir_hander )) != false ){
16. if ( $file != "." && $file != ".." ){
17. $new_path = $path . "/" . $file ;
18. if ( is_dir ( $new_path )){
19. openPath( $new_path );
20. } else {
21. $num = strripos ( $file , "." );
22. $len = strlen ( $file );
23. $name = substr ( $file ,0, $num );
24. $suffix = substr ( $file , $num , $len - $num );
25.
26. if ( $suffix == ".php" ){
27. openFile( $new_path , $name );
28. }
29. }
30. }
31. }
32. closedir ( $dir_hander );
33. }
34.
35. function openFile( $file , $name ){
36. if ( file_exists ( $file )){
37. $content = file_get_contents ( $file );
38. $pattern = "/[\x{4e00}-\x{9fa5}]+/u" ;
39. preg_match_all( $pattern , $content , $matches );
40. $matches [0] = array_unique ( $matches [0]);
41.
42. $GLOBALS [ "lang" ] = $GLOBALS [ "lang" ]. " '" . $name . "' => array(\r\n" ;
43. foreach ( $matches [0] as $i => $value ){
44. $content = str_replace ( $value , "<?php echo\$lang['" . $name . "'][" . $i . "] ?>" , $content );
45. $GLOBALS [ "lang" ] = $GLOBALS [ "lang" ]. " '" . $i . "' => '" . $value . "',\r\n" ;
46. }
47. $GLOBALS [ "lang" ] = $GLOBALS [ "lang" ]. " ),\r\n" ;
48.
49. $is = writeFile( $file , $content );
50. if ( $is ){
51. echo $file . "--------------------------成功<br>" ;
52. } else {
53. echo $file . "--------------------------失败<br>" ;
54. }
55.
56. }
57. }
58.
59. function writeFile( $file , $content ){
60. if ( file_exists ( $file )){
61. $content = "<?php include(\"../lang.php\");?>\r\n" . $content ;
62. $file_hander = fopen ( $file , "w+" );
63. $is = fwrite( $file_hander , $content );
64. fclose( $file_hander );
65. if ( $is ){
66. return true;
67. } else {
68. return false;
69. }
70. }
71. return false;
72. }
73.
74. openPath( $root_path );
75. $lang = $lang . " )\r\n?>" ;
76.
77. $file_hander = fopen ( "lang.php" , "w+" );
78. fwrite( $file_hander , $lang );
79. fclose( $file_hander );
80. ?>
用exec和yui的东西 还可以压缩 合并js css 也很方便呀 我在工作中是这么弄的
例子
[php]
01. error_reporting (E_ALL ^ E_NOTICE);
02. //需要合并的 js
03. $merge_arr = array (
04. "f2e/assist/js/compression/jquery-1.7.1.min.js" ,
05. "f2e/assist/js/compression/jquery-ui-1.8.20.custom.min.js" ,
06. "f2e/assist/js/compression/jquery-jtemplates.js" ,
07. );
08. //需要压缩的js 压缩完毕之后会添加到$merge_arr
09. $source = array (
10. "f2e/assist/js/jquery/merger.js" ,
11. "f2e/assist/js/business/broker.js" ,
12. "f2e/assist/js/business/http.js" ,
13. "f2e/assist/js/components/components.js" ,
14. "f2e/assist/js/models/model.js" ,
15. "f2e/assist/js/models/vo.js" ,
16. "f2e/assist/js/controllers/moduleController.js" ,
17. "f2e\assist\js\projectInit.js" ,
18. );
19. $merge_name = "f2e/assist/js/compression/merge_all.js" ; //合并后的名字
20. $jar_path = "D:\yuicompressor\yuicompressor.jar" ; //jar 的路径
21. $type = "js" ; //or css
22. $target_path = "f2e/assist/js/compression/" ; //保存文件的路径
23.
24. function compress( $arg ){
25. $arr = array ();
26. $temp = "java -jar {jar_path} --type {type} --charset utf-8 {source}> {compressor_source}" ;
27. $temp = str_replace ( "{jar_path}" , $arg [ "jar_path" ], $temp );
28. $temp = str_replace ( "{type}" , $arg [ "type" ], $temp );
29. foreach ( $arg [ "source" ] as $i => $value ){
30. $name = basename ( $value );
31. $short_name = basename ( $name , "." . $arg [ "type" ]);
32. $cmd = str_replace ( "{source}" , $value , $temp );
33. $new_path = $arg [ "target_path" ]. $short_name . ".min." . $arg [ "type" ];
34. $cmd = str_replace ( "{compressor_source}" , $new_path , $cmd );
35. exec ( $cmd , $arr , $is );
36. if ( $is == 0){
37. echo $cmd . "<br>---------------------成功<br><br><br>" ;
38. } else {
39. echo $cmd . "<br>---------------------成功<br><br><br>" ;
40. }
41. array_push ( $arr , $new_path );
42. }
43. return $arr ;
44. }
45.
46. function merge( $arg ){
47. $content = "" ;
48. foreach ( $arg [ "data" ] as $i => $path ){
49. $content .= file_get_contents ( $path ). "\r\n" ;
50. }
51. $fs = fopen ( $arg [ "merge_name" ], "w+" );
52. $is = fwrite( $fs , $content );
53. fclose( $fs );
54. if ( $is ){
55. echo "<br><br>----------------------合并成功!!!" ;
56. } else {
57. echo "<br><br>----------------------合并失败!!!" ;
58. }
59. }
60. $compress_arg = array (
61. "jar_path" => $jar_path ,
62. "type" => $type ,
63. "target_path" => $target_path ,
64. "source" => $source ,
65. );
66. $merge_arr = array_merge ( $merge_arr ,compress( $compress_arg ));
67. $merge_arg = array (
68. "merge_name" => $merge_name ,
69. "data" => $merge_arr ,
70. );
71. merge( $merge_arg );
[隐藏样式|查看源码]