Menjalankan PHP Versi 7.1.30 di bawah RHEL 7.7.
Saya ingin bertemu memory_limit, tetapi tidak yakin apakah saya memiliki hak sintaksis (yaitu 256M atau 256MB). Jadi untuk memulai dengan saya menempatkan nilai buruk "Hugo" sebagai pengaturan memory_limit. Masalah dengan ini adalah hasil dari phpinfo () (dijalankan di bawah httpd) secara harfiah memiliki string "Hugo", yaitu:
Jadi ini membuat saya agak khawatir bahwa PHP tidak benar-benar melakukan kewarasan memeriksa nilai (s). (Jika nilai yang diberikan buruk, saya berharap akan kembali ke default, misalnya)
Adakah yang bisa mengomentari ini - khususnya, bagaimana Anda tahu apakah PHP akan menegakkan sesuatu (jika string arbiter dapat disediakan).
(int) 'HUGO'; // => 0
. Yang mulai gagal pada mesin saya pada 2MB memori yang digunakan.memory_limit 256M
.Jawaban:
Yang membingungkan di sini adalah bahwa pengaturannya terlihat seperti integer dengan beberapa sintaks khusus, tetapi secara internal didefinisikan sebagai string. String kemudian diuraikan menjadi variabel global yang terpisah setiap kali nilainya diubah. Yang terpenting, hasil parsing string ke integer tidak disimpan kembali ke tabel pengaturan, jadi ketika Anda menelepon
phpinfo()
, Anda melihat input asli, bukan nilai parsing.Anda dapat melihat ini di sumber:
zend_atol
, yang menangani sufiks khususSintaks yang didukung pada akhirnya ditentukan di
zend_atol
mana:g
,G
,m
,M
,k
, atauK
Nilai tanpa digit di awal akan diuraikan sebagai nol. Saat mengatur variabel global, ini akan mengatur batas memori ke minimum yang diizinkan, berdasarkan konstanta
ZEND_MM_CHUNK_SIZE
.Anda dapat melihat efeknya dengan menetapkan batas memori, kemudian menjalankan loop yang dengan cepat mengalokasikan sejumlah besar memori dan melihat apa yang keluar dalam pesan kesalahan. Contohnya:
sumber
Hal pertama yang pertama, Kita pertama-tama harus memahami bagaimana PHP.ini bekerja dengan cara interpretasi alur kerja. memory_limit adalah arahan untuk PHP.
saat menggunakan dengan fungsi PHP Anda harus melakukan sesuatu seperti ini
ini_set(‘memory_limit’,’256MB’)
. Jadi, fungsi ini untuk sementara waktu akan menetapkan nilai Anda ke variabel interpreter. Jika Anda melihat lebih dekat maka Anda bisa mendapatkan dua kolom Satu untuk Lokal dan Satu untuk global. Itu menunjukkan kemampuan nilai untuk masing-masing individu.Tapi, Ketika Anda didefinisikan untuk global, Anda perlu menetapkan sebagai akhiran dengan K, M, G masing-masing. Jika kita melebihi nilai ini menggunakan apache .htaccess, ia memerlukan hal yang sama untuk PHP fpm.
sumber