Archive

Archive for January, 2009

我来评2009年春晚

January 28th, 2009

2009年春晚,在一年一度的新春佳节如期而至。但仍延续了以往的老百姓的评价,真是一年不如一年。

今年唯一出彩的,是赵本山的小品和那个摩术。不过摩术有点太现场化了,毕竟是这么大的春节晚会,不应该像是在某个酒吧会所之类的地方演出,你要呈现的是给全国的电视观众更多的内容,而不仅仅是在现场制造一点气氛。

赵本山的小品,是继卖拐之后,历年来最出彩的一个。可能也是因为启用了新人,增加了剧情,使得这个小品是继卖拐之后,我认为最出彩的一个节目了。甚至比卖拐更好。值得称赞。同时,也可能是今年宋丹丹不参加了,使得这老赵同志有了更多的发挥角色的想象力和角色搭配的空间。

摩术是不错,不过我感觉,那个叫什么宁的来着那个摩术师没来,也是个遗憾。这个摩术有点小,对现场的观众来说,可能看不大清楚。

接下来说一说不足之处。黄宏的小品纯属是凑份子的那伙儿的。为什么这么说呢,首先一点,也是我接下来要谈到的,太政治化了。第二,没啥卖点或者是包袱。第三,因为是为了奉承某一部分群体,使得其脱离了大众口味。同时也变得尤其庸俗。

总结一下,除了以上谈到的两个有点彩头的节目之外,其它的,太政治化了。奥运的时候,国外就说中国要把奥运办的政治化,还好,我们国家做的不错,没让这些人抓住小辨子。可是这春晚,办的有点太政治化了。过年嘛,大家就是图一个乐呵。谁愿意听你长篇大论的这个那个。还在炒这过气的奥运,鸟窝,长时间的铺天盖地的广告已经让人受不了了,大过年的,还要受你这个。换点别的话题吧。过年了,大家图的是高兴,谁还听你在这里说教。或许这些演员本身也不想演这么庸俗的节目,但是有领导给安排,不得不上。谁知道呢。或许也是这些演员就为了讨好领导编排的节目呢,也亦未可知。但是却是脱离了广大的人民群众,脱离了曾经是他们的衣食父母的最普通的老百姓。这也不能不说是中国特色。

希望,以后的春晚,我宁可是老谋子来导演一下,因为他最会卖弄视觉元素,或许会少一些政治元素进去。我们不希望再看到如此政治化的春晚。歌功颂德的事儿,离我们老百姓实在是太远了。你们可以搞个内部的忽悠晚会。但是不要现让老百姓把刚吃进嘴的饺子吐出来了。

Uncategorized , , ,

天真的是太冷了

January 23rd, 2009

昨天回到家中,一下车,感觉还没那么冷。但是早上起来就感觉冷的不行了。超级冷。手在外面会冻的受不了。只能藏在口袋里。

昨天晚上看了看天地预报,白天还零下19度呢。旁边的地方,有的甚至是零下34度到零下27度。多少年没这么冷过了。风还大,出来转一圈,刮的羽绒服口袋里都是土。现在在外面,晚上要回家的时候,可就要受罪了,顶风。

如果只是冷还好办一点,关键是风还很大,真的是冷借风势天更冷啊。估计这两天北京也不会暖和。据说要一直冷天三十那天。希望过年那天不要太冷。风不要太大。昨晚上还做了一个奇怪的梦。可惜只是一场梦。当然,如果要变成现实也是够呛,绝对的麻烦。不过在梦中的感觉是真不错。哈哈。无聊之时,偶尔有点感动也挺好。

这两天blog流量还不错。看来没因放过年放假降下去。反而保持了前些天的流量,几乎没有降。看来最近学习的人不少啊。我也要抓紧时间学习一下了:)

心情随笔

明天就回家过年啦

January 20th, 2009

明天就回家过年了。不怎么兴奋。因为最发愁这离京回家和离家过年的过程。

买票难,坐车难,坐车挤。多少个行业,尤其是铁老大,都指着这个年关玩儿命赚钱呢。这两年不致于让人骂的狗血淋头,过年时票价不涨了。

但汽车可不管那个。我一个同学,从他家里的大客车直接到北京的,路上一直开140+以上的速度。据说回去时是空车,更是速度快。就趁这段时间赚钱呢。

汽车人家赚点也就赚点吧,毕竟好多车主都是指望着逢年过节赚钱呢,平时不赔钱就不错了。

但铁老大啊,最大的黄牛,本博贴过youtube上关于北京站售票员卖票时不卖票先打印出一堆票的视频。虽说北京站有人出来解释,可谁会相信呢。说是给临时窗口用的,因为有的临时窗口没电脑。可谁会相信呢。谁见过买票的时候,那卖票的手里拿着一堆票,问你去那儿,然后一张一张的给你翻出来。

那得提前打多少票啊。谁知道是去那儿的啊,是学生票还是普通票啊。真是掩耳盗铃。终于,多少年来,用的最恰当的一个成语,就是给铁老大了。

没办法,天朝嘛,这龚断行业,人家说一是一,说二是二。老百姓永远是最后买单的主儿。

可能有人说了,赚钱啊,买车啊,就不用挤火车了。

是,有车的人是方便了。很方便。可是话说回来,这国际油价,从150美元掉到35美元,国内的油价从多少降到多少啊?

涨的时候是恨不得第二天凌晨就涨起来。可落的时候呢,恨不得先赚个五百年再去落价。

不过值得欣慰的是,天朝现在也在一点点的改变。比如,取消过路过桥费。燃油税,降油价等等。

不过总感觉幸福来的太晚。并且,咱没钱没车,这些措施对咱也没啥好处。

恐怕,这么多年来,唯一享受到的好政策,就是这四毛钱的公交和两块钱的地铁了。其它的呢,都是给利益集团的政策。老百姓买单。

真的希望,像四毛钱公交两块钱地铁这样原好措施,好政策,能多多的来一些。

心情随笔 ,

代朋友发招聘:web前端设计

January 19th, 2009

主要工作:

网站页面原稿设计

基本要求:

具有较强作图能力,有过 Web 页面设计经验,了解用户体验。

优先选择:

熟悉 HTML DOM;
熟悉 W3C 标准及各个平台和浏览器对于各个 CSS 版本的处理特性;
熟悉用 jQuery 框架;
熟悉 Flash;

福利待遇:

3-4k+ (税后, 三险一金公司交, 每逢佳节发过节费)

办公地点:

深圳福田区金中环

有意者发送作品(必须)和价格至 explon[a]gmail.com 详谈。

Uncategorized

php5类的public,protected and private属性和方法

January 15th, 2009

注意,有些网站上的贴子说public,protected和private是函数,其实它们是类的属性和方法,而非函数。
OOP中的一个关键范例就是封装和对象属性(也可以叫做成员变量)的访问保护。大部分通用的OO语言都有三种主要的访问限制关键字:public、protected和private。这很像是C语言的风格。在类定义里定义一个类成员的时候,开发者需要设置这三个修饰符的其中一种,然后再声明成员本身。如果你熟悉php3和php4的对象模型的话,那里所有的类的成员都用var关键字来定义,这样的声明方式就像是php5的public,但是var还是被保留下来了,为了向下兼容。不过我们不赞成这么写,如果你是以php5为基础开发的话,而是建议把脚本中的var转变成新的关键字。

每个修饰符的定义:

public:公共成员即可以通过对象外部使用,也可以使用特殊变量$this从内部的方法访问。如果另外一个类继承了这个公共变量,这个规则同样适用,而且从这个类的对象的外部和内部的方法都可以访问。

protected:保护成员只能从对象内部的方法访问。如果另外一个类继承了一个保护的成员,同样的规则也适用,而且它可以从继承类实例化的对象的方法中通过特殊的$this变量访问到。

private:与私有成员和保护成员类似,因为它们都只能从对象内部的方法访问。但是,私有成员不能从继承类实例化的对象方法访问。因为私有属性在继承的类中是看不到的。而且两个相关的类可以分别声明一个名字相同的私有变量。也就是两个类都只能看到自己的私有属性,私有成员之间是没有关系的。

PHP&MYSQL , , ,

php中HTTP_X_FORWARDED_FOR 和 REMOTE_ADDR的使用

January 15th, 2009

1.REMOTE_ADDR:浏览当前页面的用户计算机的ip地址
2.HTTP_X_FORWARDED_FOR:浏览当前页面的用户计算机的网关
3.HTTP_CLIENT_IP:客户端的ip

