在本文中,我想向您介紹透過編輯 php.ini 檔案中的「disable_functions」指令來啟用或停用 php 本機函數的逐步過程。
有時需要自訂伺服器上的預設 PHP 配置,以適應系統與生產環境的兼容性。
我是 Inspector.dev 的作者,Laravel 和 Symfony 的即時監控套件。該套件使用 pro_open 和 proc_close php 本機函數來非同步執行從伺服器到 Inspector API 的資料傳輸。
它也可以配置為使用預設啟用的 PHP 原生 CURL 函數,但在這種情況下,它會像其他軟體包(如 Sentry、Bugsnag 等)一樣以同步方式將監控資料傳送到 Inspector。意味著您的應用程式可能會變慢一點,因為 php 引擎需要等待才能結束與客戶端的連線。
最近一些開發人員聯繫我,因為他們的 php 配置中禁用了 proc_open 和 proc_close 函數,因此他們需要解鎖它們才能利用非同步資料發送。
這種情況非常罕見,但我決定編寫本教程作為此用例的支援資源。
php.ini 檔案是 PHP 的設定檔。該檔案包含稱為“指令”的鍵/值對清單。指令分為幾個部分,儘管這些主要用於組織目的。
當 PHP 啟動時,它會讀取該檔案並設定內部資料結構來儲存配置。在整個執行過程中,PHP 會參考這些內部資料結構來確定它在許多關鍵領域的行為方式,例如:錯誤處理和日誌記錄、資源限制(記憶體、執行時間)、檔案上傳、資料庫連線等等。
對於也想知道的人:即使沒有 php.ini 文件,PHP 也可以工作,它只會將預設值應用於所有指令。
對於不熟悉的人,這裡是 php.ini 檔案的範例:
https://github.com/php/php-src/blob/master/php.ini-product
編輯 php.ini 文件,我們可以停用本機 PHP 函數,您將無法在 PHP 程式碼中呼叫這些函數。
有時,此功能用於限制共享託管環境中某些功能的使用,因為錯誤使用這些功能可能會給其他使用者帶來安全問題。像 exec() 這樣的函數通常會被停用,但有時伺服器供應商過於保守,可能會停用日常程式設計任務所需的函數。
在電腦的終端機中執行以下命令以取得檔案的目前位置(適用於 Win 和 Unix):
php --ini
常用位置:/etc/php.ini、/etc/php/8.x/php.ini(將 x 替換為您安裝的版本號碼)
要在伺服器上編輯文件,我更喜歡使用任何 Unix 機器上都可用的 vim 編輯器。
// Use the file path from the command above sudo vim /etc/php.ini
向下捲動至「disable_functions」指令。它應該位於文件的前半部分,並包含以逗號分隔的函數列表。
disable_functions=exec,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
要載入新配置,您需要重新啟動 PHP。下面的說明應該適用於大多數伺服器。您最終可以在 Google 上搜尋特定作業系統。
// Change the version of the PHP with what is in use in your machine sudo systemctl restart php8.2-fpm.service
更多技術文章,您可以在 Linkedin 或 X 上關注我。
Inspector是專為軟體開發人員設計的程式碼執行監控工具。您無需在伺服器層級安裝任何內容,只需安裝 Laravel 或 Symfony 軟體包即可開始。
如果您正在尋找 HTTP 監控、資料庫查詢見解以及將警報和通知轉發到您首選訊息傳遞環境的功能,請免費嘗試 Inspector。註冊您的帳戶。
或在網站上了解更多:https://inspector.dev
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3