php 文件 文本操作

php文件操作

文件夹操作常用的几个

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() 所打开。

一个遍历文件夹打印所有文件的例子

	$path = "web0721";
	
	function showFile($path,$l){
		$file_hander = opendir($path);
		while( ($file = readdir($file_hander)) != false ){
			if($file != "." && $file != ".."){ //每个文件夹下都有.(表示当前目录)   ..(上级目录)
				$new_path = $path."/".$file;
				if(is_dir($new_path)){
					echo $l."<strong style='color:#f00'>".$file."</strong><br>";
					showFile($new_path,$l."   ");
				}else{
					echo $l.$file."<br>";
				}
			}		
		}
		closedir($file_hander);
	}
	showFile($path,"  ");

操作文件的常用的几个方法

file array file ( string $filename [, int $use_include_path [, resource $context ]] )

和 file_get_contents() 一样,只除了 file() 将文件作为一个数组返回。数组中的每个单元都是文件中相应的一行,包括换行符在内。如果失败 file() 返回 FALSE。

file_get_contents string file_get_contents ( string $filename [, bool $use_include_path [, resource $context [, int $offset [, int $maxlen ]]]] )

和 file() 一样,只除了 file_get_contents() 把文件读入一个字符串。将在参数 offset 所指定的位置开始读取长度为 maxlen 的内容。如果失败,file_get_contents() 将返回 FALSE。

fopenresource 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 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。

 

fwriteint fwrite ( resource $handle , string $string [, int $length ] )

fwrite() 把 string 的内容写入 文件指针 handle 处。 如果指定了 length ,当写入了 length 个字节或者写完了 string 以后,写入就会停止,视乎先碰到哪种情况。

fwrite() 返回写入的字符数,出现错误时则返回 FALSE 。

fclosebool fclose ( resource $handle )

将 handle 指向的文件关闭 。 如果成功则返回 TRUE,失败则返回 FALSE .文件指针必须有效,并且是通过 fopen() 或 fsockopen() 成功打开的。

 

 

之前做个项目 做多国语言版本,用的php提取所有文件的中文,替换成php标记,然后将替换的中文全部保存在一个lang.php里面,然后再每个文件的头部引入lang.php

这样工作量就小了,  至于中文翻译英文,我用的是fiddler挂载的百度翻译首页,然后写的一段代码,可以批量翻译(先要翻译出给领导看,之后才会找专门的翻译);

下面是一个替换中文 创建lang.php文件的例子

 

<?php
	header("Content-Type: text/html; charset=utf-8");

	$root_path = "web0721";

	$lang = "<?php\r\n	\$lang = array(\r\n";

	function openPath($path){
		if(!is_dir($path)){
			return false;
		}
		
		$dir_hander = opendir($path);
		
		while( ($file = readdir($dir_hander)) != false ){
			if($file != "." && $file != ".." ){
				$new_path = $path."/".$file;
				if(is_dir($new_path)){
					openPath($new_path);
				}else{
					$num  = strripos($file,".");
					$len  = strlen($file);
					$name = substr($file,0,$num);
					$suffix = substr($file,$num,$len-$num);
					
					if($suffix == ".php"){
						openFile($new_path,$name);
					}					
				}
			}
		}		
		closedir($dir_hander);
	}
	
	function openFile($file,$name){
		if(file_exists($file)){			
			$content = file_get_contents($file);
			$pattern = "/[\x{4e00}-\x{9fa5}]+/u";
			preg_match_all($pattern,$content,$matches);
			$matches[0] = array_unique($matches[0]);
			
			$GLOBALS["lang"] = $GLOBALS["lang"]."	 	 '".$name."'    =>    array(\r\n";
			foreach($matches[0] as $i => $value){
				$content = str_replace($value,"<?php echo \$lang['".$name."'][".$i."] ?>",$content);
				$GLOBALS["lang"] = $GLOBALS["lang"]."	 	 	 '".$i."'    =>    '".$value."',\r\n";				
			}
			$GLOBALS["lang"] = $GLOBALS["lang"]."	 	 ),\r\n";
			
			$is = writeFile($file,$content);
			if($is){
				echo $file."--------------------------成功<br>";
			}else{
				echo $file."--------------------------失败<br>";
			}

		}
	}
	
	function writeFile($file,$content){
		if(file_exists($file)){
			$content = "<?php include(\"../lang.php\"); ?>\r\n".$content;
			$file_hander = fopen($file,"w+");
			$is = fwrite($file_hander,$content);
			fclose($file_hander);
			if($is){
				return true;
			}else{
				return false;
			}
		}
		return false;
	}

	openPath($root_path);
	$lang = $lang."	)\r\n?>";
			
	$file_hander = fopen("lang.php","w+");
	fwrite($file_hander,$lang);
	fclose($file_hander);			
?>


 用exec和yui的东西  还可以压缩 合并js  css 也很方便呀  我在工作中是这么弄的

例子

    class mergeCompress
    {
        var $merge_arr;
        var $commpress_arr;
        var $type;
        var $file_dir;        //压缩合并后的目录
        var $file_name;       //压缩合并后的文件名
        var $path_jar;        // yui jar的路径
        var $is_del = true;   //压缩后的零散文件是否删除掉
        var $errs = array();
        public function __construct($commpress_arr=array(),$merge_arr=array(),$type="js",$file_dir="",$file_name="",$path_jar=""){
            $this->type = $type;
            $this->commpress_arr = $commpress_arr;
            $this->merge_arr = $merge_arr;
            $this->file_dir  = $file_dir;
            $this->file_name = $file_name;
            $this->path_jar  = $path_jar;
        }
        public function exec(){
            $new_compress_arr = $this->compress();

            $this->merge_arr = array_merge($this->merge_arr,$new_compress_arr);

            $this->merge();
            
            $this->printErr();
            
            if($this->is_del){
                foreach($new_compress_arr as $i=>$url){
                    unlink($url);
                }
            }            
        }
        public function compress(){
            $new_compress_arr = array();
            $temp = "java -jar {jar_path} --type {type} --charset utf-8 {source} > {compressor_source}";
            $temp = str_replace("{jar_path}",$this->path_jar,$temp);
            $temp = str_replace("{type}",$this->type,$temp);
            $type = $this->type;
            $file_dir = $this->file_dir;
            foreach($this->commpress_arr as $i => $val){
                if(!file_exists($val)){
                    array_push($this->errs,$val."    Does not exist!!!! ");
                    continue;
                }
                $cmd = str_replace("{source}",$val,$temp);
                $new_name = basename($val);
                $new_name = substr($new_name,0,strrpos($new_name,".")).".min.".$type;
                $file_new_name = $file_dir."/".$new_name;
                $cmd  = str_replace("{compressor_source}",$file_new_name,$cmd);
                $arr  = array();
                exec($cmd,$arr,$is);
                if($is != 0){
                    array_push($this->errs,$val."    compress fail!!!! ");
                }
                array_push($new_compress_arr,$file_new_name);
            }
            return $new_compress_arr;
        }
        public function merge(){
            $content="";
            $file_name = $this->file_dir."/".$this->file_name;
            
            foreach($this->merge_arr as $i=>$url){
                if(!file_exists($url)){
                    array_push($this->errs,$url."    Does not exist!!!! ");
                    continue;
                }
                
                $content=$content.file_get_contents($url)."\n\r";
            }
            $hd = fopen($file_name,"w+");
            $is = fwrite($hd,$content);
            fclose($hd);
            if(!$is){
                array_push($this->errs,$file_name."    merge fail!!!!! ");
            }
        }
        public function printErr(){
            $errs = $this->errs;
            $len = count($errs);
            if($len == 0){
                echo "OK !!!!!!!!";
            }else{
                foreach($errs as $i=>$err){
                    echo $err."<br><br><br>";
                }
            }
        }
    }
//调用
            $commpress_arr = array(
                        "f2e/assist/js/jquery/merger.js",
                        "f2e/assist/js/business/broker.js",
                        "f2e/assist/js/business/http.js",
                        "f2e/assist/js/components/components.js",
                        "f2e/assist/js/models/model.js",
                        "f2e/assist/js/models/vo.js",
                        "f2e/assist/js/controllers/moduleController.js",
                        "f2e\assist\js\projectInit.js",
                    );
            $merge_arr = array(    
                        "f2e/assist/js/jquery/jquery-1.7.1.min.js",
                        "f2e/assist/js/jquery/jquery-ui-1.8.20.custom.min.js",
                        "f2e/assist/js/jquery/jquery-jtemplates.js",
                    );
            $type ="js";
            $file_dir  = "f2e/assist/js/compression";
            $file_name = "merge_all.js"; 
            $js = new mergeCompress($commpress_arr,$merge_arr,$type,$file_dir,$file_name,$path_jar);
            $js->exec(); 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值