在PHP 中使用 $_SERVER["REMOTE_ADDR"] 来取得客户端的 IP 地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的 IP 地址,而不是真正的客户端 IP 地址。要想透过代理服务器取得客户端的真实 IP 地址,就要使用 $_SERVER["HTTP_X_FORWARDED_FOR"] 来读取。

不过要注意的事,并不是每个代理服务器都能用 $_SERVER["HTTP_X_FORWARDED_FOR"] 来读取客户端的真实 IP,有些用此方法读取到的仍然是代理服务器的 IP。

还有一点需要注意的是:如果客户端没有通过代理服务器来访问,那么用$_SERVER["HTTP_X_FORWARDED_FOR"] 取到的值将是空的。

可参考如下代码

if ($_SERVER['HTTP_X_FORWARDED_FOR'] && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/',$_SERVER['HTTP_X_FORWARDED_FOR'])) {
		$onlineip = $_SERVER['HTTP_X_FORWARDED_FOR'];
	} elseif ($_SERVER['HTTP_CLIENT_IP'] && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/',$_SERVER['HTTP_CLIENT_IP'])) {
		$onlineip = $_SERVER['HTTP_CLIENT_IP'];
	}

PHP&MYSQL ,

php中 HTTP_HOST 和 SERVER_NAME 的区别

January 15th, 2009

PHP的SERVER保留变量中HTTP_HOST 和 SERVER_NAME经常是一样的,原因是服务器端口是80,
那么HTTP_HOST将省略不显示,而HTTP服务的默认端口就是80,所以大多数情况下,HTTP_HOST都没有显示这个端口号。

而如果使用的是ssl链接,那么端口号将被显示出来。

如果你的程序中有设定端口的功能,则可以考虑使用SERVER_NAME

否则,建议使用HTTP_HOST

PHPBB中有一句很经典的语句:

$server_name = (!empty($_SERVER['HTTP_HOST'])) ? strtolower($_SERVER['HTTP_HOST']) : ((!empty($_SERVER['SERVER_NAME'])) ? $_SERVER['SERVER_NAME'] : getenv('SERVER_NAME'));

所以HTTP_HOST = SERVER_NAME:SERVER_PORT

PHP&MYSQL ,

set_magic_quotes_runtime 和 magic_quotes_gpc的区别

January 15th, 2009

set_magic_quotes_runtime() 可以让程序员在代码中动态开启或关闭 magic_quotes_runtime,set_magic_quotes_runtime(1) 表示开启,set_magic_quotes_runtime(0) 则表示关闭。当set_magic_quotes_runtime(1) 时,从数据库或通过fread之类的函数读取的文本,将自动对’ “和\自动加上反斜杠\进行转义,防止溢出。这在对数据库的数据进行转移的时候非常有用。但在一般情况下,应当将其关闭,否则从数据库读取出来的数据单引号、双引号和反斜杠都会被加上\,导致显示不正常。像Discuz,PHPWind都在公共文件的头部加上一句 set_magic_quotes_runtime(0); 强制关闭 magic_quotes_runtime 。

magic_quotes_gpc
作用范围是:WEB客户服务端;
作用时间:请求开始是,例如当脚本运行时.

magic_quotes_runtime
作用范围:从文件中读取的数据或执行exec()的结果或是从SQL查询中得到的;
作用时间:每次当脚本访问运行状态中产生的数据.

所以

magic_quotes_gpc的设定值将会影响通过Get/Post/Cookies获得的数据
magic_quotes_runtime的设定值将会影响从文件中读取的数据或从数据库查询得到的数据

magic_quotes_gpc 是对通过GET、POST、COOKIE传递的数据进行转义,一般在数据入库前要先进行转义,
magic_quotes_gpc不能在代码中动态开启或关闭,需要到php.ini将magic_quotes_gpc设置为on或off,
代码中可以用get_magic_quotes_gpc获取magic_quotes_gpc的状态。
当magic_quotes_gpc为off时,需要手工对数据进行addslashes,代码如下:

 if (!get_magic_quotes_gpc()) {   
       add_slashes($_GET);   
     add_slashes($_POST);   
    add_slashes($_COOKIE);   
 }   
 
 function add_slashes($string) {   
    if (is_array($string)) {   
         foreach ($string as $key => $value) {   
            $string[$key] = add_slashes($value);   
         }   
     } else {   
        $string = addslashes($string);   
     }   
     return $string;   
 }

