擺弄MediaWiki好幾年了,都盡量避免碰PHP程序,在不得已的情況下,對皮膚文件、少數配置參數等地方進行過有限的修改。去年底開始嘗試改用Drupal系統,不可避免遇到需要修改PHP程序的地方,經過一段時間的摸索,發現PHP也不是想象中的那麼難,不過是另一種程序語言而已,要精通不容易,但上手還是不太難的。
在Drupal中調用PHP程序摸出一些門道後,想到以前使用MediaWiki平台搭建的查号吧網站中一直沒有解決的一個問題,就是包含10000個号碼列表的頁面,因為采用Wiki代碼而速度極慢,新頁面的生成需要數十秒的時間,當大量更新模闆的時候,3台16核CPU的服務器處理起來都需要好些天,以前也想過用PHP程序來實現,但一直沒有實際嘗試。
今天下午去MediaWiki官方網站找到了一個可以在頁面中嵌入PHP程序的擴展: Extension:Include PHP ,搭建起來比較簡單,就按照說明中操作就可以,然後寫了一個很簡單的多重循環程序:
<?php
$title = str_replace("/","",strrchr(urldecode($_SERVER["REQUEST_URI"]),"/"));
for ($i=0; $i<=9; $i++)
{
echo "\n<h2>".$title.$i.":".$title.$i."000-".$title.$i."999"."</h2>\n\n";
for ($j=0; $j<=9; $j++)
{
echo "\n<h3>".$title.$i.$j.":".$title.$i.$j."00-".$title.$i.$j."99"."</h3>\n\n";
for ($k=0; $k<=9; $k++)
{
echo "<p>".$title.$i.$j.$k.":";
echo $title.$i.$j.$k."0,";
echo $title.$i.$j.$k."1,";
echo $title.$i.$j.$k."2,";
echo $title.$i.$j.$k."3,";
echo $title.$i.$j.$k."4,";
echo $title.$i.$j.$k."5,";
echo $title.$i.$j.$k."6,";
echo $title.$i.$j.$k."7,";
echo $title.$i.$j.$k."8,";
echo $title.$i.$j.$k."9</p>\n";
}
}
}
?>
就解決了這個困擾幾年的麻煩,以前需要數十秒生成的頁面現在隻要零點幾秒甚至零點零幾秒就可以處理了,速度提高了數百倍以上!
有幾點需要注意的地方:
- 擴展程序中包含了兩處“$parser->disableCache();”,如果還是希望有緩存的話,可以注釋掉;
- 擴展程序有用戶組安全機制,如果希望各種用戶保存的頁面都能調用設定的PHP程序,可以在LocalSettings.php中設置“$wgGroupPermissions['*']['scripting'] = true;”。
在MediaWiki頁面中嵌入PHP程序算是一種新突破,推廣開來還可以解決以前一直希望達到的目的,例如:頁面下方嵌入留言框,調用API等。不過現在其它事情太忙,以後再說吧。
2015年4月補充:上面這個MediaWiki的擴展程序因為安全性問題,很早就被從官方網站删除了,也更找不到升級版本了。要想實現更靈活的嵌入内容,可以《嘗試編寫MediaWiki的擴展程序》,這是最正規可靠的辦法,多嘗試一下後應該也不是很難。
评论5
太謝謝你了,解決了我多日的困擾!
太謝謝你了,解決了我多日的困擾!
多共享,多交流
不客氣,有技術問題多共享、多交流,我也是從别人的文章中學到很多,希望自己的一些記錄也能幫得上别人。
非常感謝你,但是,可以在頁面中嵌入PHP程序的擴展
非常感謝你,但是,可以在頁面中嵌入PHP程序的擴展 Extension:Include PHP 這個搭建的文檔不存在,能否幫忙發一份到郵箱,非常感謝~郵箱地址:05102tiantian@163.com
郵箱地址:05102tiantian@163.com 非常感謝~這個擴展沒有文檔,就隻有一個文件,複制如下供參考: