文件夹操作常用的几个
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 的调用则失败制。
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();