Warning: include(/home/blog66rr/public_html/wp-content/plugins/hyper-cache/cache.php): failed to open stream: No such file or directory in /home/blog66rr/public_html/wp-content/advanced-cache.php on line 24

Warning: include(/home/blog66rr/public_html/wp-content/plugins/hyper-cache/cache.php): failed to open stream: No such file or directory in /home/blog66rr/public_html/wp-content/advanced-cache.php on line 24

Warning: include(): Failed opening '/home/blog66rr/public_html/wp-content/plugins/hyper-cache/cache.php' for inclusion (include_path='.:/opt/cpanel/ea-php70/root/usr/share/pear') in /home/blog66rr/public_html/wp-content/advanced-cache.php on line 24
unethost無限空間虛擬主機 技術分享部落格 – 第 35 頁 – unethost 專注於提供優質的虛擬主機服務及相關問題解答

mysql指令速記

我實在是覺得透過 cpanel來增新mysql user有點缺乏效率。
還是不用指令不爽呀… ( 以下指令需要以root身分登入mysql )

(1) 新增使用者
create user ‘使用者名’@’localhost’ identified by ‘密碼’;

(2) 新增資料庫
create database 資料庫名;

(3) 使用資料庫
use 資料庫名;

(4) 設定權限  ( 對某個資料庫的所有tables 設定給某個user )
grant ALL PRIVILEGES on 資料庫名.* to ‘使用者名’@’localhost’;

(5) 砍掉資料庫
drop database 資料庫名;

(6) 砍掉使用者
drop user ‘使用者名’@’localhost’;

mysql export import

如果要備分或是還原資料庫,遇到資料庫超過一定的大小,例如20MB之後,許多php版本的自動匯出/匯入程式都會出問題。因為php程式會受到 max_upload_size, max_execution_time等參數的限制。甚至連phpmyadmin也會有不管用的時候。

遇到這種時候,如果追求速度(不計難度),最有效率的方法,自然是透過ssh登入,直接下mysqldump指令來解決問題。

匯出: mysqldump -u 使用者名稱 -p –opt  -h localhost  資料庫名稱 > 檔案名.sql
匯入: mysql -u 使用者名稱 -p 資料庫名稱 < 檔案名.sql

然而,上述的方法,牽扯到使用ssh。這對很多只會用ftp的使用者是一大門檻。當然,也是有不需要ssh的解法。
(*) 匯出   backup your mysql database using php 

程式在這邊,使用方法:
(1) 修改這一行
backup_tables(‘localhost’,”使用者名”,”密碼”,”資料庫名”);
(2) 透過網頁來啟動這個php檔。
(3) 執行完後,這個php檔會自動生成一個mysql database的匯出檔。再用ftp下載即可。

這個程式看起來還滿複雜的,有些人心裡應該會有疑惑,明明php也可以直接呼叫 linux的指令吧? php可以做這件事,但是,在虛擬主機的環境中,為了安全性,這個直接呼叫 linux指令功能一向是被關閉的。所以才需要寫得這麼麻煩。

(*) 匯入  BigDump

使用方法如下:
(1) 在bigdump的官網上,下載bigdump.php這個檔案的壓縮檔。並且解壓縮。
(2) 修改bigdump.php的內容

$db_server = '主機名稱';(一般為localhost)
$db_name = '資料庫名稱';
$db_username = '使用者帳號';
>$db_password = '使用者密碼'

(3)  修改bigdump.php的內容

$filename = '檔案名稱.sql';
$ajax = true;
$linespersession = 3000; (設定每次還原幾筆資料)
$delaypersession = 5000; (每次間隔休息時間,設定5000為休息5秒鐘。)

(4) 將「bigdump.php」與「檔案名稱.sql」放入同一個資料夾,並上傳至伺服器。
最後打開瀏覽器輸入bigdump.php 所在網址,如: http://domain.tw/dump/bigdump.php

(5)當藍bar全滿後,出現「Congratulations: End of file reached, assuming OK」的訊息後,表示資料庫匯入完成。

如何安裝trellis help desk

