@ 451F: Saya pikir kata-kata kunci di sini adalah "standar ketat". Saya tidak tahu tentang versi sebelumnya tetapi dengan PHP 5.4.0 disarankan Anda mengatur pelaporan kesalahan E_ALL & ~E_DEPRECATED & ~E_STRICTuntuk produksi. Perhatikan bahwa mereka menyarankan Anda menonaktifkan standar ketat.
Fake Code Monkey Rashid
Juga cari Anda file php.ini dan salin ke / usr / local / php5 / lib /
yadhu
Jawaban:
185
Apakah Anda ingin menonaktifkan pelaporan kesalahan, atau hanya mencegah pengguna melihatnya? Biasanya ide yang baik untuk mencatat kesalahan, bahkan di situs produksi.
# in your PHP code:
ini_set('display_errors','0');# don't show any errors...
error_reporting(E_ALL | E_STRICT);# ...but do log them
Mereka akan login ke log sistem standar Anda, atau gunakan error_logarahan untuk menentukan dengan tepat di mana Anda ingin kesalahan.
Hanya untuk secara eksplisit menyatakan yang sudah jelas: Tentu saja Anda dapat mengatur ini juga di php.inifile Anda , misalnya jika Anda tidak dapat mengubah kode PHP.
sschuberth
1
Namun, mencatat kesalahan ketat dalam produksi juga merupakan praktik yang buruk. Karena Anda akan mengisi log Anda dengan pemberitahuan yang sepertinya tidak penting, menyebabkan salah satu atau kedua masalah berikut: serverAdmin akan kehilangan / mengabaikan kesalahan dan direktori log akan menghabiskan semua ruang server di beberapa titik.
Lance
4
Ini tidak berfungsi untuk saya - harus menggunakan E_ALL & ~ E_STRICT dari Fake Code Monkey Rashid komentar dari jawaban di bawah ini
besimple
1
bagaimana cara kerjanya di samping yang berikut ini yang saya temukan di php.ini log_errors = Pada Vs ini_set ('display_errors', '0'); Apakah kemenangan satu set terakhir?
mendarat pada
@nate ketika Anda memposting beberapa kode, tolong beri tahu kami di mana kami dapat menempelkannya. Saya tidak tahu harus meletakkan di mana: ke php.iniatau .htaccessdi suatu tempat dalam kode PHP saya.
Даниил Пронин
89
Tanpa kesalahan.
error_reporting(0);
atau untuk tidak ketat
error_reporting(E_ALL ^ E_STRICT);
dan jika Anda ingin menampilkan semua kesalahan lagi, gunakan
+1: Saya percaya ^ini hanya baik untuk menghilangkan satu jenis kesalahan. Jika Anda ingin mematikan tipe tambahan, Anda harus menggunakan E_ALL & ~E_DEPRECATED & ~E_STRICTformat. Atau mungkin (E_ALL & ~(E_DEPRECATED | E_STRICT))formatnya.
Fake Code Monkey Rashid
10
Catatan: E_STRICT hanya menjadi bagian dari E_ALL sejak php 5.4
Fred Haslam
@FakeCodeMonkeyRashid Saya heran mengapa begitu? mungkin karena itu urutan evaulasi itu penting?
codeling
Menekan pelaporan kesalahan STRICT di PHP <5.4 ini_set('error_reporting', E_ALL&~E_STRICT); Menekan pelaporan kesalahan STRICT di PHP> = 5.4ini_set('error_reporting', E_ALL^E_STRICT);
Mel_T
Saya ingin menunjukkan bahwa menggunakan ^("xor") daripada & ~("dan tidak") adalah ide yang buruk ! ^tergantung pada asumsi bahwa misalnya E_STRICT adalah bagian dari E_ALL dan akan selalu menjadi bagian darinya. Ini buruk karena E_ALL memang berubah di masa lalu (E_STRICT tidak lewat itu, tetapi sekarang sejak PHP 5.4). Jika asumsi gagal satu hari, ^tidak hanya akan pecah, tetapi sebenarnya melakukan kebalikan dari apa yang seharusnya dilakukan: Ini akan mengaktifkan E_STRICT karena cara kerja XOR ( ^). & ~namun akan selalu menonaktifkan E_STRICT, tidak peduli nilai E_ALL saat ini. Karena itu & ~harus digunakan.
Jay
31
Semua solusi di atas benar. Tetapi, ketika kita berbicara tentang aplikasi PHP normal, mereka harus dimasukkan dalam setiap halaman, yang diperlukan. Cara untuk mengatasi ini, adalah melalui .htaccessdi folder root. Hanya untuk menyembunyikan kesalahan. [Masukkan salah satu baris berikut dalam file]
php_flag display_errors off
Atau
php_value display_errors 0
Selanjutnya, untuk mengatur pelaporan kesalahan
php_value error_reporting 30719
Jika Anda bertanya-tanya bagaimana nilainya 30719, E_ALL (32767), E_STRICT (2048) sebenarnya konstan yang memiliki nilai numerik dan ( 32767 - 2048 = 30719)
Terima kasih banyak - ini melakukan trik (solusi htaccess) di PHP 5.4.7 - tidak ada yang lain - bahkan memodifikasi .ini - melakukan trik.
Saya menggunakan php_admin_value error_reportingini untuk bekerja (dalam konfigurasi vhost).
Lou Terrailloune
@ Seza, Memperbaiki Benar.
Starx
1
ini bukan tentang halaman, metode ini lebih disukai karena sebagian besar kesalahan E_STRICT adalah waktu kompilasi dan tidak dapat diganti dalam runtime
AbiusX
2
Hai hanya untuk membuatnya sedikit mudah, bagi mereka yang menggunakan wamp, Anda dapat menonaktifkan kesalahan dengan mengklik php> pengaturan php >> kesalahan tampilan. Jika dicentang maka hapus centang.
Hemang Rami
9
Nilai default flag error_reporting adalah E_ALL & ~ E_NOTICE jika tidak disetel dalam php.ini. Tetapi dalam beberapa instalasi (terutama instalasi yang menargetkan lingkungan pengembangan) memiliki E_ALL | E_STRICT ditetapkan sebagai nilai flag ini (ini adalah nilai yang disarankan selama pengembangan ). Dalam beberapa kasus, khususnya ketika Anda ingin menjalankan beberapa proyek open source, yang dikembangkan sebelum era PHP 5.3 dan belum diperbarui dengan praktik terbaik yang didefinisikan oleh PHP 5.3, di lingkungan pengembangan Anda, Anda mungkin akan mengalami mendapatkan beberapa pesan seperti yang Anda dapatkan. Cara terbaik untuk mengatasi situasi ini, adalah dengan menetapkan hanya E_ALL sebagai nilai flag error_reporting , baik diphp.ini atau dalam kode (mungkin di front-controller seperti index.php di web-root sebagai berikut:
Jika Anda bekerja di lingkungan wordpress, Wordpress menetapkan tingkat kesalahan dalam file wp-include / load.php dalam fungsi wp_debug_mode(). Jadi, Anda harus mengubah level SETELAH fungsi ini dipanggil (dalam file tidak dicentang ke git sehingga hanya pengembangan), atau memodifikasi langsung error_reporting()panggilan
Ini sangat berguna, saya memiliki mode debug aktif untuk satu instalasi Wordpress dan tidak menyadari itu melakukan ini. Terima kasih untuk informasi!
Tim
2
Saya tidak melihat jawaban yang bersih dan cocok untuk perangkat lunak yang siap produksi, jadi begini:
/*
* Get current error_reporting value,
* so that we don't lose preferences set in php.ini and .htaccess
* and accidently reenable message types disabled in those.
*
* If you want to disable e.g. E_STRICT on a global level,
* use php.ini (or .htaccess for folder-level)
*/
$old_error_reporting = error_reporting();/*
* Disable E_STRICT on top of current error_reporting.
*
* Note: do NOT use ^ for disabling error message types,
* as ^ will re-ENABLE the message type if it happens to be disabled already!
*/
error_reporting($old_error_reporting &~E_STRICT);// code that should not emit E_STRICT messages goes here/*
* Optional, depending on if/what code comes after.
* Restore old settings.
*/
error_reporting($old_error_reporting);
E_ALL & ~E_DEPRECATED & ~E_STRICT
untuk produksi. Perhatikan bahwa mereka menyarankan Anda menonaktifkan standar ketat.Jawaban:
Apakah Anda ingin menonaktifkan pelaporan kesalahan, atau hanya mencegah pengguna melihatnya? Biasanya ide yang baik untuk mencatat kesalahan, bahkan di situs produksi.
Mereka akan login ke log sistem standar Anda, atau gunakan
error_log
arahan untuk menentukan dengan tepat di mana Anda ingin kesalahan.sumber
php.ini
file Anda , misalnya jika Anda tidak dapat mengubah kode PHP.php.ini
atau.htaccess
di suatu tempat dalam kode PHP saya.Tanpa kesalahan.
error_reporting(0);
atau untuk tidak ketat
error_reporting(E_ALL ^ E_STRICT);
dan jika Anda ingin menampilkan semua kesalahan lagi, gunakan
error_reporting(-1);
sumber
^
ini hanya baik untuk menghilangkan satu jenis kesalahan. Jika Anda ingin mematikan tipe tambahan, Anda harus menggunakanE_ALL & ~E_DEPRECATED & ~E_STRICT
format. Atau mungkin(E_ALL & ~(E_DEPRECATED | E_STRICT))
formatnya.ini_set('error_reporting', E_ALL&~E_STRICT);
Menekan pelaporan kesalahan STRICT di PHP> = 5.4ini_set('error_reporting', E_ALL^E_STRICT);
^
("xor") daripada& ~
("dan tidak") adalah ide yang buruk !^
tergantung pada asumsi bahwa misalnya E_STRICT adalah bagian dari E_ALL dan akan selalu menjadi bagian darinya. Ini buruk karena E_ALL memang berubah di masa lalu (E_STRICT tidak lewat itu, tetapi sekarang sejak PHP 5.4). Jika asumsi gagal satu hari,^
tidak hanya akan pecah, tetapi sebenarnya melakukan kebalikan dari apa yang seharusnya dilakukan: Ini akan mengaktifkan E_STRICT karena cara kerja XOR (^
).& ~
namun akan selalu menonaktifkan E_STRICT, tidak peduli nilai E_ALL saat ini. Karena itu& ~
harus digunakan.Semua solusi di atas benar. Tetapi, ketika kita berbicara tentang aplikasi PHP normal, mereka harus dimasukkan dalam setiap halaman, yang diperlukan. Cara untuk mengatasi ini, adalah melalui
.htaccess
di folder root. Hanya untuk menyembunyikan kesalahan. [Masukkan salah satu baris berikut dalam file]Atau
Selanjutnya, untuk mengatur pelaporan kesalahan
Jika Anda bertanya-tanya bagaimana nilainya
30719
, E_ALL (32767), E_STRICT (2048) sebenarnya konstan yang memiliki nilai numerik dan (32767 - 2048 = 30719
)sumber
php_admin_value error_reporting
ini untuk bekerja (dalam konfigurasi vhost).Nilai default flag error_reporting adalah E_ALL & ~ E_NOTICE jika tidak disetel dalam php.ini. Tetapi dalam beberapa instalasi (terutama instalasi yang menargetkan lingkungan pengembangan) memiliki E_ALL | E_STRICT ditetapkan sebagai nilai flag ini (ini adalah nilai yang disarankan selama pengembangan ). Dalam beberapa kasus, khususnya ketika Anda ingin menjalankan beberapa proyek open source, yang dikembangkan sebelum era PHP 5.3 dan belum diperbarui dengan praktik terbaik yang didefinisikan oleh PHP 5.3, di lingkungan pengembangan Anda, Anda mungkin akan mengalami mendapatkan beberapa pesan seperti yang Anda dapatkan. Cara terbaik untuk mengatasi situasi ini, adalah dengan menetapkan hanya E_ALL sebagai nilai flag error_reporting , baik diphp.ini atau dalam kode (mungkin di front-controller seperti index.php di web-root sebagai berikut:
sumber
Di set php.ini:
sumber
WordPress
Jika Anda bekerja di lingkungan wordpress, Wordpress menetapkan tingkat kesalahan dalam file wp-include / load.php dalam fungsi
wp_debug_mode()
. Jadi, Anda harus mengubah level SETELAH fungsi ini dipanggil (dalam file tidak dicentang ke git sehingga hanya pengembangan), atau memodifikasi langsungerror_reporting()
panggilansumber
Saya tidak melihat jawaban yang bersih dan cocok untuk perangkat lunak yang siap produksi, jadi begini:
sumber