Bagaimana cara mematikan Pemberitahuan PHP?

126
Notice: Constant DIR_FS_CATALOG already defined

Aku sudah komentar display_errorsdi php.ini, tapi tidak bekerja.

Bagaimana cara membuat PHP tidak menampilkan hal-hal seperti itu ke browser?

MEMPERBARUI

Saya taruh di display_errors = Offsana tetapi masih melaporkan pemberitahuan seperti itu,

Apakah ini masalah dengan PHP 5.3?

Melaporkan banyak Call Stack juga ..

pengguna198729
sumber
3
Jika Anda menggunakan Apache, Anda mungkin harus memulai ulang server Anda! Jika Anda menggunakan XAMPP, cukup pilih "restart" di aplikasi pengelola.
st4wik
2
Saya sarankan grep display_errors /path/to/php.iniuntuk berlari untuk melihat apakah baris Anda diganti di suatu tempat di bawah file. Inilah yang terjadi pada saya.
usandfriends
Error_reporting adalah solusinya
David Stienen
coba ini_set('display_errors',0)di file php Anda. Ketika Anda ini-pengaturan tidak berfungsi, Anda harus memeriksa apakah phpinfo()menunjukkan nilai yang Anda inginkan. Jika tidak, Anda juga mengubah ini-file yang salah atau sesuatu menimpa nilai Anda dari php.ini
Radon8472
tidak ada bug php 5.3. display_errors bekerja dari php 4.0.3 hingga versi terbaru @see 3v4l.org/87gIl
Radon8472

Jawaban:

78

Anda dapat mengatur display_errorske 0atau menggunakan error_reporting()fungsi tersebut.

Namun, pemberitahuan mengganggu (saya bisa bersimpati sebagian ) tetapi memiliki tujuan. Anda tidak boleh mendefinisikan konstanta dua kali, kedua kalinya tidak akan berfungsi dan konstanta tidak akan berubah!

Pekka
sumber
4
+1: Saya setuju untuk menyebutkan bahwa dia harus memperbaiki kesalahan, bukan mematikan pelaporan. Dan Anda melakukannya dengan cara yang lebih lembut daripada @Jonathan Kuhn :-)
Josh
1
Tidak, tampaknya ini adalah bug dari php5.3, display_errorstidak berfungsi seperti yang diharapkan.
pengguna198729
@pengguna mencoba a phpinfo()untuk melihat apakah pengaturan benar-benar berlaku. Maafkan saya, tetapi saya sangat meragukan bahwa Anda telah menemukan bug di PHP 5.3 - Saya hanya akan percaya jika saya melihatnya :)
Pekka
Aneh, aktif local value, tetapi master valuemati, tidak tahu persis apa artinya ...
user198729
1
@user Saya pikir nilai lokal dapat berasal dari ini_setarahan atau php_ini_flagpengaturan dalam .htaccessfile.
Pekka
242

Dari dokumentasi PHP ( error_reporting ):

<?php
// Turn off all error reporting
error_reporting(0);
?>

Opsi menarik lainnya untuk fungsi itu:

<?php

// Report simple running errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);

// Reporting E_NOTICE can be good too (to report uninitialized
// variables or catch variable name misspellings ...)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

// Report all errors except E_NOTICE
// This is the default value set in php.ini
error_reporting(E_ALL & ~E_NOTICE);
// For PHP < 5.3 use: E_ALL ^ E_NOTICE

// Report all PHP errors (see changelog)
error_reporting(E_ALL);

// Report all PHP errors
error_reporting(-1);

// Same as error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);

?>
Cristian
sumber
Sangat membantu dan memberikan jawaban atas pertanyaan tersebut. Meskipun saya tahu itu lebih baik untuk memperbaiki semua pemberitahuan juga. Terkadang bisa berguna untuk menampilkan semuanya kecuali pemberitahuan.
Timo002
3
Mematikan hanya pemberitahuan tidak berhasil untuk saya menggunakan ^ PEMBERITAHUAN seperti yang dinyatakan dalam posting di atas. Untuk penggunaan PHP v5.3: E_ALL & ~ E_NOTICE
Chizzle
Jika Anda memiliki REST API yang mengembalikan JSON atau XML atau apa pun, Anda mungkin ingin menonaktifkannya. Atau setidaknya mengubahnya menjadi pengecualian dan menanganinya dengan sesuai.
TheRealChx101
Halo. Bekerja untuk saya. Terima kasih banyak.
H. Farid
Display_errors mengontrol jika kesalahan dikirim ke stdoutput. Tetapi ketika Anda mengubah error_reporting menjadi 0, Anda benar-benar menonaktifkan semua penanganan error dan errorloging .. Anda sebaiknya JANGAN PERNAH melakukan error_reporting (0).
Radon8472
30

Untuk baris perintah php, set

error_reporting = E_ALL & ~E_NOTICE

di /etc/php5/cli/php.ini

phpeksekusi perintah kemudian mengabaikan pemberitahuan.

Paul Salber
sumber
Dengan melakukan ini error_reporting = E_ALL & ~ E_NOTICE & ~ E_WARNING di php.ini. Ini menonaktifkan Pemberitahuan PHP dan Peringatan PHP. Sehingga tidak ada pemberitahuan php dan peringatan php yang terlihat di browser
Deepak Lamichhane
Ini berlaku untuk pengaturan php konsol. Jika Anda menggunakan php untuk membuat halaman web melalui file konfigurasi server web apache2 adalah /etc/php5/apache2/php.ini Sebaiknya gunakan phpinfo () untuk melihat file konfigurasi apa yang sebenarnya digunakan.
MilanG
23
<?php

// Turn off all error reporting
error_reporting(0);

// Report simple running errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);

// Reporting E_NOTICE can be good too (to report uninitialized
// variables or catch variable name misspellings ...)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

// Report all errors except E_NOTICE
error_reporting(E_ALL & ~E_NOTICE);

// Report all PHP errors (see changelog)
error_reporting(E_ALL);

// Report all PHP errors
error_reporting(-1);

// Same as error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);

?>

sumber http://php.net/manual/en/function.error-reporting.php

Abhishek Goel
sumber
2
Bukankah ini hanya duplikat dari jawaban yang sudah ada yang diposting bertahun-tahun yang lalu?
Pang
Kami berdua telah menyalin tempel dari dokumentasi php dan kedua jawaban telah menyebutkan sumbernya.
Abhishek Goel
@AbhishekGoel Unicorn adalah kuda poni yang menyamar, pernyataan itu tidak relevan, Anda masih menggandakan jawaban yang sudah ada empat tahun kemudian.
Ricky Boyce
@RickyB Saya tidak memeriksa jawaban yang ada dan saya juga tidak menyalin.
Abhishek Goel
12

Gunakan Baris Ini Dalam Kode Anda

error_reporting(E_ALL ^ E_NOTICE);  

Saya pikir ini sangat membantu Anda.

vicky mahale
sumber
6

Anda mencari:

php -d error_reporting="E_ERROR | E_WARNING | E_PARSE"
Christian Tismer
sumber
2
Hai @Christian, dan selamat datang di StackOverflow! Di masa depan, alangkah baiknya jika Anda dapat menambahkan sedikit penjelasan / detail tambahan pada jawaban Anda untuk mencerahkan mereka yang melihatnya tentang mengapa / bagaimana solusi tersebut bekerja / memperbaiki masalah. Terima kasih banyak, dan selamat membuat kode :)
Zachary Kniebel
1
persis! Saya gunakan /usr/bin/php -d error_reporting="E_ERROR | E_WARNING | E_PARSE" -f /path/to/file.phpuntuk crontab saya
vladkras
4

Saya lebih suka tidak mengatur di error_reportingdalam kode saya. Tetapi dalam satu kasus, produk lama, ada begitu banyak pemberitahuan, sehingga harus disembunyikan.

Jadi saya menggunakan potongan berikut untuk mengatur nilai yang dikonfigurasi di sisi server error_reportingtetapi kurangi E_NOTICEs.

error_reporting(error_reporting() & ~E_NOTICE);

Sekarang pengaturan pelaporan kesalahan selanjutnya dapat dikonfigurasi di php.iniatau .htaccess. Hanya pemberitahuan yang akan selalu dinonaktifkan.

algoritme
sumber
3

Anda dapat mengatur ini_set('display_errors',0);dalam skrip Anda atau menentukan kesalahan mana yang ingin Anda tampilkan error_reporting().

jeroen
sumber
Saya perlu menggunakan ini_setmetode yang disebutkan di sini, error_reporting(0)metode yang disebutkan di tempat lain tidak berpengaruh apa pun.
pix
2

dengan tidak menyebabkan kesalahan:

defined('DIR_FS_CATALOG') || define('DIR_FS_CATALOG', 'whatever');

Jika Anda benar-benar harus melakukannya, ubah pelaporan kesalahan menggunakan error_reporting () ke E_ALL ^ ​​E_NOTICE.

Jonathan Kuhn
sumber
1
Jika ini adalah situs produksi, terlepas dari apakah menurut Anda itu bebas kesalahan atau tidak, Anda tetap tidak boleh menampilkan kesalahan jika muncul - jadi 'dengan tidak menyebabkan kesalahan' sepertinya merupakan respons yang kurang ajar untuk pertanyaan yang valid.
Cam
5
sejak kapan boleh mengizinkan kesalahan di lokasi produksi? Saya setuju bahwa di situs produksi Anda tidak boleh menampilkan kesalahan, bukan itu yang saya katakan. Saya mengatakan bahwa Anda harus memeriksa apakah konstanta ditentukan dan mengaturnya jika tidak (itulah sebabnya saya memberikan sampel kode).
Jonathan Kuhn
Meskipun jawaban Anda bukan yang "paling baik", tampaknya jawaban pertanyaan OP sepenuhnya. +1 untuk jawaban Anda dan / harap itu ditandai sebagai jawaban, karena itu adalah jawaban yang benar.
Nazca
@Nazca Ya, saya telah mengubah sikap saya sejak saat itu dan mencoba untuk menjadi lebih ramah. :)
Jonathan Kuhn
2

Untuk kode PHP:

<?php
error_reporting(E_ALL & ~E_NOTICE);

Untuk php.inikonfigurasi:

error_reporting = E_ALL & ~E_NOTICE
Nabi KAZ
sumber
1

Saya menemukan trik ini baru-baru ini. Pukul @ di awal baris yang dapat menghasilkan peringatan / kesalahan.

Seolah-olah disihir, mereka menghilang.

DrLazer
sumber
21
Biasanya itu ide yang buruk, seperti memasang penyumbat telinga karena mobil Anda mengeluarkan suara gerinda yang mengerikan.
David Morrow
10
Ini sebenarnya masuk akal untuk beberapa contoh, misalnya saat merender variabel tidak peduli apakah itu disetel atau kosong.
Frans
1
Ini hanya masuk akal jika Anda memiliki sesuatu seperti plugin WordPress yang belum diperbarui oleh penulis dan Anda tahu persis apa yang menyebabkan masalah. Ini bantuan band, bukan perbaikan.
Imperatif
Saya suka error_reporting () dan '@'. Saya tidak menyadari salah satu dari ini. Terima kasih. Saya suka '@' karena ini menyediakan fungsi error_reporting (0) yang sama dan lebih mudah untuk diketik. Jika masalahnya lebih seperti "gantungan baju menahan knalpot" daripada "suara gerinda yang mengerikan", maka ini memungkinkan proyek untuk bergerak maju. Saya dapat dengan mudah menemukan dan memperbaikinya jika ada waktu. Ini membantu dengan masalah di mana kesalahan disebabkan oleh data yang dibaca dari file, jadi tidak ada kesalahan ketik atau masalah pustaka.
Mark Longmire
1
Pastikan Anda meletakkan @ di mana Anda 100% yakin dengan apa yang Anda lakukan.
Nick
1

Gunakan phpinfo () dan cari untuk Configuration File (php.ini) Pathmelihat path file config mana untuk php yang digunakan. PHP dapat memiliki banyak file konfigurasi tergantung pada lingkungan yang dijalankannya. Biasanya, untuk konsol itu:

/etc/php5/cli/php.ini

dan untuk php dijalankan oleh apache:

/etc/php5/apache2/php.ini

Dan kemudian tentukan error_reportingcara Anda membutuhkannya:

http://www.phpknowhow.com/configuration/php-ini-error-settings/ http://www.zootemplate.com/news-updates/how-to-disable-notice-and-warning-in-phpini- mengajukan

