在 PHP 4 時代,開發團隊在原始碼 logos.h 中內建一張 GIF 圖片,編碼為位元組陣列 php_egg_logo[]。當呼叫 phpinfo() 並帶入特定查詢字串 ?=PHPE9568F36-D428-11d2-A769-00AA001ACF42 時,頁面會顯示一位「嘴含兩根菸的胖子」動畫,而非標準 PHP Logo。
<?php
// env.php
phpinfo();
?>
瀏覽器存取:
https://your-domain/env.php?=PHPE9568F36-D428-11d2-A769-00AA001ACF42
logos.h 定義:
unsigned char php_egg_logo[] = {
71, 73, 70, 56, 57, 97, 130, 0, 67, 0,
213, 255, 0, 0, 0, 0, 152, 138, 142, 104,
95, 105, 89, 86, 93, 160, 151, 174, 102, 101,
136, 164, 163, 205, 174, 173, 213, 102, 102, 153,
99, 99, 149, 102, 102, 152, 96, 96, 143, 90,
90, 134, 82, 82, 115, 87, 87, 121, 80, 80,
108, 74, 74, 100, 110, 110, 147, 95, 95, 127,
149, 149, 198, 118, 118, 157, 67, 67, 89, 144,
144, 191, 128, 128, 169, 137, 137, 180, 155, 155,
197, 186, 186, 227, 209, 209, 247, 242, 242, 254,
// ... 共數百個位元組,此處省略 ...
0, 59, 0
};
前三個位元組 71, 73, 70 即 ASCII "GIF",確認為 GIF89a 格式。
phpinfo() 解析查詢字串,若匹配特定 GUID,改輸出 php_egg_logo 而非標準 Logo。PHPE9568F36-D428-11d2-A769-00AA001ACF42 為開發團隊內部定義的 Easter Egg 金鑰。phpinfo() 不再回應此參數,標準 Logo 改為 SVG 向量圖。| 版本 | 觸發方式 | 內容 |
|---|---|---|
| PHP 4/5 | ?=PHPE9568F34-D428-11d2-A769-00AA001ACF42 | Zend Engine Logo(獅子) |
| PHP 5.3+ | ?=PHPE9568F35-D428-11d2-A769-00AA001ACF42 | PHP Logo(大象) |
| 所有版本 | ?=PHPE9568F36-D428-11d2-A769-00AA001ACF42 | 胖子雙菸(本文主角) |
生產環境應關閉 expose_php = Off(php.ini),並限制 phpinfo() 存取權限,避免洩露版本、模組、環境變數等敏感資訊。彩蛋本身無害,但可作為偵測 PHP 版本的指標之一。
PHP 彩蛋見證了開源社群的幽默與創意。雖然現代版本已移除,但這段歷史提醒我們:軟體不僅是工程產物,也承載著開發者的個性與文化。下次看到 phpinfo(),不妨試試舊版參數,或許能喚起一段懷舊時光。