手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表分类:PHP

PHP更改文件编码

PHP更改文件编码应该算是比较简单的事情,在使用uchome项目(UTF-8)的时候,发现程序的编码好奇怪,有ANSI的,和UTF-8的。
很妖的是,我在ubuntu下面打开这些ansi的文件时,由于文件中含 有中文,结果全显示乱码,编码还显示为latin1。然后拷到另外一个目录,编码显示就正常了,为CP936。
由于编辑器没有批量转换功能,固此,只能使用PHP自带的功能了。。。(关键我也不会其他语言)
由于转换的时候会需要判断一下编码,如果编码本身是UTF-8的,再使用mb_convert_encoding($data,'utf-8','gbk'),反而会导致乱码。。
所以。。。就有了以下程序
慎重申明:Dir类的rmdir有BUG,请勿使用。。。。写的时候,我没有考虑太多,如果设定了某个目录,最终是会把这个目录也会删除的,而与我事先想的。把该目录下的内容清空有误差。(当然也可以在删除后重建,但毕竟不是原来的权限了。)

代码如下:

PHP代码
  1. <?php  
  2.   
  3. $dirName = "./uchome";  
  4.   
  5. $files = Dirs::read( $dirName , true);  
  6.   
  7. foreach$files as $fileName )  
  8. {  
  9.     ifis_file$fileName ) && in_array(Files::extension( $fileName ) , array('php','html','htm'))){  
  10.         $fileData = Files::read( $fileName );  
  11.         $fileType = mb_detect_encoding($fileData , array('UTF-8','GBK','LATIN1','BIG5')) ;  
  12.         if$fileType == 'CP936'){  
  13.             $fileData = mb_convert_encoding($fileData ,'utf-8' , 'gbk');  
  14.             if( Files::save( $fileName , $fileData )){  
  15.                 echo "{$fileName} convert successed";  
  16.                 echo "<br />";            
  17.             }  
  18.         }  
  19.     }  
  20. }  
  21.   
  22.   
  23.   
  24. //dir  
  25. class Dirs  
  26. {  
  27.     static function read ( $dirname , $recursive = false)  
  28.     {  
  29.         static $allInfo;  
  30.         $dirname .= subStr$dirname, -1 ) == "/"  ? "" : "/";  
  31.         $dirInfo = glob$dirname . "*" );  
  32.         if ( $recursive == false ){  
  33.             return $dirInfo;  
  34.         }else{  
  35.             foreach ( $dirInfo as $info ){  
  36.                 if ( is_dir$info ) ){  
  37.                     if ( !is_readable$info ) ){  
  38.                         chmod$info, 0777 );  
  39.                     }  
  40.                     //$allInfo['dirs'][] = $info;  
  41.                     $allInfo[] = $info;  
  42.                     self::read( $info , true);  
  43.                 }else{  
  44.                     //$allInfo['files'][] = $info ;  
  45.                     $allInfo[] = $info;  
  46.                 }  
  47.             }  
  48.         }  
  49.         return $allInfo;  
  50.     }  
  51.   
  52.     static function rmdir ( $dirname )  
  53.     {  
  54.         if ( is_dir$dirname ) && !is_writeable$dirname ) ){  
  55.             if ( !chmod$dirname , 0666 ) ){  
  56.                 return false;  
  57.             }  
  58.         }else if ( !is_dir$dirname ) ){  
  59.             return false;  
  60.         }  
  61.         $dirname .= subStr$dirname, -1 ) == "/"  ? "" : "/";  
  62.         $dirInfo = glob$dirname . "*" );  
  63.         foreach ( $dirInfo as $info ){  
  64.             if ( is_dir$info ) ){  
  65.                 self::rmdir$info );  
  66.             }else{  
  67.                 unlink( $info );  
  68.             }  
  69.         }  
  70.         @rmdir$dirname );  
  71.     }  
  72.   
  73.     function mkdir($dir$mode = 0777)  
  74.     {  
  75.         if (!is_dir($dir)){  
  76.             $ret = @mkdir($dir$mode, true);  
  77.             if (!$ret){  
  78.                 exit('function:mkdirs failed');  
  79.             }  
  80.         }  
  81.         return true;  
  82.     }  
  83. }  
  84. //file  
  85. class Files  
  86. {  
  87.     static function read ( $filename )  
  88.     {  
  89.         if ( !is_readable$filename ) ){  
  90.             chmod$filename, 0644 );  
  91.         }  
  92.         return file_get_contents$filename );  
  93.     }  
  94.   
  95.     static function create ( $filename , $mod = 0666 )  
  96.     {  
  97.         if ( @touch( $filename ) == false){  
  98.             $fp = fopen$filename"a+" );  
  99.             if ( $fp ){  
  100.                 fclose( $fp );  
  101.             }  
  102.         }  
  103.         chmod$filename, 0666 );  
  104.     }  
  105.   
  106.     static function save ( $filename , $data , $append = false)  
  107.     {  
  108.         if ( !file_exists$filename ) ){  
  109.             self::create($filename);  
  110.             $append = false;  
  111.         }  
  112.         if ( $append == false ){  
  113.             return file_put_contents$filename , $data );  
  114.         }else{  
  115.             if ( !is_writeable$filename ) ){  
  116.                 chmod$filename, 0666 );  
  117.             }  
  118.             return file_put_contents$filename , $data , FILE_APPEND );  
  119.         }  
  120.     }  
  121.   
  122.     static function delete ( $filename )  
  123.     {  
  124.         if ( !is_array$filename ) ){  
  125.             $filenames = array($filename);  
  126.         }  
  127.         foreach ( $filenames as $filename ){  
  128.             if ( is_file$filename ) ){  
  129.                 if( !unlink( $filename ) ){  
  130.                     chmod$filename , 0666 );  
  131.                     unlink( $filename );  
  132.                 }  
  133.             }  
  134.         }  
  135.     }  
  136.       
  137.     static function extension( $filename ){  
  138.         return strtolower(pathinfo$filename , PATHINFO_EXTENSION ));  
  139.     }  
  140. }  

Tags: php, mbstring

gc_enabled

难道以后可以这样用了?

PHP代码
  1. <?php  
  2.   
  3. $usingGC = gc_enabled();  
  4. if$usingGC == false){  
  5.     gc_enable();  
  6.     $usingGC = gc_enabled();  
  7. }  
  8. if$ucingGC == true){  
  9.     gc_collect_cycles();  
  10. }  

不知道效果有多明显?

Tags: gabarge

PHP 5.3.0正式版发布

前段时间已经把5.3的新特性介绍了一下,这里不作详细介绍了

把cnbeta上的新闻原文复制一下就结束,纯粹当成新闻来看吧。

URL:http://www.cnbeta.com/articles/87653.htm

今天,PHP官方已经放出了下一个开发系列5.3.0正式版的下载。按照惯例,还要过一段时间才会发布正式声明。我们可以先用为快。
从去年8月初放出alpha1到现在将近一年,经过3个alpha,一个beta,4个RC.5.3.0正式版已经完成。这个版本主要新加了命名空间,延迟绑定,匿名函数等新功能。一会放出官方完全新特性。

访问:http://cvs.php.net/viewvc.cgi/php-src/UPGRADING?revision=PHP_5_3
下载:http://us2.php.net/distributions/php-5.3.0.tar.bz2

PHP编辑器&IDE简单评测之:NuSphere PhpED

PHPED是一款很老的PHP编辑器了。在N久以前他就存在,只是4.x以前的版本对中文的支持并不好,当你在删除中文时,往往会发现删除了一半。

PHPED的优点

1、debug功能挺强,自带的dbglistener被很多编辑器所使用过

2、Projectworkspace也分开了

3、函数的定位、跳转都比较方便

4、Search in filesreplace in files,更是让查找替换方便了许多

5、自定义代码片段

6、常用小工具:ssh,dbmanager,ftp

7、函数自动完成、提示时,会同时显示该函数所在的文件、行数。

8、作为一款PHPIDE,也并没有忘记HTML,在工具栏中有一些HTML常用标记的快捷按钮

9、帮助手册很多。查询很方便

10、分割屏幕:在代码页很长的时候,并且需要和上文进行对比时,分割屏幕太重要了

PHPED的缺点

1、代码提示、自动完成有时候会失效(特别是在同一个页面里,函数定义在最底部的时候,调用此函数时,不能自动完成和提示)

2、虚拟空格(鼠标点到哪里,就可以在哪里直接输入,或许很多人喜欢这个功能,但我非常不喜欢,让我想起了delphi,好象也是有这个功能,开始怀疑,PHPED是采用delphi编写的)

3、Debug功能对于采用rewrite方式的程序好象无法测试(不知道ZS等是否能够测试)

4、不能根据文件编码自动认出文件(程序只能设定一个编码,然后打开任何文件都是以此编码来打开,打不开就建议你转,这个太烦了)

总体来说,如果不介意上面这些缺点,phped还算是一个比较完美的编辑器。

Tags: phped, ide, nusphere

PHP编辑器&IDE简单评测之:EditPlus

我承认,我对编辑器和IDE等用的并不是很多,但我想,既然我用过、尝试过,总应该有一点自己的想法和见解吧?虽然不一定正确,但相信还是有一点点道理的吧?

对于工具的技巧我不会介绍的。毕竟这不属于评测范围内了。其实所说的评测,我也只是简单的列出优缺点而己。

用过的工具大约有phpEdit,phpEd,ultraEdit,Editplus,notepad++,notepad2,komodoEdit,ZS,Netbeans等。我仅列出我认为的优缺点,不一定对。

可随便扔砖

-----------------

Editplus是PHP开发者最常用的编辑器了吧(不能算IDE)

优点:

1、轻量级(1M左右)

2、默认的色彩搭配(函数、变量等)都挺不错,字体大小也适中

3、可以自定义工具,比如自定义工具为PHP手册,当你遇到不太熟悉的函数时,按下ctrl+1调用自定义工具就可以定位到手册的搜索了

4、stx等文件,可以方便的使用F2进行快速导航

5、ctrl+F11可以显示页面中的function列表

6、全目录搜索、正则搜索,都是比较强的

7、自定义浏览器和项目路径,可以按ctrl+B直接预览

8、有autocomplete文件(acp文件),方便快速书写(不过这需要自已去逐一编辑,但这也很正常,只有自己写的才是最适合自己用的)

9、保存时自动备份、保存时可以去除UTF8的BOM头(这个功能挺好)

10、自定义快捷键,可以按自己最熟悉最常用的习惯来定义

缺点:

1、项目管理太差(要么只能管理一个目录,要么只能管理一堆文件,load项目的时候,所有的文件全部被打开),不过鉴于它不是IDE,还是可以理解和接受的

2、全目录搜索后,不能全目录批量修改(或许是我要求太高了)

3、默认的ctrl+F11不能显示class中的function(现在好象可以了,即前面加了private等的判断)

4、代码折叠不够完善(是按缩进来的,如果是编辑python就没问题了)

5、无语法检查(虽然不是IDE,但这个其实是每个写程序的人都最期望的)


其实,从一个编辑器来说,editplus已经算是完美的了

再加上,网上很多人为editplus的配置了自定义工具。例如语法检查、代码美化等等。都可以让editplus与一些轻量级的IDE媲美。