PHP&MYSQL ,

php中register_globals全局变量详解

January 15th, 2009

register_globals是php.ini里的一个配置,这个配置影响到php如何接收传递过来的参数,如果你的问题是:为什么我的表单无法传递数据?为什么我的程序无法得到传递过来的变量?等等,那么你需要仔细的阅读以下的内容。

register_globals的值可以设置为:On或者Off,我们举一段代码来分别描述它们的不同。

<form name="frmTest" id="frmTest" action="URL">;
<input type="text" name="user_name" id="user_name">;
<input type="password" name="user_pass" id="user_pass">;
<input type="submit" value="login">;
</form>;

当register_globals=Off的时候,下一个程序接收的时候应该用$_GET['user_name'] 和$_GET['user_pass']来接受传递过来的值。(注:当

;的method属性为post的时候应该用$_POST['user_name']和$_POST['user_pass'])

当register_globals=On的时候,下一个程序可以直接使用$user_name和$user_pass来接受值。

顾名思义,register_globals的意思就是注册为全局变量,所以当On的时候,传递过来的值会被直接的注册为全局变量直接使用,而Off的时候,我们需要到特定的数组里去得到它。所以,碰到上边那些无法得到值的问题的朋友应该首先检查一下你的register_globals的设置和你获取值的方法是否匹配。(查看可以用phpinfo()函数或者直接查看php.ini)

那我们为什么要使用Off呢?原因有2:
1、php以后的新版本默认都用Off,虽然你可以设置它为On,但是当你无法控制服务器的时候,你的代码的兼容性就成为一个大问题,所以,你最好从现在就开始用Off的风格开始编程
2、这里有两篇文章介绍为什么要Off而不用On

http://www.linuxforum.net/forum/gshowflat.php?Cat=&Board=php3&Number=292803&page=0&view=collapsed&sb=5&o=all&fpart=

http://www.php.net/manual/en/security.registerglobals.php

现在还有一个问题就是,以前用On风格写的大量脚本怎么办?
如果你以前的脚本规划得好,有个公共包含文件,比如config.inc.php一类的文件,在这个文件里加上以下的代码来模拟一下(这个代码不保证 100%可以解决你的问题,因为我没有大量测试,但是我觉得效果不错)。另外,这个帖子里的解决方法也可以参考一下(http://www.chinaunix.net/forum/viewtopic.php?t=159284)。

<?php
if ( !ini_get('register_globals') )
{
    extract($_POST);
    extract($_GET);
    extract($_SERVER);
    extract($_FILES);
    extract($_ENV);
    extract($_COOKIE);
 
    if ( isset($_SESSION) )
    {
        extract($_SESSION);
    }
}
?>;

补充并强调一下,register_globals = Off的情况不仅仅影响到如何获取从
;、url传递过来的数据,也影响到session、cookie,对应的,得到 session、cookie的方式应该为:$_SESSION[]、$_COOKIE。同时对于session的处理也有一些改变,比如,session_register()没有必要而且失效,具体的变化,请查看php manual里的Session handling functions

PHP&MYSQL ,

ini_get — 取得php设定的值

January 15th, 2009

ini_get

(PHP 4, PHP 5)ini_get — Gets the value of a configuration option

范例

<?php
/*
Our php.ini contains the following settings:
 
display_errors = On
register_globals = Off
post_max_size = 8M
*/
 
echo 'display_errors = ' . ini_get('display_errors') . "\n";
echo 'register_globals = ' . ini_get('register_globals') . "\n";
echo 'post_max_size = ' . ini_get('post_max_size') . "\n";
echo 'post_max_size+1 = ' . (ini_get('post_max_size')+1) . "\n";
echo 'post_max_size in bytes = ' . return_bytes(ini_get('post_max_size'));
 
function return_bytes($val) {
    $val = trim($val);
    $last = strtolower($val[strlen($val)-1]);
    switch($last) {
        // The 'G' modifier is available since PHP 5.1.0
        case 'g':
            $val *= 1024;
        case 'm':
            $val *= 1024;
        case 'k':
            $val *= 1024;
    }
 
    return $val;
}
 
?>

上例的输出类似于:

display_errors = 1
register_globals = 0
post_max_size = 8M
post_max_size+1 = 9
post_max_size in bytes = 8388608

PHP&MYSQL ,