在WordPress上执行php代码
Mar 29th
本来在做极光监测页面的时候就需要执行php代码,但最后还是给我用最土鳖的办法绕过去了(在别的地方cron一个php,定时生成几个gif图像,然后引用之)。结果今天折腾实验室的降雨预报页面的时候,总算绕不过去了。本来想着说这应该是个小意思,我装个exec-php不就可以了嘛。结果exec-php竟然还要折腾配套的各种东西,搞到最后竟然还不能用,真是郁闷。于是只好查查看有没有替代的方法。幸好万能的Wordpress还是可以用不太麻烦的方法解决这一难题的,这一方法就是shortcode,适用于规模不大的php程序。
简单地说就是把你的php程序植入到主题里面,然后在文章里用形如
[my-shortcode type="dog"]
的形式调用之。
首先修改一下主题里的function.php,在末尾添加这一行:
include_once(“shortcode.php”);
我们所有的代码就放在shortcode.php里面。当然你想全写在function.php里也没问题。
要把一个php程序写到shortcode里很容易,只要把它弄成一个函数(如果它还不是函数的话),然后注册这个函数即可。比如下面的shortcode.php
function my-shortcode-function($atts){ extract(shortcode_atts(array('type' => 'cat'),$atts)); // 设定参数type的默认值为cat if ($atts['type']=='cat') echo "Miao"; elseif ($atts['type']=='dog') echo "Wang"; // 函数其他部分 return; } add_shortcode('my-shortcode', 'my-shortcode-function'); // 注册my-shortcode-function到my-shortcode
于是一个shortcode就做好了。如果我想让它返回Wang,只需要在写文章的时候用
[my-shortcode type="dog"]
就可以了。
php由于utf-8开启BOM导致中文全成问号的问题及解决方法
Jul 28th
服务器迁移以后,晴天钟出现了个古怪的问题:中文版页面中有一部分的中文全部成了问号“?”,但其他的中文却没有任何问题,英文版也没有任何问题。
经检查,凡是使用include函数调用的模块,底下的中文全部成了问号,用require或require_once则没有问题;而页面的编码的确是设置为UTF-8,服务器迁移以前运行了一年也没有异常。
在网上搜了半天,又写了几个测试文件,用include调用的文档却能正常显示,真是百思不得其解。
捣鼓了半天,注意到用vi打开的时候文件头多出了<feff>的标识,在网上一搜,发现原来这是BOM(即unicode signature)的标示符,是不是这个原因呢?于是将<feff>去掉,中文解析正常!
另:近期有站长反映说某php程序工作异常,管理员答复是Zend还没有在新服务器上安装,不知道BOM导致include函数下utf-8的中文无法解析的问题是否和没有装Zend有关。
wp和php的两个小问题及其解决方法
Jul 24th
1. php升级后图像生成出错的问题
7月23日,宇宙驿站更新了服务器,php也从5.2.3升级到5.3.2。不过升级了以后,晴天钟的图像生成却出了问题,生成的图像有许多地方没法显示,error_log提示“imagefilledarc() expects parameter 9 to be long”,但奇怪的是在原来的5.2.3运行是没有问题的呀,于是去php.net翻了官方手册,仔细读了读有关条目,原来是php中imagefilledarc函数指令有一个更改,我原来的命令是:
imagefilledarc($im,$xc+1,10,15,16,20,60,$white,IMG_ARC_FILL);
而php将IMG_ARC_FILL替换成了IMG_ARC_PIE,但却没有给出显著提示,似乎也没有给出一个向下兼容的解决方案。只要把以上的行改为
imagefilledarc($im,$xc+1,10,15,16,20,60,$white,IMG_ARC_PIE);
就好了。
2. WordPress无法更新插件的问题
不知道从什么时候开始,我在宇宙驿站的3个WordPress博客就无法自动检测WordPress及插件的更新,查看Update的时候总是显示“all up to date”,又可以肯定服务器到wordpress.org的连接没有问题,实在是伤脑筋。这次迁移过程中发现了原因,原来是宇宙驿站的PDO模块出现了问题,导致WordPress的更新检测模块无法正常工作。
由于PDO模块的安装或修复需要管理员权限,如果有朋友的WP博客因为PDO模块的原因无法自动检测更新的,可以用以下两个插件代替:InstantUpgrade(用于WP程序的更新)以及One Click Plugin Updater(用于WP插件的更新),它们都不需要PDO模块的支持。
最新评论 Recent Comments