2012年2月9日 星期四

PHP 5.3.x 的 strtotime() 時區設定 警告訊息修正

Debian Linux 使用 testing 的話, 若於上星期有做過 dist-upgrade 的話, 就會發現 PHP 已經被升級到 5.3.1-5, 而且出現一堆警告訊息.
我遇到的有下面這三種錯誤訊息:
  1. PHP Warning:  strtotime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Chongqing' for 'CST/8.0/no DST' instead in /tmp/a.php
  2. PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626/imagick.so' /usr/lib/php5/20090626/imagick.so: cannot open shared object file: No such file or directory in Unknown on line 0
  3. PHP Deprecated:  Comments starting with '#' are deprecated in /etc/php5/cli/conf.d/imagick.ini on line 1 in Unknown on line 0

strtotime() 修正

  • PHP Warning:  strtotime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Chongqing' for 'CST/8.0/no DST' instead in /tmp/a.php
strtotime() 出現的這個警告是要我們先指定正確的時區(Timezone), 再來使用這個 function.
解法下述幾種 (挑其一即可, 建議用 1 或 3 的方法)
  1. 於 PHP 檔案內使用 date_default_timezone_set()
    ex:
    date_default_timezone_set('Asia/Taipei');
    echo strtotime('2010-03-01');
    ?>
  2. 設定 php.ini
    vim /etc/php5/apache2/php.ini # 於 php.ini 的 date.timezone
    ;date.timezone =
    改成
    date.timezone = "Asia/Taipei"
  3. 設定 php.ini (於 Debian 比較建議這樣做, 就不用去分別改 apache / cgi / cli 的 php.ini)
    vim /etc/php5/conf.d/date_timezone.ini # 於此檔案加下述
    date.timezone = "Asia/Taipei"

PHP Startup: Unable to load dynamic library 修正

  • PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626/imagick.so' /usr/lib/php5/20090626/imagick.so: cannot open shared object file: No such file or directory in Unknown on line 0
發現下述這幾個都不見了 (php5-imagick, php5-mhash, php-apc)
  • /usr/lib/php5/20090626/apc.so
  • /usr/lib/php5/20090626/mhash.so
  • /usr/lib/php5/20090626/imagick.so
  • php5-mhash 已經包進去, 不需另外安裝, imagick、apc 目前還沒看到.
解法
  • rm /etc/php5/cli/conf.d/apc.ini /etc/php5/cli/conf.d/imagick.ini /etc/php5/cli/conf.d/mhash.ini

Comments starting with '#' are deprecated 修正

  • PHP Deprecated:  Comments starting with '#' are deprecated in /etc/php5/cli/conf.d/imagick.ini on line 1 in Unknown on line 0
cat /etc/php5/cli/conf.d/imagick.ini # 第一行有個註解 "#"
解法
  • 在 PHP 5.3.x 這些 ext 的註解已經不建議使用 "#", 所以將這個註解拿掉, 或者將 "#" 改成 ";" 開頭即可. (開頭 ; 也是註解的意思)

2012年2月7日 星期二

Linux 掛載 USB 隨身碟

建立掛載點

mkdir /mnt/usb

查看目前磁碟的狀態
fdisk -l

掛載usb
mount /dev/sdc /mnt/usb

卸載usb
umount /dev/sdc

Linux掛載USB隨身碟for backup

mount 指令為將周邊裝置掛入的指令


格式:mount -t 檔案系統類型 -o 選項 裝置 掛入點

範例:mount -t iso9660 /dev/hdb /mnt/cdrom

——–若硬碟檔案系統為fat32

mount -t vfat /dev/hdb# /mnt/usb



ps. NTFS系統,Linux不支援,要另外下載driver(至少我的server是看不到的)

<準備工作>

1. mkdir /mnt/usb

2. 格式化usb隨身碟或是usb界面的硬碟

