首頁  >  問答  >  主體

為每個站點設定php.ini指令

<p>我有多個網站在 Ubuntu Server 上的 Apache2 和 PHP 上運行。我知道 PHP 有一個 php.ini 文件,可讓您設定 <code>upload_max_filesize</code>、<code>max_file_uploads</code> 、 <code>upload_tmp_dir</code> 、 <code>upload_tmp_dir</code>/code> 等的值。但這會將一個值套用到所有網站。 </p> <p>如何為每個網站設定指令?例如:我想將<code>sitea.com</code> 的<code>upload_max_filesize</code> 設為50M,將<code>siteb.com</code> 的<code> code> 設定為5M。 </p> <p>同樣,我想為每個站點設定唯一的 <code>session.name</code> 。如何才能做到這一點?我讀到有一個叫做<code>PHP_INI_USER</code>, <code>PHP_INI_PERDIR</code>, <code>PHP_INI_SYSTEM</code>, <該怎麼做呢? </p>
P粉283559033P粉283559033391 天前491

全部回覆(2)我來回復

  • P粉320361201

    P粉3203612012023-08-28 22:34:33

    Mike 'Pomax' Kamermans 的明確評論說明應如何完成此操作。然而 PHP 手冊文檔可能有點令人反感。

    還有一些關於其他答案的澄清:

    • 使用 PHP 解析器檔案(如 Lajos Arpad 中所述)會增加一些安全風險和一堆編碼、語法和一些確實不需要的處理開銷。

    • .htaccess 確實可以為某些 PHP 安裝設定自訂ini 指令,但如果您使用的是「FastCGI」或「CGI」(可能還有suPHP) ) PHP 安裝實際上會導致您的網站崩潰並出現500 錯誤,因此請使用本地.user.ini 文件,如此處所述。 如何找到我的 SAPI?

    • 如果您將 PHP 作為 Apache 模組(例如 mod_php)運行,請使用 .htaccess如何找到我的 SAPI?

    PHP suPHP/FastCGI/CGI SAPI

    那麼,你的願望該如何完成呢?

    1) 尋找 Core PHP.ini 詳細資訊。

    讀取目前 PHP 版本的 PHP.ini 檔案。

    在第 180 行(對於 PHP 8.1),應該是這樣的:

    記下該值,我建議自訂該值(如本範例所示)。該值是將位於伺服器上每個唯一帳戶中的檔案的檔案名,保存全域 PHP.ini 檔案的帳戶特定「本機」設定。

    該檔案通常位於 public_html 資料夾中,因此應以 . 開頭,以便預設為隱藏(稍後會詳細介紹)。如果該檔案不存在,則不會變更帳戶的核心 PHP 設定。

    2) 記住/設定檔名並建立新規則

    所以您現在知道/已經設定了自訂 PHP 文件的名稱;現在在您的帳戶中產生文件,然後您可以設定要單獨為此帳戶自訂的 PHP.ini 設定。

    例如;

    將包含以下範例資訊:

    ;
    ; Some optional comment text here for human consumption
    ;
    session.cookie_secure=1
    session.save_path=/home/sitea.com_account/sessions
    session.name=session-sitea
    error_log=/home/sitea.com_account/errors/PHP_errors.log
    upload_max_filesize=50M

    此資訊由 PHP 解析,並覆寫核心 PHP.ini 中的任何對應值,但僅限於該帳戶。

    3) 根據需要為每個帳戶進行自訂

    例如,對於您的 siteb.com php 用戶 ini 文件,它看起來更像是這樣:

    將包含以下範例資訊:

    ;
    ; Some optional comment text here for human consumption
    ;
    session.cookie_secure=1
    session.save_path=/home/siteb.com_account/session_b
    session.name=site-b-UniqueSession
    error_log=/home/siteb.com_account/errors/PHP_errors.log
    upload_max_filesize=5M

    然後,您可以透過探索每個帳戶上的 phpinfo() 並注意顯示的本機和核心差異來檢查這些帳戶設定是否已正確設定。

    4) 測試並確認

    /public_html/ 路徑中的核心user.ini 檔案應該是該帳戶上要處理的每個子檔案/資料夾所需的全部檔案(這有時取決於您的確切LAMP 伺服器設置和你的PHP 處理程序)。

    正如我所說,一旦設定了測試 ini 文件,您應該運行 phpinfo() 來檢查其值是否已實現。

    如果您不想使用phpinfo() 那麼您可以輕鬆使用[ini_get](https://www.php.net/manual/en/function .ini-get) 將敏感資料轉儲到錯誤日誌而不是瀏覽器。

    <?php
    error_log("ini data for this account: ".ini_get('upload_max_filesize'));
    exit;

    5) 安全性

    user.ini 檔案通常以. 字元開頭,以將其隱藏在目錄中,但這並不意味著瀏覽器代理無法存取它,因此最好將幾行新增至您的.htaccess 以拒絕對此檔案的存取。

    <Files .account-php81.ini>
        Require all denied
    </Files>

    一些最終想法:

    #核心PHP.ini 值在新版本的PHP 中確實會發生變化,因此最好的做法是針對不同的PHP 版本使用不同的本地.ini 檔案(.account-php80.ini , <代码>.account-php81.ini等)。請注意,每個 php.ini 核心都需要明確地呼叫其各自的本機 user.ini 文件,如上面步驟 1 所述。

    上述原則概述於PHP手冊,必須注意:

    回覆
    0
  • P粉144705065

    P粉1447050652023-08-28 14:10:59

    您可以使用每個網站(甚至每個資料夾)的.htaccess 檔案來設定PHP 設定值- 至少對於大多數設定:如果您查看在設定指令文件中,對於標記為PHP_INI_PERDIR 或< code>PHP_INI_ALL 您可以使用PHP php_value 或php_flag 指令在.htaccess 文件中設定這些內容="https://www.php.net/manual/en/configuration.changes.php" rel="nofollow noreferrer">「如何更改設定設定」文檔。

    例如,要在網站中設定 upload_max_filesize,請在該網站的文檔根目錄中建立一個 .htaccess 文件,並在其中放入文字:

    php_value upload_max_filesize 24M

    不幸的是,max_file_uploadsupload_tmp_dir 是標記為PHP_INI_SYSTEM 的設置,您無法在.htaccess 中更改它們文件...

    回覆
    0
  • 取消回覆