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代码
- <?php
-
- $dirName = "./uchome";
-
- $files = Dirs::read( $dirName , true);
-
- foreach( $files as $fileName )
- {
- if( is_file( $fileName ) && in_array(Files::extension( $fileName ) , array('php','html','htm'))){
- $fileData = Files::read( $fileName );
- $fileType = mb_detect_encoding($fileData , array('UTF-8','GBK','LATIN1','BIG5')) ;
- if( $fileType == 'CP936'){
- $fileData = mb_convert_encoding($fileData ,'utf-8' , 'gbk');
- if( Files::save( $fileName , $fileData )){
- echo "{$fileName} convert successed";
- echo "<br />";
- }
- }
- }
- }
-
-
-
-
- class Dirs
- {
- static function read ( $dirname , $recursive = false)
- {
- static $allInfo;
- $dirname .= subStr( $dirname, -1 ) == "/" ? "" : "/";
- $dirInfo = glob( $dirname . "*" );
- if ( $recursive == false ){
- return $dirInfo;
- }else{
- foreach ( $dirInfo as $info ){
- if ( is_dir( $info ) ){
- if ( !is_readable( $info ) ){
- chmod( $info, 0777 );
- }
-
- $allInfo[] = $info;
- self::read( $info , true);
- }else{
-
- $allInfo[] = $info;
- }
- }
- }
- return $allInfo;
- }
-
- static function rmdir ( $dirname )
- {
- if ( is_dir( $dirname ) && !is_writeable( $dirname ) ){
- if ( !chmod( $dirname , 0666 ) ){
- return false;
- }
- }else if ( !is_dir( $dirname ) ){
- return false;
- }
- $dirname .= subStr( $dirname, -1 ) == "/" ? "" : "/";
- $dirInfo = glob( $dirname . "*" );
- foreach ( $dirInfo as $info ){
- if ( is_dir( $info ) ){
- self::rmdir( $info );
- }else{
- unlink( $info );
- }
- }
- @rmdir( $dirname );
- }
-
- function mkdir($dir, $mode = 0777)
- {
- if (!is_dir($dir)){
- $ret = @mkdir($dir, $mode, true);
- if (!$ret){
- exit('function:mkdirs failed');
- }
- }
- return true;
- }
- }
-
- class Files
- {
- static function read ( $filename )
- {
- if ( !is_readable( $filename ) ){
- chmod( $filename, 0644 );
- }
- return file_get_contents( $filename );
- }
-
- static function create ( $filename , $mod = 0666 )
- {
- if ( @touch( $filename ) == false){
- $fp = fopen( $filename, "a+" );
- if ( $fp ){
- fclose( $fp );
- }
- }
- chmod( $filename, 0666 );
- }
-
- static function save ( $filename , $data , $append = false)
- {
- if ( !file_exists( $filename ) ){
- self::create($filename);
- $append = false;
- }
- if ( $append == false ){
- return file_put_contents( $filename , $data );
- }else{
- if ( !is_writeable( $filename ) ){
- chmod( $filename, 0666 );
- }
- return file_put_contents( $filename , $data , FILE_APPEND );
- }
- }
-
- static function delete ( $filename )
- {
- if ( !is_array( $filename ) ){
- $filenames = array($filename);
- }
- foreach ( $filenames as $filename ){
- if ( is_file( $filename ) ){
- if( !unlink( $filename ) ){
- chmod( $filename , 0666 );
- unlink( $filename );
- }
- }
- }
- }
-
- static function extension( $filename ){
- return strtolower(pathinfo( $filename , PATHINFO_EXTENSION ));
- }
- }
不记得从多久开始,我就在一直使用firefox了。
虽然从为一名WEB开发人员,不得不使用众多浏览器,但FF已经是我的默认浏览器。一般情况下,如果不是为了看网页效果或者使用网银,我是不会打开ie的。
其他的浏览器也纯粹是为了测试而使用。opera更多的是被我用来打开WAP网站,chrome则就是用来体验一下速度。(顺便说一下,chrome for ubuntu,居然不能输中文?好奇怪呀。。。。)
今天看到推送3.5,升级了一下,结果,打不开FF了。。
进程里也没有。。。
目前尚不清楚是因为插件的关系还是什么其他的关系。因为我有很多插件需要使用,暂时不做测试了。。。。
既然标题为杂记当然记得东西也就比较杂一点
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都不支持,我该怎么办??