2009/03/31

php一行搞定过滤字符


<?php
iconv('GBK', 'GBK//IGNORE', $file);//过滤掉错误字符,防止解析错误
?>


解决问题:如果你的文件中含有错误字符,在执行解析xml等操作时有时会引发解析错误。在解析xml文档时若头部编码为gb2312,尽量替换为gbk。

方法:iconv,将进出编码均设置为同一编码即可,加上'//IGNORE'即可。

优点:省去自己解析字串剔除错误编码,非常方便。

应用场景:

1.使用simplexml_load_file(),simplexml_load_string(),出现错误Premature end of data in tag...。改用file_get_contents(),然后iconv(),再simplexml_load_string()即可。

2.Warning: SimpleXMLElement::__construct() [function.SimpleXMLElement---construct]:
input conversion failed due to input error, bytes 0xC2 0x2E 0x20 0x20 in。。。

2009/03/23

黑莓所有按键失效

昨天我的黑莓所有按键全部失效了,原因是因为轨迹球下方的触点移位了,导致触点一直处于按下状态,所以其它按键通通无效了。

送修也是很郁闷,中关村鼎好地下一层,虽然卖家人品还好,免费给维修了。但修理的结果确实郁闷,拧裂了机壳,太暴力了,电池后盖合上还总有缝,键盘有两个键也大不如以前好使了。泪奔。。。我的882啊

以为很大的问题呢,如果知道只是这么一点小问题,我就自己在家修了。

学到一点小技巧,处理手机内屏的灰尘时,用胶带粘去即可,注意胶的粘性不可太强,否则会适得其反会把胶留在内屏里头。以前我拆了手机总是处理不掉里面的灰尘。手机在保质期内还是送修吧,别自己把问题搞大了,还无法保修。

EACCELERATOR导致Apache宕机

最近服务器总出现apache宕机,错误日志总出现类似的记录,EACCELERATOR: PHP crashed on opline...
例:
[2332] EACCELERATOR: PHP crashed on opline 73 of query() at /XXX/app/vendors/classes_common.php:294

解决办法:
1.eaccelerator.filter选项中过滤掉出错的文件。
我尝试了,但开启debug后,在日志里依然可以发现过滤文件的踪影,郁闷。

2.关掉eaccelerator。PHP5.2.6后的版本已经优化的很不错了,加上zend出的加速器,速度还可以。

配置:apache 2.2.4 + php 5.2.5 + windows server 2003



参考
[1]http://bbs.laxjyj.com/read-htm-tid-4678360.html

2009/03/21

动心是否值得?

佛云人有七苦,生、老、病、死、爱别离、怨憎会、求不得。

2009/03/18

在友播找王菲的《闷》居然排在后面N多页,匪夷所思,友播算是我觉得还行的网站,品味比google music稍微好那么一些,但也好不到哪里去。一个字:真烂!

公司一堆不太熟的人,唱歌实在不是什么好打算,品味差异太大了,听靡靡之音实在烦得很,来点痛快的行不?

[PHP]PDO连接MS SQL SERVER/ORACLE二三事

无法查看这则摘要。请 点击此处查看博文。

2009/03/17

Notepad++运行python、php

F5弹出运行框

Python:
cmd /k C:\Python25\python.exe "$(FULL_CURRENT_PATH)" & ECHO. & PAUSE & EXIT


PHP:
cmd /k D:/server/php/5.2.5/php.exe "$(FULL_CURRENT_PATH)" & ECHO. & PAUSE & EXIT


可以保存上述命令为快捷方式,想修改快捷键,在 "设置->管理快捷键->Run Commands" 中修改。

$(FULL_CURRENT_PATH) 的含义是当前文件的完整路径,这是 Notepad++ 的宏定义,更多的相关宏可以参见官方FAQ:Run external tools。注意要用引号括起来,防止路径中间有空格。

更多CMD命令,运行cmd.exe,敲入help命令即可。

EXIT 退出 CMD.EXE 程序(命令解释程序)。
PAUSE 暂停批文件的处理并显示消息。
ECHO.(或ECHO\) 打印换行。

参考:http://arccos.blogspot.com/2009/03/notepad-python.html

没事做了几道PHP的面试题,传说是新浪的

1. 写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名

思路:是标准URL,应该是符合规范的。所以没有考虑复杂的情况。从左边寻找到第一次出现‘?’的位置,然后从此位置向前寻找‘.’号,中间部分既是扩展名。


<?php
function findFileTypeFromUrl( $url )
{
if( $url == "" )
  return false;

$r = strpos($url, '?');

if( $r != false )
{
  $l = strrpos( substr($url, 0, $r), '.');
  //echo '1';
  return substr($url, $l+1, $r-$l-1);
}
else
{
  $l = strrpos($url, '.');
  //echo '2';
  return substr($url, $l+1);
}
}
?>