(1) 下載 http://www.accord5.com/trellis/download
選擇 version 1.0.4

(2) 解壓縮之後,會有一個upload資料夾。
把這個upload資料夾的內容,上傳到public_html下

(3) 開啟 http://your-domain-name/install/
Introduction -> 點 Let’s begin
System Check -> 點 Continue
Installation Type -> 點 Continue with Guided

(4) Database Setup
填入必要的資料庫資訊,這個用cpanel來新增

(5) Create Admin Account
填入用戶名/密碼/Email 為…
TimeZone選GMT +8:00
DST Active 選 No ( 不啟用日光節約時間 )
其它不修改

(6) Configure General Settings
設定 Outgoing Email 為 support@your-domain-name

(7) Write Skin Files
按continue即可

(8) Finish Installation
按Complete installation

(9) 基於安全考慮,刪除install這個資料夾。

(10) 設定Email piping
參考
http://docs.accord5.com/Email_Piping
(a) 先設定好需要的email, 以這個case 是support@your-domain-name
(b) 在cpanel點Email Forwarders
點Add Forwarder
(c) Address的地方,填入 support
Destination地方,選 Pipe to a Program
然後填入 public_html/help/sources/pipe.php
(d) 點 Add Forwarder按鈕
// 如此設定之後,寄送到 support@your-domain-name的email會被送到helpdesk去處理。

(11) 設定語言
在 public_html/help/language/ 下,可以找到一個en,這就是它的英文的語言檔。
要翻譯的話,就是把這個檔中文化即可。

(12) 其它說明文件
http://docs.accord5.com/Main_Page

如何安裝drupal 6及中文化

(1) 下載drupal的安裝程式,解壓縮後,ftp上傳至public_html目錄下

(2) 下載中文檔http://drupaltaiwan.org/forum/20080504/2060

選 drupal-6.2-zh-hant-package.zip
下載後,把它解壓縮。可以得到三個資料夾
modules
profiles
themes
把這三個資料夾,上傳到public_html這個資料夾下。

(3) 開啟網頁,開始安裝, 就先英文安裝吧。

(4) 這時候,畫面會冒一些錯誤訊息。
只要在 public_html/sites/default/ 這個資料夾下,
複製 default.settings.php 為 settings.php

錯誤訊息按F5就會消失。

(5) 填入資料庫的訊息。
資料庫可以透過cpanel的功能來新增
然後,save and continue

(6) 最後會要你填入email,及admin的資料。
Default time zone 選 +0800
Clean URLs 選enabled
update notifications 要打勾

(7) 安裝完畢後,先來啟動中文化。
Administer > site configuration > languages 之後,
點選 Add language

然後,Language name:選 「Chinese 繁體中文」
按下 add language之後,就會啟動import

(8) 在 Administer > site configuration > languages
點選中文,為default ,並且save configuration

如何提升minecraft server的效能?

可以透過ramdisk來解決I/O的問題。具體的方法如下:

1  #yum install java-1.7.0-openjdk
2  https://minecraft.net/download
#wget https://s3.amazonaws.com/MinecraftDownload/launcher/minecraft_server.jar

Ramdisk
http://www.minecraftwiki.net/wiki/Tutorials/Ramdisk_enabled_server
(1)建新的user
#useradd mine

修改mine這個user的密碼
#passwd  mine

(2) 在/home/mine下,建下列的資料夾 minecraft  minecraft_backups  minecraft_ramdisk
#cd /home/mine
#mkdir minecraft
#mkdir minecraft_backups
#mkdir minecraft_ramdisk

然後用把ownership 改回給mine這個使用者
#chown -R mine.mine /home/mine/*

(3) 由附加檔案minecraft的內容
新增/etc/init.d/minecraft
#vim /etc/init.d/minecraft   ( 複製, 貼上 )
#chmod +x /etc/init.d/minecraft

(4) 修改 /etc/init.d/minecraft的內容,username改成mine。( 修正路徑 ) ( 下方的檔案內容中已經做此修改。)

(5) #vim /etc/fstab
增加一行:
tmpfs  /home/mine/minecraft_ramdisk tmpfs  defaults,size=512m      0       0