3. fdisk –l 查看目前磁碟的狀態(這樣才可以找到正確得usb編號#)

———————————–

* 掛載隨身碟



請拿出你的隨身碟並插入 Linux 主機的 USB 槽中!注意,你的這個隨身碟不能夠是 NTFS 的檔案系統喔! 接下來讓我們測試測試吧!



範例五:找出你的隨身碟裝置檔名,並掛載到 /mnt/flash 目錄中

[root@www ~]# fdisk -l

…..中間省略…..

Disk /dev/sda: 8313 MB, 8313110528 bytes

59 heads, 58 sectors/track, 4744 cylinders

Units = cylinders of 3422 * 512 = 1752064 bytes



Device Boot Start End Blocks Id System

/dev/sda1 1 4745 8118260 b W95 FAT32

# 從上的特殊字體,可得知磁碟的大小以及裝置檔名,知道是 /dev/sda1



[root@www ~]# mkdir /mnt/flash

[root@www ~]# mount -t vfat -o iocharset=cp950 /dev/sda1 /mnt/flash

[root@www ~]# df

Filesystem 1K-blocks Used Available Use% Mounted on

…..中間省略…..

/dev/sda1 8102416 4986228 3116188 62% /mnt/flash

如果帶有中文檔名的資料,那麼可以在掛載時指定一下掛載檔案系統所使用的語系資料。 在 man mount 找到 vfat 檔案格式當中可以使用 iocharset 來指定語系,而中文語系是 cp950 , 所以也就有了上述的掛載指令項目囉。



萬一你使用的是隨身硬碟,也就是利用筆記型電腦所做出來的USB磁碟時,通常這樣的硬碟都使用 NTFS 格式的~ 怎辦?沒關係,可以參考底下這個網站:(註8)



* NTFS 檔案系統官網:Linux-NTFS Project: http://www.linux-ntfs.org/

* CentOS 5.x 版的相關驅動程式下載頁面:http://www.linux-ntfs.org/doku.php?id=redhat:rhel5



將她們提供的驅動程式捉下來並且安裝之後,就能夠使用 NTFS 的檔案系統了! 只是由於檔案系統與 Linux 核心有很大的關係,因此以後如果你的 Linux 系統有升級 (update) 時, 你就得要重新下載一次相對應的驅動程式版本喔!

———————————-

檔案系統

minix Linux 最早使用的檔案系統

ext2 Linux 目前使用的檔案系統

msdos MS-DOS 的 FAT

vfat Windows 95 的 FAT32

nfs 網路檔案系統

iso9660 光碟格式

ntfs Windows NT 4.0 的檔案系統

hpfs OS/2 的檔案系統

auto 自動偵測

============================================

NTFS 與 FAT 及 FAT32 的比較

============================================

NTFS 執行 Windows 2000、Windows XP 或 Windows Server 2003 系列產品的電腦,可以存取本機 NTFS 磁碟分割上的檔案。執行 Windows NT 4.0 搭配 Service Pack 5 或更新版本的電腦可能可以存取部份檔案。其他作業系統則不允許進行本機存取。

雖然檔案無法大於檔案所在的磁碟區或磁碟分割,最大的檔案大小仍可到 16 TB 減 64 KB。



FAT32若要存取本機磁碟分割上的檔案,只能透過 Windows 95 OSR2、Windows 98、Windows Millennium Edition, Windows 2000、Windows XP,以及 Windows Server 2003 系列產品進行。

檔案大小上限為 4 GB。





http://linux.vbird.org/linux_basic/0230filesystem.php (Vbird)



http://technet.microsoft.com/zh-tw/library/cc779002%28WS.10%29.aspx



http://www.hoyo.idv.tw/software/OpenSource/command/mount.htm



http://blog.xuite.net/wizardyuy/pcblog/13024537



http://blog.blueshop.com.tw/miceyen/archive/2005/12/28/15676.aspx



掛載USB隨身碟

新增一個資料夾給隨身碟用例如 mkdir /mnt/usb, 再 mount /dev/sda1 /mnt/usb 即可
cd /mnt/usb 就可以讀usb內的資料了
註 : 可以下dmesg 看usb 使用哪一個名稱 sda1,sda2 or sda sdb

Apache配置之URL重寫

wordpress中的永久連結需要Apache支援url重寫,於是配置了一下。

1、修改apachehttpd.conf文件,將下面語句前的#去掉
#LoadModule rewrite_module modules/mod_rewrite.so
2、修改apachehttpd.conf檔,將對應的節中的AllowOverride None 改為AllowOverride All,如

Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
3、在需url重寫的目錄下建立.htaccess檔,wordpress在開啟永久連結後會只能生成,內容如下:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
效果就是如本文連結http://witmax.cn/apache-url-rewrite.html,其實並不存在這個目錄,而是通過url重寫由index.php來解析支持。

2012年2月6日 星期一

Drupal 備份與轉移



備份壓縮,相對路徑的範例:
tar -jpcv -f sites.tar.bz2 -C ~/public_html sites  (壓縮public_html/sites之下的資料)

解壓縮則是:
tar -jpxv -f sites.tar.bz2 -C ~/public_html/twtcsl  (不用放sites,會解成sites這個目錄)

MySQL:
備份
mysqldump -u 使用者 -p 資料庫> drupal.sql

還原
mysql -u 使用者 -p 資料庫 < drupal.sql

改sites/default/settings.php這個檔
$db_url = mysql://xxxx:xxxx@localhost/drupal';

clean_url 的問題。參考:http://drupal.org/node/367616

簡單說就是用回複雜的方式,要登入就是 網址?q=user  然後不管跳到哪頁都要加?q=,把clean_url先改掉,或是主機直接設定好就行。

主機設定clean_url的方式:http://drupal.org/node/15365

2012年2月2日 星期四

Linux全系統的備份與還原(系統轉移)

摘自Ubuntu的WIKI

1.以最高權限執行
sudo su -

2.切換到根目錄

cd /


3.使用tar指令

tar -cvpzf /路徑至備份檔.tgz   備份目錄 
tar -cvpzf /路徑至備份檔.tgz  --exclude=排除目錄1 --exclude=排除目錄2  --exclude= /路徑至備份檔.tgz (產生的備份檔當然要排除)  /
備份目錄
例子:
tar -cvpzf /backup.tgz   --exclude=/proc   --exclude=/lost+found  \
 --exclude=/backup.tgz   --exclude=/mnt --exclude=/sys /

分析:
tar -cvpzf /backup.tgz --exclude=/proc --exclude=/lost+found --exclude=/backup.tgz --exclude=/mnt --exclude=/sys /
就是中間加上排除的部分而己,記得產生的備份檔一定要排除 ,否則就沒完沒了了!

tar的參數
c - 新建一個備份文檔
v - 詳細模式, tar程式將在屏幕上實時輸出所有信息。
p - 保存許可,並應用到所有文件。
z - 採用‘gzip’壓縮備份文件,以減小備份文件體積。

應排除的目錄
/proc、/lost+found、/sys、/mnt、/media
另外額外分割區的東東也可以看看要不要加入


4.到新的機器還原
tar -xvpzf /backup.tgz -C /
mkdir /proc /lost+found /mnt /sys



看到這裡突然覺得,也可以利用這種方式來拷貝系統,否則替老師桌機
一台一台的灌Linux還是很累人的。
我的想法是將(a)做好的樣版機,(b)依上述步驟1-3備份成檔案後燒到DVD上

(c)再配合LiveCD開機將要安裝的機器(d)作好硬碟分割並格式化

(e)再將備份檔解到 /分割區內並建好排除的目錄

(f)再chroot 到新的分割區

(g)執行grub-install  /dev/sda (或grub-install  /dev/hda )將磁區資訊寫到MBR