2.在 HTML 语言中,页面头部的 meta 标记可以用来输出文件的编码格式,以下是一个标准的 meta 语句
<META http-equiv='Content-Type' content='text/html; charset=gbk'>
请使用 PHP 语言写一个函数,把一个标准 HTML 页面中的类似 meta 标记中的 charset 部分值改为 big5
请注意:
(1) 需要处理完整的 html 页面,即不光此 meta 语句
(2) 忽略大小写
(3) ' 和 " 在此处是可以互换的
(4) 'Content-Type' 两侧的引号是可以忽略的,但 'text/html; charset=gbk' 两侧的不行
(5) 注意处理多余空格

思路:这个写的比较弱,就替换而已。


<?php
function replaceCharset( $string )
{

    echo preg_replace( "/(\<meta\40+http\-equiv\=[\'|\"]?content\-type[\'|\"]?\40+content\=[\'|\"]text\/html;\40*charset\=)(gbk)[\'|\"]\40*\>/i","\${1}big5>",$string );
}


3. 写一个函数,算出两个文件的相对路径
如 $a = '/a/b/c/d/e.php';
$b = '/a/b/12/34/c.php';
计算出 $b 相对于 $a 的相对路径应该是 ../../c/d将()添上

思路:从两个文件的根目录开始比较,找到不一致的地方,然后计算第一个文件需要返回至此的‘../’步数,再就是打开另一个文件的目录路径。函数返回-1表示两个路径完全一致。


<?php
function findDirDiff($a, $b)
{
    if( $a{0} != '/' || $b{0} != '/' )
    {
        return false;
    }
   
    $a_array = explode('/', $a);
    $b_array = explode('/', $b);
   
    $a_size = count($a_array)-1;
    $b_size = count($b_array)-1;
       
    for( $i=0 ; $i <= $a_size; $i++)
    {
        if( (!isset($b_array[$i])) || $a_array[$i] != $b_array[$i] )
        {
            $i--;
            break;
        }
    }
   
    $a_upSteps = $a_size - $i;
       
    if( $a_upSteps == -1)
    {
        return -1;
    }
   
    for( $i++; $i < $b_size ; $i++ )
    {
        $b_upDir .= '/'.$b_array[$i];
    }
   
    return str_repeat('../', $a_upSteps-1).substr($b_upDir,1);
}


4.简要说明PHP的垃圾回收机制

答:引用计数。引用数为零时即销毁。

5.如何高并发写文件?

答:加锁。一种可以用flock()来操作,还是就写一个xxx.lock的文件或目录作为锁。有锁时等待,写入时加锁,写完释放锁。高并发可以写入副本,再合并文件,这样会比较复杂一点。

6.找猴王。N个猴子围成一圈,从第一开始报数,1、2、3...,报M者退出,然后重新报数,M者退出,重复此操作直到剩下一只猴,此猴为猴王,问猴王的编号?

思路:猴子看成元素值为1,2,3...N的一维数组。M%N求余,余数即本轮退出者,unset()此元素,继续下一轮,直到数组元素为一,此元素的值即为猴王编号。在M%N过程中,N的数目为剩下猴子的总数,每轮递减一。PHP注意点:使用array_splice()而不是unset(),array_splice()的key值会自动计算,而unset()则保持原始的索引。

PHP语言: 找猴王

<?php
/**
* 找猴王。N个猴子围成一圈,从第一开始报数,1、2、3...,报M者退出,然后重新报数,M者退出,重复此操作直到剩下一只猴,此猴为猴王,问猴王的编号?
*/
function findKing($n, $m)
{
    $q = range(1, $n);
   
    while( ($n=count($q)) > 1 )
    {
        array_splice($q, $m%$n-1, 1);
    }
   
    return $q[0];
}

2009/03/06

沉浮的兄弟

《疯狂的赛车》插曲:搞笑黑社会之《沉浮的兄弟》。


《沉浮的兄弟》

词:芊合

曲:戎祥

踏入江湖是我的命

不是甘愿做坏子

做兄弟好过时

打刚(每天)穿金又戴银

有时嘛会手头紧

结拜兄弟逗撒挺(帮忙过难关)

那是遇到垃圾的兄弟

丫撒不鲁归大堆(烂七八糟一大堆)

谁知命运的安排

乎阮(让我)失败一次搁(又)一次

拿出兄弟的勇气

总会等到出头天


简评:

这是一首新创的闽南风格的歌曲,戎祥在电影《疯狂的赛车》中饰演一位台湾黑社会老大,就是那个胖子。为了这部电影,他创作并演唱的了这首风格独特的歌曲,使得其在剧中的人物更具喜剧和搞笑色彩,为电影增添了许多别样的味道,看过之后,依然会为那些镜头,那歌声所征服!
(以上内容均来自互联网)