MilanG
sumber
1

Seperti yang disebutkan oleh beberapa orang dan jika Anda adalah pembuat kode, Anda harus memperbaiki semua kesalahan, pemberitahuan, dll. Karena ini akan menyebabkan lebih banyak masalah bagi Anda dalam jangka panjang daripada tidak memperbaikinya (terutama saat Anda meningkatkan OS Anda). Untuk server Anda, seharusnya error hanya ditampilkan di log Anda, bukan di layar klien.

Jadi untuk menghindari kesalahan di browser Anda, Anda menggunakan display_errorsbendera seperti yang sudah Anda temukan:

display_errors = Off

Sekarang masalah sebenarnya adalah ketika Anda menjalankan kode orang lain. Jika demikian, memodifikasi kode kemungkinan akan ditimpa setiap kali Anda meningkatkan kode itu. Menjaga kode itu jadi membosankan.

Dalam kasus saya, saya menjalankan PHP dengan crontabmemiliki wp-cron.phpscript yang menjalankan sesekali. Saya mendapatkan kesalahan yang dikirim ke email saya, yang menjadi membosankan ketika Anda mendapatkan satu email setiap 10 menit! Dalam hal ini, sistem Wordpress memiliki file konfigurasi yang menyertakan a WP_DEBUGdan mereka memanggil error_reporting()fungsi tersebut sehingga mencoba mengubah error_reportingvariabel pada baris perintah tidak akan berhasil. Sebagai gantinya Anda harus mengedit wp-config.phpfile di folder root dan memastikan bahwa WP_DEBUGdisetel ke false. Jika tidak, Anda akan mendapatkan semua peringatan dan pemberitahuan itu sepanjang waktu.

Alexis Wilke
sumber
0

Anda dapat memeriksa apakah konstanta sudah ditentukan menggunakan:

<?php
if (!defined('MYCONST'))
    define('MYCONST', 'Weeha!');
?>
Thiago Belem
sumber
0

Saya yakin mengomentari display_errors di php.ini tidak akan berfungsi karena defaultnya adalah On. Anda harus menyetelnya ke 'Off' sebagai gantinya.

Jangan lupa restart Apache untuk menerapkan perubahan konfigurasi.

Perhatikan juga bahwa meskipun Anda dapat menyetel display_errors saat runtime, mengubahnya di sini tidak memengaruhi kesalahan FATAL.

Seperti dicatat oleh orang lain, idealnya selama pengembangan Anda harus menjalankan error_reporting pada tingkat setinggi mungkin dan display_errors diaktifkan. Meskipun menjengkelkan ketika Anda pertama kali memulai, kesalahan, peringatan, pemberitahuan, dan saran pengkodean yang ketat ini bertambah dan memungkinkan Anda menjadi pembuat kode yang lebih baik.

AllenJB
sumber
0

Konstanta yang ditentukan ganda

Untuk memperbaiki kesalahan tertentu di sini Anda dapat memeriksa apakah konstanta sudah ditentukan sebelum menentukannya:

if ( ! defined( 'DIR_FS_CATALOG' ) ) 
  define( 'DIR_FS_CATALOG', 'something...' );

Saya pribadi mulai dengan pencarian di basis kode untuk konstanta DIR_FS_CATALOG, lalu mengganti definisi ganda dengan ini.

Menyembunyikan pemberitahuan PHP sebaris, kasus per kasus

PHP menyediakan @operator kontrol kesalahan, yang dapat Anda gunakan untuk mengabaikan fungsi tertentu yang menyebabkan pemberitahuan atau peringatan.

Dengan menggunakan ini, Anda dapat mengabaikan / menonaktifkan pemberitahuan dan peringatan kasus per kasus dalam kode Anda, yang dapat berguna untuk situasi di mana kesalahan atau pemberitahuan disengaja, direncanakan, atau benar-benar mengganggu dan tidak mungkin diselesaikan di sumbernya. . Tempatkan @sebelum fungsi atau var yang menyebabkan pemberitahuan dan itu akan diabaikan.

Berikut contohnya:

// Intentional file error
$missing_file = @file( 'non_existent_file' );

Lebih lanjut tentang ini dapat ditemukan di dokumen Operator Kontrol Kesalahan PHP .

Kevin Leary
sumber