(6) 直接掛上ramdisk
#mount -t tmpfs none /home/mine/minecraft_ramdisk -o size=512m
下 df -h指令來檢查有沒有變化。
#df -h

(7) 修改 cronjobs
#crontab -e

*/5 * * * * /etc/init.d/minecraft disksaverun
20 */6 * * * /etc/init.d/minecraft backup

(9)加入 system V style的啟動script
#chkconfig –list
#chkconfig –add minecraft
#service minecraft start

(10) 第一次啟動minecraft server 之後,client是無法連上的。
這個原因是因為/home/mine/minecraft_ramdisk/server.properties 這個檔案裡,
online-mode=true , 這樣子的話,只有正版才可以玩。
要改成
online-mode=false,這樣子,破解版才可以玩。

(11) #service minecraft restart

 ////////////////// 下方是minecraft server 的system V init script //////////////
#!/bin/bash

# /etc/init.d/minecraft
# version 0.5 2011-09-24 (YYYY-MM-DD)

### BEGIN INIT INFO
# Provides: minecraft
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Should-Start: $network
# Should-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Minecraft server
# Description: Starts the minecraft server
### END INIT INFO

#Settings
SERVICE='minecraft_server.jar'
USERNAME="mine"
MCSTORE="/home/$USERNAME/minecraft"
MCPATH="/home/$USERNAME/minecraft_ramdisk"
CPU_COUNT=1
INVOCATION="java -Xmx2048M -Xms2048M -server -jar $SERVICE nogui"
BACKUPPATH="/home/$USERNAME/minecraft_backups/"
ME=`whoami`
as_user() {
if [ "$ME" == "$USERNAME" ] ; then
bash -c "$1"
else
su - $USERNAME -c "$1"
fi
}

mc_start() {
if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
then
echo "Tried to start but $SERVICE was already running!"
else
echo "$SERVICE was not running... starting."
cd $MCPATH
if [ ! -f "$MCPATH/minecraft_server.jar" ]
then
echo "Ram drive empty... prepping."
as_user "cp -R $MCSTORE/* $MCPATH/"
fi
as_user "cd $MCPATH && screen -dmS minecraft $INVOCATION"
sleep 7
if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
then
echo "$SERVICE is now running."
else
echo "Could not start $SERVICE."
fi
fi
}

mc_saveoff() {
if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
then
echo "$SERVICE is running... suspending saves"
as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP STARTING. Server going readonly...\"\015'"
as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-off\"\015'"
as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
sync
sleep 10
else
echo "$SERVICE was not running. Not suspending saves."
fi
}

mc_saveon() {
if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
then
echo "$SERVICE is running... re-enabling saves"
as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-on\"\015'"
as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP ENDED. Server going read-write...\"\015'"
else
echo "$SERVICE was not running. Not resuming saves."
fi
}

mc_stop() {
if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
then
echo "$SERVICE is running... stopping."
as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER SHUTTING DOWN IN 5 SECONDS. Saving map...\"\015'"
as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
sleep 5
as_user "screen -p 0 -S minecraft -X eval 'stuff \"stop\"\015'"
sleep 5
else
echo "$SERVICE was not running."
fi
if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
then
echo "$SERVICE could not be shut down... still running."
else
echo "$SERVICE is shut down."
fi
}
mc_update() {
if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
then
echo "$SERVICE is running! Will not start update."
else
MC_SERVER_URL=http://minecraft.net/`wget -q -O - http://www.minecraft.net/download.jsp | grep minecraft_server.jar\ | cut -d \" -f 2`
as_user "cd $MCPATH && wget -q -O $MCPATH/minecraft_server.jar.update $MC_SERVER_URL"
if [ -f $MCPATH/minecraft_server.jar.update ]
then
if `diff $MCPATH/minecraft_server.jar $MCPATH/minecraft_server.jar.update >/dev/null`
then
echo "You are already running the latest version of $SERVICE."
else
as_user "mv $MCPATH/minecraft_server.jar.update $MCPATH/minecraft_server.jar"
echo "Minecraft successfully updated."
fi
else
echo "Minecraft update could not be downloaded."
fi
fi
}

