When does php apc refresh cache data?

I did this experiment with php apc: In php.ini I set include_path = /first/include/path:/second/include/path, but do not put a file in /first/include/path or /second/include/path, create test.php as simple as this It will run into a fatal error. This error is obvious. Then I create the file tobeincluded.php in /second/include/path, test.php now runs all right. Then… Continue reading When does php apc refresh cache data?

Published
Categorized as 小小草 Tagged

Upgrade zend server php 5.2 to 5.3

The correct command to remove php 5.2 before upgrade zend server to 5.3 is yum -y remove zend-server-php-5.2 && yum -y remove `rpm -qa|grep zend|xargs` Use yum -y remove zend-server-php-5.2 is not enough. After removal, run yum install zend-server-ce-php-5.3 Of course, zend repository must be add to /etc/yum.repos.d before. (If not, where you got zend… Continue reading Upgrade zend server php 5.2 to 5.3

A tool to synchronise Magento database between servers

我时不时需要在测试服务器上加载生产服务器的实时数据,以前都是把数据下载到本地的测试服务器后,手工键入一些命令完成数据加载,每次都要花费几分钟时间。为了避免一再“浪费”这几分钟,我今天一次性投入了几小时完成了一个 php 脚本。虽然这是为 magento 的数据迁移而写的脚本,但我写完一看,用在其他地方也是可以的。 为了安全起见,该脚本是用 php 命令行运行的,所有输出针对 terminal 美化,不是 browser。保存源码为 data_mover.php,同一目录下要有 mysqldump 得到的经 gzip 的 sql 文件,文件名以 FILENAME_PREFIX 开头,以 .sql.gz 结尾。启动时只需键入 /path/to/php -f data_mover.php 即可。 初始化 PDO 对象时,按理只需要 host=localhost,不需要 unix_socket=MYSQL_SOCKET。但奇怪的是,如果通过 apache 调用本程序(虽然不是本程序的初衷,但我希望它在浏览器下也能运行),仅指定 host=localhost 作 PDO __construct() 参数,会产生一个莫名其妙的错误: SQLSTATE[HY000] [2002] Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2) 似乎是 PDO bug。可以通过 host=127.0.0.1 或者追加… Continue reading A tool to synchronise Magento database between servers

How to override abstract class in Magento?

If you are googling “override abstract class in magento” to find my blog, probably you already tried Mage::getModel(‘module/model_abstract’) as it worked for instantiatable classes. The scenario when requires override an abstract class is overriding isActive() method in Mage_Shipping_Model_Carrier_Abstract. If Mage_Shipping_Model_Carrier_Abstract can be overridden, all carrier methods’ isActive logic can be changed without changing each instantiatable… Continue reading How to override abstract class in Magento?

Discovery: PhProxy & CHtml

我认为突破访问限制的终级方案是 VPN,可是设置 VPN 的技术含量有点高,到现在我还搞不掂 OpenVPN,只能徘徊于 PPTP。今天发现可爱的 php 也有了 proxy(或许早就有了,我不知道罢了),虽然我用不着,但对国内的朋友们确实是天大的福音。简单易行,一分钟就能搭一个! 我只发现 phproxy 三个不大的缺陷: 无法代理流文件(比如无法看 youtube 上的 video,但访问 youtube 没问题) 因为 phproxy 工具栏在网页顶部,如果代理网页在相同位置绝对定位,则会重叠在一起(比如 wikipedia,我想修改一下 style.css 就好了,或者做一个自动隐藏的工具栏) 有些被代理的网页自检而跳出代理,重定向到原来的 url(比如 google spreadsheet) 牛人真不少,还有一个 CHtml,竟然用 recaptcha 去实现突破,构思非常巧妙。

Comparison in PHP

除非使用 === 或 !== 进行比较,PHP 尽可能地将值转化为数字进行比较。因此,看到比较 “10” == “1e1” 的结果是 true,千万不要大惊小怪。 “尽可能”如何理解? 如果等式一边是数字,另一边是字符串,那么字符串一定要 cast to int 后再比较。因此,比较 “10” == 1e1 的结果是 true,比较 “10 ” == 1e1 的结果也是 true。 如果等式两边都是字符串,且字符串中均不含数学字符以外的字符(包括white space),那么两边的字符串会在 cast to int 后再比较;否则,直接比较字符串。因此,比较 “10” == “1e1” 的结果是 true,但比较 “10 ” == “1e1” 的结果是 false。 如果等式有一边或两边是数组,则先比较数组结构是否相同,再逐个比较数组元素。在比较数组元素时,索引不会 cast,但值按上述两条规则“尽可能” cast。因此,比较 1 == array(1) 的结果是 false,比较 array(“10”) ==… Continue reading Comparison in PHP

Published
Categorized as 小小草 Tagged

Do not use is_null()

测试一个变量是否为 NULL,我曾喜欢用 is_null() 函数,现在发现还比如直接用 === 比较来得快。 php.net 上有人写了个测试,得出的结论是 === 比 is_null() 快30倍。 这是2007年的事情了,我不清楚他的环境配置。如今在我 Intel(R) Celeron(R) CPU 2.80GHz PC 充当的测试服务器上,running zend server php 5.2.9,得出的结论是 === 比 is_null() 快1-2倍。看来 php is_null() 的效率进步了不少,但还是慢。以后我得改用 NULL === $v 的方式了。

Published
Categorized as 小小草 Tagged

Solution to php fastcgi crashes

One of my servers is running Fedora + Nginx + php-cgi (spawned). I noticed sometimes php-cgi crashes without a reason or warning (Nginx gives out 500 error), and I have to spawn it again. After some digging, I find exporting PHP_FCGI_MAX_REQUESTS to ENV cures the problem. As advised, I export PHP_FCGI_CHILDREN as well. To achieve… Continue reading Solution to php fastcgi crashes

Published
Categorized as 小小草 Tagged