Yang mana yang diprioritaskan Wordpress ketika datang ke php.ini, wp-config dan .htaccess?


10

Katakanlah saya ingin mengubah batas unggah maksimum untuk situs web Wordpress dan saya memberikan nilai-nilai berikut:

wp-config.php: 128MB php.ini: 256MB .htaccess: 64MB

Jadi, yang mana yang akan diprioritaskan Wordpress saat memproses sesuai kebutuhan?

Jawaban:


13

Tidak jelas dari pertanyaan Anda apa yang Anda berubah di masing-masing file, tapi saya kira dalam setiap kasus itu adalah yang upload_max_filesizepengaturan PHP .

Secara umum, pengaturan akan diterapkan dalam urutan ini, masing-masing menggunakan nilai sebelumnya:

  1. php.ini
  2. Arahan Apache dalam .htaccess
  3. panggilan ke ini_set()

Namun, pengaturan ini didefinisikan sebagai PHP_INI_PERDIR, yang seperti yang dijelaskan pada halaman ini berarti tidak dapat diatur menggunakan ini_set, sehingga wp-config.phptidak dapat mengubahnya. Jadi, dalam contoh yang Anda berikan dalam pertanyaan, itu akan mengambil nilai dari .htaccess 64MB.

Anda dapat memverifikasi ini dengan menjalankan echo ini_get('upload_max_filesize');suatu tempat di kode Anda.

Perhatikan bahwa ada nilai tempat lain yang dapat diatur yang belum saya sebutkan di atas, seperti file php.ini per pengguna, dan konteks konfigurasi Apache lainnya . Selain itu, beberapa di antaranya dapat dinonaktifkan , jadi jika server Anda tidak disetel untuk mengizinkan over-rides di .htaccess, Anda tidak akan dapat menetapkan nilai di sana juga.

Perhatikan juga bahwa Wordpress menyertakan beberapa variabel konfigurasinya sendiri, yang berinteraksi dengan cara yang berbeda dengan konfigurasi PHP. Misalnya, WP_MEMORY_LIMITakan mencoba untuk meningkatkanmemory_limit pengaturan PHP saat startup, tetapi memiliki kode yang memeriksa dan tidak pernah menurunkannya . Tidak ada aturan umum untuk ini, itu akan berbeda untuk pengaturan yang berbeda.


php.ini selalu menjadi yang pertama untuk dipilih.
WpMania.Net

5

Pada dasarnya ketiga file dipertimbangkan.

WordPress / server Anda akan memeriksa dalam urutan berikut:

wp-config.php > .htaccess > php.ini

Jika sesuatu pada "level yang lebih tinggi" (kemudian dalam rantai) membatasi nilai Anda, nilai sebelumnya akan diabaikan atau ditimpa. Jika sepotong rantai hilang, nilai dalam .htaccessmisalnya, yang lebih tinggi berikutnya akan digunakan sebagai gantinya.

Dalam contoh Anda .htaccessakan membatasi max_upload_sizehingga 64 MB, meskipun server Anda akan baik-baik saja hingga 256 MB dan WordPress juga akan menerima hingga 128 MB dalam ukuran file pertama.

Anda juga dapat menetapkan batas berbeda melalui .htaccessfile dan dengan melakukan ini Anda menimpa nilai dari php.ini, sehingga tidak lagi menjadi nilai yang mendominasi. Ini berfungsi di banyak lingkungan hosting, jadi kemungkinan cukup bagus Anda dapat menaikkan atau menurunkan dengan max_upload_sizecara ini.

Jika Anda memiliki hosting / server yang dikonfigurasi lebih ketat, ada kemungkinan bahwa opsi untuk mengabaikan pengaturan php.inidinonaktifkan. Dalam hal ini, mengesampingkan max_upload_sizedari .htaccesstidak akan berhasil, jadi ini bisa menjadi faktor pembatas.


8
Bagaimana ini "bukan cara kerjanya" ketika Anda memberikan daftar prioritas, seperti pertanyaannya? Dan jika .htaccessada di tengah daftar, mengapa yang menjadi faktor pembatas?
IMSoP

Saya pikir ekspresi saya tidak jelas. Saya memahami pertanyaannya sebagai "jika saya menetapkan nilai yang lebih tinggi di wp-config, apakah itu akan 'mendominasi' yang lain?" dan itu bukan cara kerjanya. ;-) @bns melakukan penjelasan yang lebih baik tentang itu.
flomei

Benar, saya mengerti maksud Anda sekarang. Namun, ketika saya berkomentar di bawah jawaban bns, saya tidak dapat menemukan dokumentasi yang mendukung klaim bahwa Anda tidak dapat menimpa dengan nilai yang lebih tinggi. Nilai wp-config.php akan selalu diabaikan, seperti yang dijelaskan dalam jawaban saya, tapi saya cukup yakin nilai yang lebih tinggi di .htaccess akan menggantikan yang lebih rendah di php.ini baik-baik saja.
IMSoP

Anda sebagian benar, tetapi mengganti nilai php.ini dari .htaccess dapat dinonaktifkan, lihat jawaban saya yang diperbarui.
flomei