mc_backup() {
echo "Backing up minecraft files"
if [ -f $BACKUPPATH/MCBKUP_`date "+%Y.%m.%d"`.tar.gz ]
then
for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
do
if [ -f $BACKUPPATH/MCBKUP_`date "+%Y.%m.%d"`-$i.tar.gz ]
then
continue
else
as_user "cd $MCSTORE && tar zcf $BACKUPPATH/MCBKUP_`date "+%Y.%m.%d"`-$i.tar.gz ."
break
fi
done
else
as_user "cd $MCSTORE && tar zcf $BACKUPPATH/MCBKUP_`date "+%Y.%m.%d"`.tar.gz ."
fi
echo "Backup complete"
}

mc_disksaverun() {

if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
then
echo "Saving ramdrive to disk."
if [ ! -f $MCPATH/$SERVICE ]
then
echo "Error.. Minecraft not in ram"
else
if [ -d $MCSTORE/world2 ]
then
as_user "rm -r $MCSTORE/world2"
fi
if [ -d $MCSTORE/world ]
then
as_user "mv $MCSTORE/world $MCSTORE/world2"
fi

as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-off\"\015'"
as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
as_user "cp -R $MCPATH/* $MCSTORE/"
as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-on\"\015'"

if [ -d $MCSTORE/world2 ]
then
as_user "rm -r $MCSTORE/world2"
fi
fi
else
echo "Service is not running"
fi

}

mc_disksavehalt() {
echo "Saving ramdrive to disk."
if [ ! -f $MCPATH/minecraft_server.jar ]
then
echo "Error.. Minecraft not in ram"
else
if [ -d $MCSTORE/world2 ]
then
as_user "rm -r $MCSTORE/world2"
fi
if [ -d $MCSTORE/world ]
then
as_user "mv $MCSTORE/world $MCSTORE/world2"
fi

echo "Saving, screen session closed"
as_user "cp -R $MCPATH/* $MCSTORE/"

if [ -d $MCSTORE/world2 ]
then
as_user "rm -r $MCSTORE/world2"
fi
fi
}
#Start-Stop here
case "$1" in
start)
mc_start
;;
stop)
mc_stop
mc_disksavehalt
;;
restart)
mc_stop
mc_disksavehalt
mc_start
;;
update)
mc_stop
mc_backup
mc_update
mc_start
;;
backup)
mc_disksaverun
mc_saveoff
mc_backup
mc_saveon
;;
disksavehalt)
mc_disksavehalt
;;
disksaverun)
mc_disksaverun
;;
status)
if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
then
echo "$SERVICE is running."
else
echo "$SERVICE is not running."
fi
;;

*)
echo "Usage: /etc/init.d/minecraft {start|stop|update|backup|status|restart|disksaverun}"
exit 1
;;
esac

exit 0

如何在同一台機器執行兩個mysql資料庫的程式?

這個需求是這樣子產生的:某一個客戶需要客製化my.cnf檔。但是my.cnf檔的設定又會一次套用到所有的客戶上。

我查詢的關鍵字是 running multiple mysql instances on one server

參考資料 ( 這個參考資料只能當參考,我實測之後,有許多細節不同。)

修改的步驟:
(1) mkdir /var/lib/mysql2
chown mysql.mysql /var/lib/mysql2

(2) cp /etc/my.cnf /etc/my2.cnf
修改/etc/my2.cnf 的內容:
datadir=/var/lib/mysql2
port=3307

(3) cp /etc/init.d/mysql /etc/init.d/mysql2
修改/etc/init.d/mysql2 的內容:

  • 有mysqld_safe的這一行必須特別修改:       $bindir/mysqld_safe –datadir=”$datadir” –socket=”/var/lib/mysql2/mysql.sock” –pid-file=”$mysqld_pid_file_path” –port=”3307″ $other_args >/dev/null 2>&1 &
  • 修改所有的my.cnf 這個字串成為 my2.cnf
  • 修改 datadir=/var/lib/mysql 為 datadir=/var/lib/mysql2
  • 修改 lock_file_path=”$lockdir/mysql” 為 lock_file_path=”$lockdir/mysql2″

