Tetapkan arahan php.ini untuk setiap tapak
P粉283559033
P粉283559033 2023-08-28 00:20:14
0
2
563
<p>Saya mempunyai berbilang tapak yang dijalankan pada Apache2 dan PHP pada Pelayan Ubuntu. Saya tahu bahawa PHP mempunyai fail php.ini yang membolehkan anda menetapkan nilai untuk <code>upload_max_filesize</code>, <code>max_file_uploads</code> Tetapi ini akan menggunakan satu nilai pada semua tapak. </p> <p>Bagaimanakah saya boleh menetapkan arahan untuk setiap tapak? Contohnya: Saya ingin menetapkan <kod>muat naik_maks_fail</kod> daripada <kod>sitea.com</kod> ;/kod> </p> <p>Begitu juga, saya mahu menetapkan <kod>session.name</code> Bagaimanakah ini boleh dicapai? Saya membaca bahawa terdapat sesuatu yang dipanggil <code>PHP_INI_USER</code>, <code>PHP_INI_PERDIR</code>, <code>PHP_INI_SYSTEM</code>, <code>PHP_INI>semuanya< Saya lakukan ia? </p>
P粉283559033
P粉283559033

membalas semua(2)
P粉320361201

Komen eksplisit oleh Mike 'Pomax' Kamermans tentang cara ini harus dilakukan. Walau bagaimanapun, dokumentasi manual PHP boleh agak membingungkan.

Dan beberapa penjelasan tentang jawapan lain:

  • Menggunakan fail penghurai PHP (seperti yang diterangkan dalam Lajos Arpad) menambahkan beberapa risiko keselamatan dan sekumpulan pengekodan, sintaks dan beberapa overhed pemprosesan yang benar-benar tidak perlu.

  • .htaccess 确实可以为某些 PHP 安装设置自定义 ini 指令,但如果您使用的是“FastCGI”或“CGI”(可能还有 suPHP) ) PHP 安装实际上会导致您的网站崩溃并出现 500 错误,因此请使用本地 .user.ini fail seperti yang diterangkan di sini. Bagaimana untuk mencari SAPI saya?

  • Hanya gunakan .htaccess jika anda menjalankan PHP sebagai modul Apache (cth. mod_php). Bagaimana untuk mencari SAPI saya?

PHP suPHP/FastCGI/CGI SAPI

Jadi, bagaimanakah hasrat anda harus dipenuhi?

1) Cari butiran Teras PHP.ini.

Baca fail PHP.ini versi PHP semasa.

Pada baris 180 (untuk PHP 8.1), ia sepatutnya kelihatan seperti ini:

Buat nota nilai, Saya syorkan menyesuaikannya (seperti yang ditunjukkan dalam contoh ini). Nilai ini ialah nama fail fail yang akan ditempatkan dalam setiap akaun unik pada pelayan yang memegang tetapan "tempatan" khusus akaun untuk fail PHP.ini global.

Fail biasanya bermula dengan public_html 文件夹中,因此应以 . supaya ia disembunyikan secara lalai (lebih lanjut mengenai perkara ini kemudian). Jika fail ini tidak wujud, tetapan PHP teras akaun tidak akan diubah.

2) Ingat/tetapkan nama fail dan buat peraturan baharu

Jadi anda kini tahu/telah menetapkan nama fail PHP tersuai anda kini menjana fail dalam akaun anda dan kemudian anda boleh menetapkan tetapan PHP.ini yang anda mahu sesuaikan secara individu untuk akaun ini.

Contohnya

akan mengandungi maklumat sampel berikut:

;
; 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

Maklumat ini dihuraikan oleh PHP dan mengatasi sebarang nilai yang sepadan dalam PHP.ini teras, tetapi hanya untuk akaun itu.

3) Sesuaikan untuk setiap akaun mengikut keperluan

Sebagai contoh, untuk fail ini pengguna php siteb.com anda ia akan kelihatan lebih seperti ini:

akan mengandungi maklumat sampel berikut:

;
; 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

Anda kemudian boleh menyemak sama ada tetapan akaun ini ditetapkan dengan betul dengan meneroka phpinfo() pada setiap akaun dan mencatat perbezaan setempat dan teras yang ditunjukkan.

4) Uji dan sahkan

/public_html/ Fail user.ini teras dalam laluan mestilah semua fail yang diperlukan untuk setiap sub-fail/folder pada akaun tersebut untuk diproses (ini kadangkala bergantung pada persediaan pelayan LAMP tepat anda dan pengendali PHP anda).

Seperti yang saya katakan, sebaik sahaja anda menyediakan fail ujian ini, anda harus menjalankan phpinfo() untuk menyemak sama ada nilainya dilaksanakan.

Jika anda tidak mahu menggunakan phpinfo() 那么您可以轻松使用 [ini_get](https://www.php.net/manual/en/function .ini-get) maka anda boleh dengan mudah menggunakan [ini_get](https://www.php.net/manual/en/function .ini-get) untuk membuang data sensitif kepada log ralat dan bukannya penyemak imbas.

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

5) Keselamatan

Fail

user.ini biasanya berakhir dengan . 字符开头,以将其隐藏在目录中,但这并不意味着浏览器代理无法访问它,因此最好添加几行添加到您的 .htaccess untuk menafikan akses kepada fail ini.

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

Beberapa pemikiran akhir:

Nilai teras PHP.ini memang berubah dalam versi baharu PHP, jadi amalan terbaik adalah menggunakan fail .ini tempatan yang berbeza untuk versi PHP yang berbeza (.account-php80.ini, .account-php81.ini等)。请注意,每个 php.ini Teras semua perlu memanggil fail user.ini setempat masing-masing secara eksplisit, seperti yang diterangkan dalam langkah 1 di atas

.

Prinsip di atas digariskan dalam manual PHP dan mesti diperhatikan:

P粉144705065

Anda boleh menetapkan ini dalam .htaccess 文件来设置 PHP 配置值 - 至少对于大多数设置:如果您查看 在配置指令文档中,对于标记为 PHP_INI_PERDIR 或 PHP_INI_ALL 您可以使用 PHP php_value 或 php_flag 命令在 .htaccess fail setiap tapak (atau malah setiap folder) menggunakan ="https://www.php.net/manual/en/configuration.changes.php" rel="nofollow noreferrer"> "Bagaimana untuk menukar tetapan konfigurasi" Dokumentasi.

Sebagai contoh, untuk menyediakan upload_max_filesize,请在该网站的文档根目录中创建一个 .htaccess fail dalam tapak web anda dan meletakkan teks di dalamnya:

php_value upload_max_filesize 24M

Malangnya, menukarnya dalam max_file_uploadsupload_tmp_dir 是标记为 PHP_INI_SYSTEM 的设置,您无法在 .htaccess fail...

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan