PHP 5 menonaktifkan kesalahan standar ketat


175

Saya perlu mengatur skrip PHP saya di bagian atas untuk menonaktifkan pelaporan kesalahan untuk standar yang ketat.

Adakah yang bisa membantu?


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


11
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

error_reporting(-1);


56
+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)


2
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:

if(defined('E_STRICT')){
    error_reporting(E_ALL);
}

8

Di set php.ini:

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT

4

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