(4) chkconfig –add mysql2

(5) 理論上,要用mysql_install_db的指令來安裝新的default mysql database
mysql_install_db –datadir=/var/lib/mysql2 –defaults-file=/etc/my2.cnf –user=mysql
但是,實際上,我這樣子做之後,還是有問題,所以我後來沒使用這個指令。我把/var/lib/mysql2 這個資料夾清空之後,

cp -a /var/lib/mysql/performance_schema /var/lib/mysql2
cp -a /var/lib/mysql/mysql /var/lib/mysql2

(6) service mysql2 start

(7) mysql -h127.0.0.1 -P3307
如果可以順利登入的話,
mysql> show databases;

理論上,如果是只出現
mysql
information_schema
performance_schema

三個資料庫的話,這樣子就代表設置成功了!

mysql忘記root password

遇到這種不幸的情況,最簡單的方式,當然是使用WHM的功能,就可以簡單地重新設定。

然而,有時候,因為成本的因素,我們把cpanel/WHM的成本省下來的時候,就得用比較複雜的技巧來處理這個問題:

1  service mysql stop

2 修改 /etc/init.d/mysql
找到 mysqld_safe 這一行,加上 –skip-grant-tables

3 service mysql start

4  現在可以不用密碼登入了。
mysql  -u root
use mysql;
update user set password=password(‘yournewpasswordhere’) where user=’root’;
flush privileges;
exit;

5 service mysql restart

主機負載太高造成死當的解法

#!/bin/sh
# Bash script that checks apache:
# – If server load is higher than 20, kill web server
#
# Script to be ran as cronjob (every 5 minutes)
# */2 * * * * /path/to/httpd_check >> /path/to/httpd_check.log

echo “httpd checker running at ” `date`
check=`uptime | sed ‘s/\./ /g’ | awk ‘{print $10}’`
if [ $check -gt 20 ]
then
echo “Server load too high ($check), kill all the following program: httpd, php, mysqld”
killall httpd
killall php
killall mysqld
else
echo “Server load OK ($check)”
fi

echo “—————-“

如何設定cpanel單一帳戶的遠端自動備份?

cpanel有提供可以從外部呼叫的API,如果活用這些API,就可以做到:定時將帳戶的內容備分到遠端的ftp主機中。

實作方法:

(1) 準備好用來作遠端備分的ftp,並且在ftp的登入目錄裡,加上 /backup/AAA這個目錄,建議AAA的部分,取有意義一點的名稱,最好和網站的名稱相關。

(2)  在cpbackup.php 這個檔案之中,要先做對應的修改,總共需要改九行

// Credentials for cPanel account ( 這邊填原始,要被備分的cpanel account相關資訊 )
$source_server_ip = “”; // Server IP or domain name eg: 212.122.3.77 or cpanel.domain.tld
$cpanel_account = “”; // cPanel username
$cpanel_password = “”; // cPanel password
// Credentials for FTP remote site ( 這邊填遠端的ftp資訊 )
$ftphost = “”; // FTP host IP or domain name
$ftpacct = “”; // FTP account
$ftppass = “”; // FTP password
$email_notify = “”; // Email address for backup notification
//
// Delete any other backup before create new backup
$conn_id = ftp_connect($ftphost);
$login_result = ftp_login($conn_id, $ftpacct, $ftppass);
$logs_dir = “/backup/AAA“;
ftp_chdir($conn_id, $logs_dir);
$files = ftp_nlist($conn_id, “.”);
foreach ($files as $file){
    ftp_delete($conn_id, $file);
}
ftp_close($conn_id);
$api_args = array(
                           ‘passiveftp’,
                           $ftphost,
                           $ftpacct,
                           $ftppass,
                           $email_notify,
                            21,
                            /backup/AAA
                         );

(3) 用ftp 上傳檔案
在account的public_html  下,放上這兩個檔案,( 檔案在此可以下載,選cpbackup script )
xmlapi.php
cpbackup.php

