Menonaktifkan Standar Ketat di PHP 5.4


95

Saat ini saya menjalankan situs di php 5.4, sebelum ini saya menjalankan situs saya di 5.3.8. Sayangnya, php 5.4 menggabungkan E_ALLdan E_STRICT, yang berarti pengaturan saya sebelumnya untuk error_reportingtidak berfungsi sekarang. Nilai saya sebelumnya adalah E_ALL & ~E_NOTICE & ~E_STRICTHaruskah saya mengaktifkan nilai satu per satu?

Saya memiliki terlalu banyak kesalahan dan file berisi terlalu banyak kode untuk saya perbaiki.


11
Saran ... Perbaiki kode atau bug akan menjadi lebih baik dan lebih sulit untuk di-debug
Baba

7
s / Sayangnya / Untungnya
NikiC

96
Terima kasih atas sarannya, namun saya tidak memiliki pengetahuan yang diperlukan untuk menulis ulang seluruh plugin jfusion phpbb3. terima kasih karena telah merendahkan.
icomrade

12
Saya setuju dengan teman-teman kita bahwa Anda harus mencoba dan memperbaiki kesalahan, mereka mungkin datang dan menggigit pergelangan kaki Anda, juga menyembunyikan semua kesalahan sehingga sulit untuk melakukan debug. Tetapi saya juga tidak berpikir adil untuk menilai poster untuk pertanyaan sepi ini, jika Anda tidak pernah harus menulis beberapa pekerjaan mengerikan karena klien Anda sedang menelepon anak-anak Anda yang belum lahir, Anda belum cukup lama bekerja dengannya
Jonathan dos Santos

7
Ini adalah pertanyaan yang masuk akal, dan ya @icomrade - Anda benar tentang sikap merendahkan dan sarkasme di sini. Ini adalah salah satu ciri StackOverflow yang kurang menarik. Meski begitu, saya sarankan Anda menangani setidaknya beberapa peringatan yang Anda dapatkan - bahkan jika Anda tidak dapat melakukan semuanya.
halfer

Jawaban:


139

Seperti yang dinyatakan oleh pemberi komentar, opsi terbaik adalah memperbaiki kesalahan, tetapi dengan waktu atau pengetahuan yang terbatas, itu tidak selalu memungkinkan. Dalam perubahan php.ini Anda

error_reporting = E_ALL

untuk

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT

Jika Anda tidak memiliki akses ke php.ini, Anda dapat memasukkan ini ke dalam file .htaccess Anda:

php_value error_reporting 30711

Ini adalah nilai E_ALL (32767) dan menghapus nilai E_STRICT (2048) dan E_NOTICE (8).

Jika Anda tidak memiliki akses ke file .htaccess atau tidak diaktifkan, Anda mungkin perlu meletakkan ini di bagian atas bagian PHP dari skrip apa pun yang dimuat dari panggilan browser:

error_reporting(E_ALL & ~E_STRICT & ~E_NOTICE);

Salah satunya akan membantu Anda dapat menggunakan perangkat lunak. Pemberitahuan dan hal-hal yang ketat adalah indikator masalah atau potensi masalah dan Anda mungkin menemukan beberapa kode tidak berfungsi dengan benar di PHP 5.4.


11
Saya menggunakan php 5.4.5 dan saya mencoba semua cara di atas tetapi saya tidak dapat menonaktifkan pemberitahuan ketat :( ada ide lain?
ro ko

2
Anda dapat mencoba memasukkan & ~ DIHENTIKAN DENGAN bagian lain di error_reporting (). Pesan apa yang Anda lihat?
David Stockton

4
@roko Apakah mungkin kode Anda menimpa ini di suatu tempat? Saya masih melihat kesalahan ketat setelah menonaktifkannya di php.ini, kemudian saya menyadari itu hanya untuk beberapa situs web, yang menggunakan Drupal, di mana nilainya ditetapkan dalam kode
andrewtweber

1
@AndrePear Itu aneh. Secara teori, pengaturan error_reporting harus memengaruhi kesalahan yang ditampilkan di mana pun mereka ditampilkan. Pengaturan display_errors harus mempengaruhi apakah Anda mendapatkan kesalahan dalam output (di halaman PHP) dan error_log akan mempengaruhi di mana kesalahan ditulis ke log. Jika display_errors aktif maka Anda akan melihat kesalahan yang sama di layar seperti di log.
David Stockton

4
+1 untuk menjawab pertanyaan sederhana dengan jawaban sederhana tanpa berubah menjadi StackOverflow Smuglord ™.
Joshua Pech

2

.htaccess php_value hanya berfungsi jika Anda menggunakan PHP Server API sebagai modul Apache server Web. Gunakan sintaks IfModule:

# PHP 5, Apache 1 and 2.
<IfModule mod_php5.c>
    php_value error_reporting 30711
</IfModule>

Jika Anda menggunakan PHP Server API CGI / FastCGI gunakan

ini_set('error_reporting', 30711);

atau

error_reporting(E_ALL & ~E_STRICT & ~E_NOTICE);

dalam kode PHP Anda, atau file konfigurasi PHP .user.ini | modifikasi php.ini:

error_reporting = E_ALL & ~E_STRICT & ~E_NOTICE

di host virtual Anda, tingkat server.


1

Ini berhasil untuk saya, ketika saya menetapkan error_reporting di dua tempat pada waktu yang sama

di suatu tempat dalam kode PHP

ini_set('error_reporting', 30711);


dan dalam file .htaccess

php_value error_reporting 30711

Hanya hal yang berhasil untuk saya tanpa memiliki akses ke php.ini, hal lain di atas tidak akan berfungsi dengan sendirinya, hanya mengembalikan kesalahan 500. Keduanya bersama sayang !!!
Jamie Hutber

1

Jika Anda juga perlu menonaktifkan E_DEPRACATED, gunakan:

php_value error_reporting 22527

Dalam kasus saya, CMS Made Simple mengeluh "E_STRICT diaktifkan di error_reporting" serta "E_DEPRECATED is enabled". Menambahkan satu baris itu ke .htaccess memecahkan kedua kesalahan konfigurasi.


0

Perhatian, Anda mungkin perlu me-restart LAMP, Apache atau apa pun yang Anda gunakan untuk membuatnya terpengaruh. Memeras otak kita untuk sementara waktu tentang yang satu ini, sepertinya tidak berpengaruh sampai layanan dimulai ulang, mungkin karena situs web sedang dalam cache.


Nggak. Itu karena Apache perlu memuat ulang pengaturan untuk PHP. Ini AFAIK hanya dilakukan saat layanan dimulai.
svin83
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.