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 ..


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!


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);

?>

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.


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


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.


6

Anda mencari:

php -d error_reporting="E_ERROR | E_WARNING | E_PARSE"

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.


3

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


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.


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

1

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

Seolah-olah disihir, mereka menghilang.


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


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.


0

Anda dapat memeriksa apakah konstanta sudah ditentukan menggunakan:

<?php
if (!defined('MYCONST'))
    define('MYCONST', 'Weeha!');
?>

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.


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 .

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.