在這邊要特別注意一點:
backup這個功能,因為相對消耗資源,放在public_html下,是說可以透過browser來啟動,很方便。但是,如果是很容易被攻擊的網址。就最好不要放在這麼明顯的地方。

(4) 此處,有兩種方法可以執行這個php來做檔案的備分:
(a)  在browser上, http://你的域名/cpbackup.php
(b)  用該account的id/pw ( 不要用root的 )   ssh 登入這個account, 然後下指令     php -q /home/你的帳戶名稱/public_html/cpbackup.php 

理論上,出現的message應該是長成這樣子:

Warning: ftp_delete(): Could not delete .: Invalid argument in /home/blog66rr/public_html/cpbackup.php on line 28
Warning: ftp_delete(): Could not delete ..: Invalid argument in /home/blog66rr/public_html/cpbackup.php on line 28
{“apiversion”:”1″,”type”:”event”,”module”:”Fileman”,”func”:”fullbackup”,”source”:”module”,”data”:{“result”:””},”evenls -l /home/blog66rr/public_html/cpbakcup.php

這樣子,資料應該就會備分到你的ftp了。

另外,週期性執行不一定需要。如果說只做一次的話,就不用這麼麻煩。用這個方式,因為是透過ftp的關系,比較不會受到browser 斷線的問題。ftp比較適合處理這種大型的backup檔。

(5) 用該account的id/pw ( 不要用root的 )   ssh 登入這個account
下指令:
crontab -e

這樣子是設定每天備分:
0 0 * * *   php -q /home/你的帳戶名稱/public_html/cpbackup.php
這是每週備分
@weekly    php -q /home/你的帳戶名稱/public_html/cpbackup.php
這是每月備分
@monthly  php -q /home/你的帳戶名稱/public_html/cpbackup.php

(6) 最後還有一個但書。在用來backup的ftp這邊,會有一個問題:檔案愈積愈多。所以在用來backup的ftp主機這邊。最好也設置工作排程 ( cronjob )

find /path/to/files* -mtime +5 -exec rm {} \;

這個指令的意思是:到 /path/to/files* 這邊,找出超過5天沒有使用的檔案,將它刪除。

 

(備註:unethost.com虛擬主機,已有每日自動異地備份)

主機商選購指南

本篇文章是一篇帶有強烈置入性行銷的文章。請大家多多包涵。

作為一個主機商,由於客戶中有許多常常三天兩頭有被DDoS, 被放木馬之類的問題,本公司在累積了無數的經驗(?客訴)之後, 對於安全性的議題有著異常的執著與重視。要提高安全性,確保php程式碼沒有漏洞的部分,是客戶端在管的。但是,要確保php的版本沒有漏洞的部分,則是主機商的事。

升級php, 升級mysql, 升級apache, 更換ip,這一類的事,由於會影響到客戶的程式,對於主機商而言算是苦差事。但是,不升級也不行。不升級的話,漏洞就會一直存在。是否應該升級?何時最好一定要升級,其實這個問題,也是有客觀的參考。

以美國的五大主機商為例子,hostgatorwebhostingpad都已經升級PHP 5.3了。( 這些資訊,我是直接用官網去查的 )

而台灣地區,搜尋「虛擬主機」這個關鍵字,google出來第一頁的主機商之中,大間的5、6家裡,幾乎都還是使用PHP 5.2.17版。(台灣的同胞怎麼這麼不重視資訊安全啊? 這不是已經應該要升級很久了嗎? )只有一家有升級PHP 5.3。這一家,呃,當然不是敝公司,因為unethost.com的google rank在很多頁之後。但是,本公司升級PHP 5.3是老早以前的事。官網的主機已經升級到 PHP 5.3.22版了。

最後要在這邊順便講解一下,如何看php的版本。如果是用chrome來當browser 的話,先按Ctrl + shift + i,選Network,按F5,之後,點選一個php網頁。看到最下方,應該會有一串字串 X-Powered-By:,例如:

X-Powered-By: PHP/5.3.22

這就是了!