手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 免费部署 N8N 的 Zeabur 注册 | 登陆
浏览模式: 标准 | 列表全部文章

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

FF的郁闷

不记得从多久开始,我就在一直使用firefox了。

虽然从为一名WEB开发人员,不得不使用众多浏览器,但FF已经是我的默认浏览器。一般情况下,如果不是为了看网页效果或者使用网银,我是不会打开ie的。

其他的浏览器也纯粹是为了测试而使用。opera更多的是被我用来打开WAP网站,chrome则就是用来体验一下速度。(顺便说一下,chrome for ubuntu,居然不能输中文?好奇怪呀。。。。)

今天看到推送3.5,升级了一下,结果,打不开FF了。。

进程里也没有。。。

目前尚不清楚是因为插件的关系还是什么其他的关系。因为我有很多插件需要使用,暂时不做测试了。。。。

Tags: firefox

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

杂记

既然标题为杂记当然记得东西也就比较杂一点
1、linux
刚刚装好ubuntu后,建立了一个分区,进入分区目录,想改权限为任何用户都能访问

所以进入命令行,用了chown -R nobody.nogroup /

命令中的/,前面少加了一个. ,结果。。。所有的目录权限都不正常了

重启后,无法访问。最后重装(虽然听说用simple mode登录后可以解决,但一来没时间,二来,我是新做的系统,重装速度会更快一点)

2、虚拟机

在ubuntu下面的虚拟机,好象不能设置为随系统启动而启动的。这不象在windows下面。当系统启动后,虚拟机也可以自动启动(虚拟机是server版,可以在每一个虚拟OS上指定是否随系统启动而启动)

3、虚拟机中的windows 2003登录

2003初装好是需要按ctrl+alt+delte登录的,但vmware中按ctrl+alt是退出焦点。vmserver2后,没有客户端访问程序了(需要单独安装)我感觉还不如1.x版呢。。。

所以进入后,先按Ctrl+apace,把输入法调出来,然后按着ctrl+alt,再用鼠标点击软键盘,上面的del键,进入后。gpedit.msc把登录需要ctrl+del+alt关闭

4、招行

招行登录,不能用远程连上计算机登录,只能本机登录。

远程后,进入大众版会显示:非法远程登录,在询问客服后才知道。。。

5、ubuntu下为什么要装虚拟机?

你以为我想啊,可是不装,QQ功能不全,网银不能使用。支付宝也不能用。凡 是要花钱的地方,ubuntu都不支持,我该怎么办??

Tags: 招商银行, 虚拟机, linux

google mail 标签大更新

这,其实是一个用户体验与功能协调的问题。因为以后的项目中很可能也会采用标签(如今阿猫阿狗的网站都有标签功能,但什么样的标签最好,才是个疑问)。借机参考一下

新闻来源:http://google.org.cn/2009/07/02/gmail-drag-and-drop-labels/
恩恩,Gmail的标签功能非常好用,估计很多Gmail黑带高手都自己建立了很多过滤器来将邮件自动通过标签来分类,再加上自定义标签颜色功能,使打开的Gmail呈现一片五颜六色之势,美不胜收。今天Google宣布继续大幅增强标签功能,新功能一个赛一个的实用。 第一:标签显示的新位置

以前标签总是出现在Gmail界面的左下方,独立存在于Labels框架里,与收件箱/发件箱/加星箱(我自己起的名字……)/草稿箱什么的分开老远。现在你可以直接将Labels框架里的常用标签给拖到上面来了,跟这个箱那个箱的排列在一起。

大小: 39.45 K
尺寸: 500 x 328
浏览: 2173 次
点击打开新窗口浏览全图

第二:标签的隐藏与显示

如果你设置了很细致的标签造成标签泛滥,那你Gmail的左侧会拉的很长。现在你可以选择把那些不常用的标签隐藏到more下拉菜单里。

大小: 40.51 K
尺寸: 427 x 347
浏览: 2132 次
点击打开新窗口浏览全图

更棒的是你在Gmail Labs里添加的自定义标签颜色现在可以删除了。我的自定义标签里就有很多实验出来的配色不好的颜色,但我之前一直没找到怎么删,很苦恼。

大小: 10.44 K
尺寸: 157 x 224
浏览: 2132 次
点击打开新窗口浏览全图

你也可以为标签进行排序了,而不必在标签前面加序号/特殊字符的方式强制使一些常用的标签排到最上面去,比如什么“000最重要”、“+++女友的信”等等。

第三:拖拽

拖拽加标签,太酷了!你可以把需要加某个标签的邮件勾上,然后拖到标签上,比如这样:

大小: 31.37 K
尺寸: 500 x 90
浏览: 2237 次
点击打开新窗口浏览全图

也可以反其道而行之,将标签拖到某些打钩的邮件上,比如这样:

大小: 29.64 K
尺寸: 500 x 90
浏览: 2237 次
点击打开新窗口浏览全图

如果你的标签在more下拉条里,一样可以做拖拽操作。

所有这些更新意味着Gmail Labs里的Right-Side Labels该下岗了,你已经不需要它来帮助你节省屏幕空间了。

以上这些更新将很快陆续出现在你的Gmail里。现在我这里只出现了删除自定义标签颜色,其它还都没有,估计就这几个小时了。另外如果你想第一时间体验到Gmail的新功能,别忘记使用英文版而非中文版。

我知道又会有无聊的闲人留言说“腾讯快来抄哇~~~~”,咳咳,我先把这句话给说了,让你们这些没技术含量的人没的可说。

Tags: google, mail, gmail