Entries tagged as tip
自己动手,丰衣足食 Sat, Oct 31. 2009
浏览器的首页问题让洒家头疼已久,最初的空白页面,觉得太浪费了,然后用 Google 吧,其实用途不大,后来升级到 Firefox 的 Fast Dial 插件,感觉好多了但是还没有到完美的地步。
实在不行,只能自己动手,丰衣足食,自己用 HTML 写一个首页吧,这样想怎么控制就怎么控制了:
然后配合 Firefox 的 New Tab Homepage 插件,让新开的标签页都能显示默认的起始页,而且反正都是静态的,不在乎速度的问题了。
WAMP crashes easily those days: Some notes on PHP configuration Mon, Sep 14. 2009
I've upgrade my WAMP(Windows+Apache+MySQL+PHP) to lastest versions, but Apache crashes more often then it used to be due to incorrect configuring PHP.
Now I've finially got a stably working development environment. And here is some notes:
go-pear.batdose not work.When initializing as usual using
go-pear.batcommand, I got an error message:- phar "E:\HTTPD\php-5.3.0-Win32-VC9-x86\PEAR\go-pear.phar" does not have a signature
- PHP Warning: require_once(phar://go-pear.phar/index.php): failed to open stream: phar error: invalid url or non-existent phar "phar://go-pear.phar/index.php" in E:\HTTPD\php-5.3.0-Win32-VC9-x86\PEAR\go-pear.phar on line 1236
So,
go-pear.bardid not work for me, but:is all right.- php -dphar.require_hash=0 PEAR\go-pear.phar
Xdebugmakes Apache crashes everytime.As I said, I've upgraded all components to it's lastest version: Apache, version 2.2.13 form offical site, PHP, version VC9 x86 Thread Safe, MySQL, version 5.1.38-community.
Following Xdebug manual, I have to download the one matches the PHP version I'm using. So, I downloaded Xdebug 2.0.5 5.3 VC9 (32 bit), made modification to php.ini to enable Xdebug, and restart Apache.
From now on, Apache crashed everytime I call
phpinof()function. I've tried some solution from Google ,but none of them works. Though, one page remains me of the version of PHP. And I found this on PHP for Windows download page:
Change my PHP from VC6 to VC9, re-configure all settings and download Xdebug 2.0.5 5.3 VC96(32 bit), it works!Which version do I choose?
If you are using PHP with Apache 1 or Apache2 from apache.org you need to use the VC6 versions of PHP
If you are using PHP with IIS you should use the VC9 versions of PHP
Can't make new folder when installing PEAR.
After solve problems above, I came to a new one, When installing PEAR, ater set the dirs, PHP began to download and install PEAR components, installation programe breaks and shows:
- Unable to create Temporary directory for processing E:\HTTPD\php\PEAR\tmp.
- Run this script as administrator or pick another location.
I'm sure nothing is wrong about dir premission. Solved this problem, I'm also sure that few people may face this, because it is due to the immature hardlink mechanism on Windows Server 2008.
I made hardlink named php to folder php-5.3.0-Win32-VC6-x86 and I was running the programe in php folder. After I change my current folder to php-5.3.0-Win32-VC6-x86, it goes well.
Conclusion: harklink on Windows is still a load of crap.
终于用上左手的 Logitech V450 Nano Cordless Laser Mouse Tue, Sep 16. 2008
和谐四年秋,洒家弱冠六年纪念日当天,于京东购买赛普泰克——啊不,是罗技泰克无尾老鼠一只。
但是此鼠娘家罗技泰克所附送嫁妆 SetPoint 乃伪劣产品,不得博得洒家新欢 Microsoft Windows 2008 之欢心,2008 不认其名门出身,只当是一 HID compliant Mouse,真是狗眼看人低,微软看鼠卑啊。
SetPoint 迫东家 2008 的于淫威,亦不敢主仆相认,就是不敢显示出那欲说还羞的 My Mouse 选项卡。
借古狗洋大人之力,终于在无尾鼠娘家旁边的一个老爷们扎堆聊天的地方找到了前人留下的洋文名帖一张,将藩语译成我中华之文字,方懂上书意思是,喜新厌旧是罪过的,有了新老婆 2008,不能忘了二老婆 Vista 和小妾 XP,须到二老婆或者小妾房中寻得名为 CDDRV2 的仙丹一枚给新老婆服用才可解除新老婆的障眼之疾。
虽说此方甚好,可以药到病除,但是难为了吾等洁身自好,二老婆小妾皆无之人,难道为了这个还要纳上一房不成?未免荒谬。再看前述之帖,此洋鬼子上留蝇头小楷一行,曰,吾等清白之人之赤心,上可达天庭,故玉帝命他将仙丹藏于一个名为 RapidShare 之八卦炉内,以诚心猛击此链接即可得仙丹。
洒家于是踏上 NJU_BRAS 大道前去寻访仙丹,不曾想,好事多磨,玉帝说 BRAS 戴着不爽,遂令如来将 BRAS 大道缩成极小,以难为用 BRAS 取经之人。无奈之下,退回来继续用 PROXY 小道,道上无人阻碍,方能够到达藩国按洋鬼子之指点找到仙丹,取回,用 LDPINST.exe 做药引给新欢 2008 服下,之间电光火石之间,2008 立马认出洒家的无尾鼠出自罗技泰克名门,立即取名为 Logitech HID compliant Cordless mouse。此时寻到 SetPoint,SetPoint 一看婆家已经接纳此鼠,亦显现出 My Mouse 以和之。
至此,洒家魂牵梦绕之 My Mouse 终得拨云见日,吾等方能用上左手鼠标。善哉善哉。
附上洋泾兵之贴:Windows Server 2008 x86(32bit) + Setpoint 4.6 installation ,后来者请自去寻访仙丹。
一个 # 不够,那么就多来几个吧 Wed, Sep 3. 2008
网页中经常要做的一件事情就是让一个链接来执行一个 JavaScript 脚本,例如:< href="#" onClick="some_js_here();">Some text</a>,不过这样的副作用是因为有 href="#"。所以导致点击完后页面会滚动到最上面。
以前用的几种解决方案:
- 不写 href,这样会导致很多浏览器不会把 a 标签按照你预期的方式渲染;
- 在href 里面直接写 JavaScript 脚本,这样不完全符合 W3C 的规范。
其实要解决这个问题,不让浏览器把页面滚动到最上面,很简单,href="" 里面 多写几个 # 就行了,我一般用 6 个比较保险,这个方法适用于 IE5、IE6、IE7、FF2、FF3。虽然不知道为什么但是很好用。猜测是因为 # 表示进行页内书签的跳转,但是多个 # 浏览器就不知道什么意思了,干脆罢工好了,哈哈。
MySQL 对于 COUNT(*) 和 LIMIT 同时使用的 BUG Sun, Aug 17. 2008
对一个有 29 条记录的表进行如下操作:
- SELECT COUNT( sys_uia_account.ID ) FROM sys_uia_account结果 29
- SELECT COUNT( sys_uia_account.ID ) FROM sys_uia_account LIMIT 10结果 29
- SELECT COUNT( sys_uia_account.ID ) FROM sys_uia_account LIMIT 10 , 10没有结果
看来以后使用 COUNT(*) 的时候不能同时使用 LIMIT offset, row_count 这种表达方式了。
PS:如果统计全表记录,使用下面的方法会更加快捷:
- SELECT SQL_CALC_FOUND_ROWS *
- FROM sys_uia_account;
- SELECT FOUND_ROWS( ) ;
唯一需要注意的就是,这两个查询必须在一起进行,因为 SQL_CALC_FOUND_ROWS 不对结果进行任何缓存。
让 Firefox3 支持 Flash Wed, Jun 18. 2008
Firefox3 在 beta 和 RC 阶段对 Flash 支持的不好是臭名昭著,用 Google 随便搜索 Firefox3+Flash 看看结果就知道了。
Beata 和 RC 不支持吧。还能说是 bug,今天正式版发布,居然还是不支持,这就说不过去啦。用 Firefox 内嵌的 addons 管理机制安装 Flash 从来就木有成功过。
最后用如下方法才安装成功:
- 下载 Adobe 官方的 FLash 卸载程序;
- 下载 Adobe 官方的 Flash 安装程序;
- 关闭 Firefox;
- 运行卸载程序,再运行安装程序;
- 如果有必须要,则重建 Firefox 插件数据库。
最后一步不是必需的,至少偶就木有用到。
现在终于能够看到满屏的 Flash 了……下一步,安装 flashblock 插件屏幕它们~hiahia~~
10 件(也许)你不了解 PHP 的事情 Mon, Feb 25. 2008
来源:10 things you (probably) didn’t know about PHP
PHP 是我用过的语言中,最令人恼火的但同时也是最有趣的语言。我之所以说“令人恼火”主要是因为函数命名极其不一致。尽管我每天都要用到这些函数,我还是要想一下“究竟是 str_pos 还是 strpos?是 str_split 还是 strsplit?”。另一方面,有时候可以用一行简单的代码就能解决一个难题。
下面是一些很酷的特性,很可能你也没有注意到:
- 使用 ip2long() 和 long2ip() 函数来把 IP 地址转化成整型存储到数据库里。这种方法把存储空间降到了接近四分之一(char(15) 的 15 个字节对整形的 4 个字节),计算一个特定的地址是不是在一个区段内页更简单了,而且加快了搜索和排序的速度(虽然有时仅仅是快了一点)。
- 在验证 email 地址的时候使用 checkdnsrr() 函数验证域名是否存在。这个内置函数能够确认指定的域名能够解析成 IP 地址。该函数的PHP 文档的用户评论部分有一个简单的用户自定义函数,这个函数基于 checkdnsrr(),用来验证 email 地址的合法性。对于那些认为自己的 email 地址是 “joeuser@wwwphp.net” 而不是 “joeuser@php.net” 的家伙们,这个方法可以很方便的抓住他们。
- 如果你使用的是 PHP 5 和 MySQL 4.1 或者更高的版本,考虑抛弃 mysql_* 系列函数改用改进版的 mysqli_* 系列函数。一个很好的功能就是你可以使用预处理语句,如果你在维护一个数据库密集型站点,这个功能能够加快查询速度。一些评估分数。
- 学会爱上三元运算符。
- 如果你在项目中感觉到有可复用的部分,在你写下一行代码前先看看 PEAR 中是否已经有了。很多 PHP 程序员都知道 PEAR 是一个很好的资源库,虽然还有很多程序员不知道。这个在线资源库包含了超过 400 个可以复用的程序片段,这些程序片段你可以立即用刀你的程序里。除非说你的项目真的是非常特别的,你总能找到帮你节省时间的 PEAR 包。(参见 PECL)
- 用 highlight_file() 来自动的打印出格式化的很漂亮的源代码。如果你在留言板、IRC 这些地方寻求一个脚本的帮助的话,这个函数用起来非常的顺手。当然了,要小心不要意外的泄露出你的数据库连接信息和密码等。
- 使用 error_reporting(0) 函数来防止用户看到潜在的敏感错误信息。在理想情况下,发布服务器应该在 php.ini 里完全禁止。但是如果你用的是一个共享的 web 服务器的话,你没有自己的 php.ini 文件,那么这种情况下你最好的选择就是在所有脚本的第一行前加上 error_reporting(0);(或者使用 require_once() 方法)。这就能够在出错的时候完全屏蔽敏感的 SQL 查询语句和路径名。
- 在网数据库中存储很大的字符串之前使用 gzcompress() 和 gzuncompress() 来显式的压缩/解压字符串。这个 PHP 内置函数使用 gzip 算法,可以压缩普通文本达 90%。在我每次要读写 BLOB 类型的字段的时候都使用这些函数。唯一额例外就是当我需要全文检索的时候。
- 通过“引用”传递参数的方法从一个函数中得到多个返回值。就像三元运算符一样,大部分受过正式编程训练的程序员都知道这个技巧。但是那些 HTML 背景大于 Pascal 背景的程序员都或多或少的有过这样的疑问“在仅能使用一次 return 的情况下,从一个函数里返回多个值?”答案就是在变量前加上一个 “&” 符号,通过“引用”传递而非“值”传递。
- 完全理解“魔术引号”和 SQL 注入的危险性。我希望阅读到这里的开发者都已经很对 SQL 注入和了解了。不过我还是把这条列在这里,是因为这个确实有点难以理解。如果你还没有听说过这种说法,那么把今天剩下的时间都用来 Google、阅读吧。
在 Bluehost 主机上修改时区 Mon, Mar 12. 2007
在 Bluehost 主机上用 Serendipity 做 Blog,一切都很满意,就是时区的问题。虽然 configure 里面能够设置时区偏移量,但是 RSS 输出后都是 GMT 时间,但是大部分 RSS Reader 都没有做过设置,一个朋友就经常看见我写的 Blog 在未来发表的!
修改时区最好的方法就是修改 php.ini 里面的 date.timezone 属性就可以了,这样可以不修改任何程序。但是只支持 PHP5 或者更高版本,现在我的主机用的 PHP 版本是 4.4.4,不能用。当然也不能用 date_timezone_set() 这样的函数了。
不过发现一个也不算麻烦的方法。代码如下:
putenv() 函数用得不多,所以开始也没有考虑到。不过官方的手册里面居然没有找到都能设置什么环境变量,只有其他的相关函数里面零星的介绍。
[LAMP] 页面以及显示 traceroute 的结果 Tue, Jul 5. 2005
今天遇到的一个问题,要求在一个页面的 中实时的显示traceroute的结果,因为这个一般会比较长时间运行,所以要求立即显示,这样就需要对输出进行控制。
第一次想的是,用一个隐藏iframe,然后iframe定时刷新,取出数据来。这样的问题是不知道什么时候结束,就会一直刷新下去,直到用户点击另一个页面。
然后改用输出控制,首先使用flush(),但是没有任何效果。后改用ob_ 这一些系列函数。达到了我要的效果。
程序如下:
- <?php
- $cmd = "traceroute www.google.com";
- $result = "";
- if ($fd) {
- $result .= $buffer;
- echo "<script> result.innerHTML = \"" . str_replace("\n", "", nl2br(htmlspecialchars($result))) . "\";</script>\n";
- }
- }
- ?>
[LAMP] 让 PHP 执行 root 权限的指令 Mon, Apr 11. 2005
今天下午 Mito 在 QQ上问我如何用 PHP 执行系统指令,还要 root 权限,原来是他们老板要管理员通过 Web 修改系统时间日期……无语中,这个要求真 TMD 变态。
不过这个问题我也不会,测试一下重定向和管道技术把密码发给 su 指令,提示信息是:
su: must be run from a terminal
不过想想也是正常,安全问题嘛,小心为好。不过还是不死心,搜索了一下解决方法。
其中让 PHP 执行系统命令有以下几种方法:
- string system (string command [, int return_var]);
- string exec (string command [, string array [, int return_var]]);
(以上两个傻子都知道) - void passthru (string command [, int return_var]);
这个有点新鲜,说明是:passthru()只调用命令,不返回任何结果,但把命令的运行结果原样地直接输出到标准输出设备上。所以passthru()函数经常用来调用象pbmplus(Unix下的一个处理图片的工具,输出二进制的原始图片的流)这样的程序。同样它也可以得到命令执行的状态码。
实例:
- 用“`”符号,这个……估计呆子也能知道,居然那个网站还觉得是秘籍……汗ing
最重要的,也是解决 root 权限的方法,就是使用 popen() 函数打开进程。
原网站上说明如下:上面的方法只能简单地执行命令,却不能与命令交互。但有些时候必须向命令输入一些东西,如在增加 Linux 的系统用户时,要调用 su 来把当前用户换到 root 才行,而 su 命令必须要在命令行上输入 root 的密码。这种情况下,用上面提到的方法显然是不行的。popen() 函数打开一个进程管道来执行给定的命令,返回一个文件句柄。既然返回的是一个文件句柄,那么就可以对它读和写了。在 PHP3 中,对这种句柄只能做单一的操作模式,要么写,要么读;从 PHP4 开始,可以同时读和写了。除非这个句柄是以一种模式(读或写)打开的,否则必须调用 pclose() 函数来关闭它。
实例:
- <?php
- /* PHP中如何增加一个系统用户
- 下面是一段例程,增加一个名字为james的用户, root密码是 verygood。仅供参考 */
- $sucommand = "su --login root --command";
- $useradd = "useradd ";
- $rootpasswd = "verygood";
- $user = "james";
- ?>
