Category: PHP

PHP 查詢 IP 所屬國家

要查詢 IP 所屬國家, 一般上會用 IP 資料庫查詢, 網上也有一些網站可以免費查詢, 但如果想在自己的 PHP 程式, 查詢 IP 所屬國家, 便需要下載一些 IP 轉國家的資料庫, 有付費及免費。 另一個較簡單方便的做法, 是使用 API 查詢, 以下會示範使用 freegeoip.net 的免費服務查詢 IP 所屬國家的方法。 freegeoip.net 把供 CSV, …

解決 PHP 錯誤 – Allowed memory size exhausted

PHP 其中一個常見的錯誤 “Allowed memory size exhausted”,這是由於執行的 PHP 程式使用的記憶體超出 PHP 設定的限制,要解決可以很簡單地修改 php.ini 檔案內的 memory_limit 選項即可。 首先開啟 php.ini,在 RHEL 及 CentOS 用 yum 安裝的 PHP,預設路徑是 /etc/php.ini: # vi /etc/php.ini 找到 “memory_limit” …

查詢已安裝的 PHP 版本

由於 PHP 各版本的寫法都略有不同,很多時都需要查詢系統內的 PHP 版本,或者系統管理員也有時會需要檢查 PHP 版本,要查詢系統內的 PHP,分別可以用 PHP 程式或者 CLI 指令模式完成,以下分別看一看幾種不同方法。 CLI 在 CLI 查詢 PHP 版本十分簡單,用 php 指令便可以: $ php –version 或 $ php-cgi –version 執行後會有類似的輸出: PHP …

強制 PHP 顯示錯誤訊息

很多主機基於保安理由, 將 PHP 執行時的錯誤訊息隱藏, 當 PHP 程式執行時遇到錯誤, 即使是 run time error 這類錯誤, 都只會顯示空白內容。 原因是在 php.ini 設定了這兩行: display_errors = Off error_reporting = Off 上面兩個設定, 只要其中其中一個設定成 Off, 都不會顯示錯誤訊息, 這樣對於程式除錯很麻煩, 要暫時顯示 PHP …

禁止個別 VirtualHost 或目錄使用 PHP mail() 函式

PHP 的 disable_functions 選項可以停用某些特定的 PHP 函式, 主要是基於安全理由, 將一些對系統有威脅的函式停用, 但 disable_functions 必須透過 php.ini 設定, 因為如果可以在 httpd.conf 或 .htaccess 設定, 使用者便很容易將停用的函式開啟。 之前遇到一個情況, 要將個別 VirtualHost 的 mail() 函式停用, 但主機內其他 VirtualHost 仍要繼續開啟 mail()。雖然 …

PHP 5.4 或以上重現 Register Globals

很久以前的 PHP 預設開啟 Register Globals 選項, 這樣寫程式就很方便, 但這個方便也帶來安全性問題, 所以後來 PHP 預設會將 Register Globals 關閉, 對於一些要開啟 Register Globals 的程式, 在不修改程式碼的情況下, 還可以透過修改 php.ini 或 .htaccess 的方法解決。 但在 PHP 5.4 開始, PHP …

解決 WordPress 的 xmlrpc.php DDOS 攻擊

XML-RPC 是 WordPress 的 API, 給開發者開發手機 Apps, 桌面應用程式或其他服務時, 可以跟 WordPress 溝通, 從遠端能達到很多需要登入 WordPress 後台才能做的工作。xmlrpc.php 則是負責這個 API 的檔案, 而很多針對 WordPress 的 DDOS 攻擊也是針對這個檔案。 早前在一台 VPS 上面, MySQL 的使用資源很高, 停止 Apache …

RHEL 7 / Centos 7 yum 安裝 PHP 5.5, 5.6, 5.7

我喜歡用 RHEL 及 CentOS 的最主要原因, 是因為 Redhat 對產品的支援周時長達 10 年, 對於生產環境的主機這點很重要, 不用經想準備為系統作升級。但 CentOS 有一個缺點, 就是預設的套件版本較舊, 像 PHP 版本, 除非手動編譯原代碼安裝, 否則可能到系統的生命周期完結, 也不會作主要升級。 現在 CentOS 7.3 的預設 PHP 版本為 5.4.16, 要在 …