2014年8月6日 星期三

PHP 儲存檔案突破 /var/www/html

三年前,由於 NAS 已不勝負荷,於是買了一台 PC 並安裝 CentOS 作為網頁服務器。當時對 Linux 的知識有限,不知道原來 /var 及 /home 是在不同的硬碟區間,導致今天浮現出空間不足的問題。

一直以來都認為 2TB 的硬碟空間十分足夠,三年來不同項目才用了接近 1TB,理應還能支持多三年的活動。可是,昨天發現 MySQL 出了狀況,使用 phpMyAdmin 也無法登入。腦內完全沒有概念,不知道如何修理,唯有嘗試重啟。當然重啟解決不了問題。之前已經知道區間的問題存在,但仍有 10GB 空間,新項目亦是放在 /home 內,盡量減低空間的消耗,以不影響日常的運作空間。於是靈機一觸,嘗試清理一下不用的檔案,便發現 MySQL 能夠回復正常。幸好這個方法能解決問題,不然一定搞得很久。

能把 10GB 燃燒到盡,是因為新同事把兩個項目都放在 /var 內,而這兩個項目每日都會有大量的圖片上傳到服務器。為解決燃眉之急,於是把這些圖片都搬到 /home 內。繼而把 PHP 程式內的圖片目錄試圖改到 /home 之內。可是卻出現了問題:


原來 PHP 是無法把檔案儲存在 /var/www/html/,亦即是網頁服務器根目錄之外。經過一輪嘗試之後,找到解決方法:

1. 把原本的儲存目錄移走或刪除

2. 在 PHP 程式的目錄加入新的儲存目錄的捷徑,並以原來名稱命名
    ln -s /home/www/html/project_xxx/signatures/ signatures

3. 為新的儲存目錄加入權限 777

4. 最重要是執行以下命令
    chcon -R -t httpd_sys_content_t /home/www/html/project_xxx/signatures/

這樣就能把圖檔由 /var 改為儲存在 /home 了。

1 則留言:

Ho Wang 提到...

都是 SELinux 的錯...