Bagaimana cara mengatur file php.ini per situs pada server LAMP menggunakan NameVirtualHosts?

10

Saya memiliki server LAMP yang melayani sejumlah situs web yang berbeda menggunakan NameVirtualHosts .

Sampai saat ini memiliki file global php.ini baik-baik saja, tetapi baru-baru ini salah satu pengembang kami telah meminta beberapa pengaturan di php.ini yang saya lebih suka tidak mengatur secara global.

Saya cukup yakin saya pernah mendengar bahwa Anda dapat mengatur file php.ini berdasarkan per-situs , tetapi tidak tahu bagaimana cara melakukan ini.

Adakah yang bisa mengarahkan saya ke arah yang benar tentang bagaimana mencapainya?

Brent
sumber

Jawaban:

14

Sebagian besar pengaturan yang Anda tempatkan di php.ini Anda juga dapat ditempatkan di .htaccess atau dalam konfigurasi apache untuk situs itu. Sebagai contoh, salah satu host virtual saya memiliki ini di .htaccess

    php_value display_errors 1
    php_value register_globals 0
    php_value short_open_tag 0
    php_value magic_quotes_runtime 0
    php_value magic_quotes_gpc 0
    php_value session.name "PHPSESSID_SITEBLAH"
    php_value session.gc_maxlifetime 57600
    php_value session.gc_probability 1
    php_value session.gc_divisor 500
Sakit kepala
sumber
Ini sepertinya tidak berhasil untuk saya. Apakah ada semacam arahan yang perlu diatur di master php.ini untuk memungkinkan ini?
Brent
1
"Opsi AllowOverride" atau "AllowOverride All" harus ditetapkan dalam konfigurasi APache agar ini berfungsi.
StackKrish
Apakah nilai-nilai di, misalnya, apache.confmenimpa yang ada di php.inifile Anda , atau sebaliknya?
puk
7

Anda juga dapat menentukan pengaturan konfigurasi di file konfigurasi Apache (httpd.conf / apache.conf). Dalam kasus Anda, Anda dapat menentukan nilai konfigurasi dalam konteks.

Contoh berikut harus menetapkan upload_max_filesize ke 10M untuk host virtual example.com.

<VirtualHost *>
    ServerName example.com
    DocumentRoot /path_to_docroot
    php_value upload_max_filesize 10M
    php_admin_flag allow_url_fopen on
</VirtualHost>

Jika Anda tidak ingin menetapkan nilai ini untuk seluruh situs, tetapi ke satu direktori tertentu di mana aplikasi tinggal, maka Anda dapat menentukan nilai dalam a.

<VirtualHost *>
   ServerName example.com
   DocumentRoot /path_to_docroot
  <Location /testApp/>
     php_value upload_max_filesize 10M
     php_admin_flag allow_url_fopen on
  </Location>
</VirtualHost>

Lihat http://php.net/manual/en/configuration.changes.php untuk penjelasan lebih lanjut.

StackKrish
sumber
+1 Anehnya, tidak ada yang berhasil. Htaccess lokal, file php ini, tidak ada yang berhasil.
boot13
Terima kasih! Mungkin seseorang menemukan masalah yang perlu ditimpa parameter mod-security. Ini hanya berfungsi pada level vhost tidak pada level DIRECTORY atau LOCATION. Alasannya adalah bahwa mod-sec sedang dikonfigurasi sebelum direktori atau blok lokasi dibaca.
ora-600
1

Saran lain adalah menggunakan mod-fastcgi atau mod-fcgi, yang menjalankan PHP sebagai daemon mandiri yang terpisah. Kemudian, untuk setiap situs web, Anda dapat menentukan pengguna yang terpisah dan file konfigurasi php.ini.

Walter
sumber
1

Namun pilihan lain adalah suPHP yang memungkinkan Anda untuk mendefinisikan php.ini untuk setiap VirtualHost. Ini juga memungkinkan Anda untuk menentukan versi PHP untuk setiap VirtualHost.

Antoine Benkemoun
sumber