選單
返回文章列表

凌晨三點的 500 Error:一份關於網站修復的過期清單

E
Eric
查看更多文章
2026 年 02 月 13 日
9 次瀏覽
永久公開文章
此文章由作者發布於 Post2 公開部落格,所有人皆可閱覽
凌晨三點的 500 Error:一份關於網站修復的過期清單

序幕:時間的標記

二零二四年的某個深夜,牆上的時鐘滴答滴答地走著,頻率快得讓人心慌。我坐在螢幕前,看著那個冰冷的、沒有溫度的「500 Internal Server Error」。那一刻,我突然想起,有人曾經對我說過,如果每一行代碼都有一個保質期,那麼網站的出錯,大抵就是因為某些東西過期了。可能是內存,可能是權限,也可能是那份當初寫代碼時的熱情。

我點了一根煙,雖然我不抽煙,但我需要一點煙霧來模糊這慘白的螢幕。修正一個網站,有時候跟挽回一段感情很像。你以為只要重啟一下就能回到過去,其實,有些東西一旦斷了,就再也連不上了。但我還是得試試,因為在這個世界上,並不是所有東西都有備份,但我希望我的網站有。

凌晨三點的 500 Error:一份關於網站修復的過期清單
凌晨三點的 500 Error:一份關於網站修復的過期清單


第一章:緩存,是記憶的殘影

我對自己說,在動手之前,先冷靜一分鐘。這一分鐘,我會看著瀏覽器的刷新按鈕。我以前以為一秒鐘很快就會過去,但當你在等待一個 404 頁面變成首頁時,那一秒鐘可以變得很長。

修復清單的第一件事,是清除緩存。緩存這東西很奇怪,它讓你以為一切都還在原位,讓你以為時間靜止在最美好的那一刻。但事實上,那些數據早已腐爛。如果你不把它們清空,你永遠看不見現實的真相。我打開瀏覽器的開發者工具,勾選了「Disable Cache」,那一刻,我覺得自己像是在剝開一個過期的罐頭。如果緩存可以保存一個人的記憶,我希望它永遠不要過期;但如果是一個出錯的網站,我寧願它從未存在過。

第二章:日誌,那些沒說出口的話

如果一個網站真的想告訴你它為什麼不開心,它會寫在 error_log 裡。我透過 FTP 登入服務器,目錄深處隱藏著那些不為人知的秘密。尋找錯誤日誌的過程,就像是在翻閱前任留下的舊信件。每一行代碼的報錯,都是一次無聲的控訴。

我看到了一行:PHP Fatal error: Allowed memory size of 134217728 bytes exhausted。原來,是內存不夠了。每個人都有極限,網站也是。它承載了太多的請求,太多的期待,最終在某個不經意的瞬間,崩潰了。我把 memory_limit 從 128M 改成了 256M。我給了它更多的空間,但我不知道,這份空間是否足以讓它重新呼吸。

第三章:插件與主題,誰是那個多餘的人?

有時候,網站的出錯並不是因為它本身不好,而是因為它遇見了不該遇見的人。在 WordPress 的世界裡,這叫「插件衝突」。我開始一個一個地禁用插件。這是一個殘酷的過程,就像是在一場派對上,你得逐一請走你的朋友,直到發現到底是誰弄壞了音響。

我關掉了最後一個剛安裝的 SEO 插件,網站突然恢復了正常。那一刻,我並沒有感到高興,反而覺得有些悲哀。原來,有些東西雖然看起來對你有好處,但它的存在,本身就是一種錯誤。我們總是習慣往自己的生活裡加東西,以為越多越好,卻忘了最簡單的道理:有時候,少,才是唯一的救贖。我對著那個被禁用的插件說了一聲「對不起」,然後徹底刪除了它。我們之間,不適合再見面。

第四章:數據庫,最深處的傷痕

如果插件是皮膚,那麼數據庫就是骨骼。當骨骼出了問題,整個人就垮了。我進入 phpMyAdmin,看著那些密密麻麻的表(Tables)。有些表顯示「In Use」,有些表則顯得異常臃腫。我執行了「Repair Table」,看著螢幕上的進度條緩慢移動。

我一直在想,如果人的大腦也可以進行數據庫修復,那該多好。把那些痛苦的、出錯的、冗餘的記憶全部清理掉,只留下那些閃閃發光的瞬間。但代碼可以修復,數據可以優化,而人呢?人只能帶著那些錯誤的索引,繼續走下去。當最後一個表顯示「OK」的時候,我喝了一口已經冷掉的咖啡。網站還是沒好,看來問題比我想像中要深。

第五章:權限,誰能進入誰的房間?

我開始檢查文件權限。755,644。這些數字像是某種神秘的電碼。在 Linux 的世界裡,權限決定了一切。如果你沒有權限,你連看一眼的資格都沒有。我發現 .htaccess 文件的權限變成了 000,難怪誰也進不去。

我把它改回了 644。這就像是重新打開了一扇緊閉的門。我曾經以為,只要我足夠努力,就沒有進不去的門。後來我才明白,有些門是從裡面鎖上的。網站的權限錯亂,往往是因為被入侵,或者是某次不經意的誤操作。我重新審視了那些權限設置,確保每一扇門都待在它該待的位置。安全,有時候就是一種適度的距離感。太近了會受傷,太遠了會疏離。

第六章:版本,時間的錯位

PHP 7.4 還是 PHP 8.2?這是一個關於時代的問題。有些代碼注定留在過去,如果你強迫它活在未來,它就會死給你看。我檢查了服務器的環境配置,發現這台主機偷偷升級了 PHP 版本,而我的舊代碼,還停留在那個已經過期的年代。

我嘗試著修改那些過時的函數,把 mysql_connect 改成 mysqli_connect。這是一個漫長的修補過程,就像是在縫補一件破舊的旗袍。你明明知道它已經不再流行,但你就是捨不得丟掉。每一處修改,都是對過去的一種背叛,也是對現實的一種妥協。最終,代碼跑通了。這不是因為我寫得有多好,而是因為我學會了如何跟時間玩這場文字遊戲。

第七章:備份,如果時間可以倒流

如果這一切都失敗了,我還有最後一招:還原備份。我手裡握著那個昨天的壓縮檔,那是我的後路。我以前覺得備份很麻煩,總覺得明天還會跟今天一樣。但現在我知道了,世界上最奢侈的東西,就是「昨天」。

我點擊了「Restore」。螢幕開始閃爍,數據開始回流。這是我跟時間的最後一次談判。我願意放棄今天所有的更改,只為了換回一個正常的昨天。當進度條到達 100% 的時候,我按下了 F5。網站重新出現在我面前,像什麼都沒發生過一樣。它是那麼完美,那麼安靜,彷彿剛才那三個小時的掙扎,只是我的一場幻覺。

終章:不留痕跡的修復

天快亮了。窗外的街道開始有了聲音。我關掉了編輯器,清理了桌面上的煙灰。網站修好了,但我的心裡卻空落落的。這份修復清單,我把它存在了一個名為「不要打開」的文件夾裡。我知道,總有一天我還會用到它,但我希望那一天永遠不要到來。

我以前以為一分鐘很快就會過去,其實是可以很長的。在那三小時裡,我修復了內存,清理了插件,優化了數據庫,甚至跟時間玩了一場倒流的遊戲。但現在我看著運行的網站,我就告訴自己,我要從這一分鐘開始,忘掉這場錯誤。畢竟,在互聯網的世界裡,沒有人會在意一個網站曾經崩潰過,他們只在意,當他們打開它時,它是否還在那裡。

這就是我的修復清單。沒有華麗的辭藻,只有無盡的深夜和一點點不甘心。如果你也遇到了一個出錯的網站,記得,先給自己一分鐘。那一分鐘,不屬於代碼,只屬於你自己。

凌晨三點的 500 Error:一份關於網站修復的過期清單
凌晨三點的 500 Error:一份關於網站修復的過期清單


這篇文章由 Eric 發布

Eric 的其他文章