Pembaruan Anda masih menyiratkan bahwa Anda hanya dapat menetapkan nilai yang lebih rendah melalui .htaccess. Saya tahu tidak ada alasan Anda tidak bisa juga menetapkan nilai yang lebih tinggi di sana. Fakta bahwa mekanisme dapat dinonaktifkan adalah titik yang baik, dan salah satu yang saya dipoles dalam jawaban saya, tetapi dengan asumsi setiap pengaturan PHP yang diperbolehkan dalam .htaccess, maka nilai di .htaccess akan benar-benar "mendominasi" nilai di php.ini untuk pengaturan yang sama.
IMSoP

3

Saya pikir flomei harus mengedit jawabannya, karena itu adalah jawaban yang benar tetapi penjelasannya buruk. Php.ini -> .htaccess -> wp-config.phpsebenarnya urutan setiap file akan dibaca dan akan menetapkan nilai-nilai dengan pertimbangan bahwa tidak ada pengaturan yang ditentukan sebelumnya. Tetapi dalam hal ini ada pengaturan yang ditetapkan sebelumnya, ini akan menjadi "ditunggangi" hanya jika pengaturan baru lebih rendah.

Itu berarti, jika Anda memiliki wp-config.php dengan 64Mb dan .htaccess dengan 32 MB: wp-config.php tidak akan mengesampingkan pengaturan itu karena sudah ada batas bawah dan Anda akan berakhir dengan 32Mb.

Tetapi jika Anda memiliki wp-config.php dengan 32Mb dan .htaccess dengan 64 MB, wp-config.php akan menurunkan pengaturan sebelumnya menjadi 32Mb.

Sunting: Untuk memperjelas, seperti yang ditunjukkan IMSoP, wp-config.php hanya memungkinkan Anda mengatur ukuran yang lebih ketat daripada yang diizinkan oleh pengaturan PHP jika Anda mengubah 'WP_MEMORY_LIMIT', itu tidak memungkinkan Anda melampaui itu. Jadi sebenarnya bukan pengaturan yang ditimpa. Bahkan, ada pemeriksaan terpisah yang dilakukan pada titik yang berbeda saat runtime. Jika Anda mengubah pengaturan php upload_max_filesizesesuai asumsi (pertanyaan tidak menunjukkan pengaturan mana yang Anda ubah), itu tidak berpengaruh.

Juga, Anda harus mempertimbangkan bahwa post_max_sizeharus lebih besar dari upload_max_filesizepada pengaturan php Anda


2
Dapatkah Anda menautkan ke dokumentasi apa pun untuk "hanya naik jika nilai baru lebih rendah", karena tentu saja tidak benar dengan pengaturan PHP lain yang pernah saya lihat. Juga tidak disebutkan di halaman manual ini . Apa yang disebutkan, seperti yang saya tunjukkan dalam jawaban saya, adalah bahwa hal itu upload_max_filesizetidak dapat diubah pada saat runtime (mungkin karena sudah terlambat untuk memiliki efek apa pun) sehingga wp-config.phptidak dapat memengaruhi dengan satu atau lain cara. Standar bawaan 2MB juga disebutkan, dan Anda pasti dapat mengaturnya lebih tinggi dari itu.
IMSoP

Pada dasarnya itulah yang dikeluarkan oleh tim dukungan penyedia hosting saya ketika saya memiliki masalah yang sama, saya akan mencari email dan memperbarui jika saya menemukannya. Saya tidak begitu yakin apakah di dalam server sebenarnya Anda menimpa nilainya, atau hanya saja verifikasi dilakukan dalam waktu eksekusi di tempat yang berbeda, dengan demikian tingkah lakunya seperti ini.
bns

1
Hanya untuk mengulangi, jika garis Anda menambah wp-config.phpadalah ini_set('upload_max_filesize', '32M');itu akan memiliki efek, pernah , karena pengaturan yang tidak dapat diatur pada saat run-time seperti itu didefinisikan sebagaiPHP_INI_PERDIR . (Kecuali halaman dokumentasi itu salah, tapi itu sepertinya tidak mungkin.)
IMSoP

Tidak, kamu benar. Ini sebenarnya bukan pengaturan yang ditimpa. Ini hanyalah pembatasan yang terpisah, saya akan memperbarui sesuai untuk menghindari kebingungan.
bns

1
@IMSoP / bns - Saya pikir mungkin ada sedikit kebingungan antara wp-config.phpnilai - nilai spesifik dan pengaturan nilai PHP sewenang-wenang dengan ini_set(). Seperti yang saya pahami, hal wp-config.phpini terutama berkaitan dengan pengaturan nilai konfigurasi khusus WordPress dan banyak dari ini memang dibatasi (mis. Dikenakan batas atas) oleh pengaturan konfigurasi PHP yang mendasarinya (seperti yang WP_MEMORY_LIMITdisebutkan dalam jawaban). Ini adalah hal WordPress. Namun, ketika mengatur nilai konfigurasi PHP sewenang-wenang menggunakan ini_set()dalam PHP tidak ada batasan seperti itu.
MrWhite
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.