Wyłącz przestarzałe błędy w PHP 5.3


128

Na moim serwerze działa PHP 5.3, a moja instalacja WordPress wypluwa na mnie te błędy, powodując awarię sesji session_start ().

Deprecated: Assigning the return value of new by reference is deprecated in /home//public_html/hub/wp-settings.php on line 647

Deprecated: Assigning the return value of new by reference is deprecated in /home//public_html/hub/wp-settings.php on line 662

Deprecated: Assigning the return value of new by reference is deprecated in /home//public_html/hub/wp-settings.php on line 669

Deprecated: Assigning the return value of new by reference is deprecated in /home//public_html/hub/wp-settings.php on line 676

Deprecated: Assigning the return value of new by reference is deprecated in /home//public_html/hub/wp-settings.php on line 712

To denerwujące, ale nie chcę wyłączać raportowania błędów na ekranie. Jak wyłączyć te uciążliwe przestarzałe ostrzeżenia?

Używam WordPress 2.9.2.


Czy wersja 3.3.1 nie jest aktualną wersją Wordpress?
Shadur

wydaje się, że lubi starego php ze starym wordpressem
Qchmqs,

Odpowiedzi:


207

Możesz to zrobić w kodzie, wywołując następujące funkcje.

error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

lub

error_reporting(E_ALL ^ E_DEPRECATED);

Dziękuję Robus, czy to zabije również raportowanie błędów PHP?
atwellpub

6
Nie, pierwsza w zasadzie mówi php, żeby pokazywała błędy ERROR / WARNING / PARSE / NOTICE, druga mówi php, żeby pokazywała wszystkie błędy oprócz DEPRECATED.
Robus

1
Używanie PHP 5.5.9 w Ubuntu "error_reporting = E_ALL & ~ E_DEPRECATED & ~ E_STRICT" Nie ma żadnego efektu .... ale w moim przykładzie "@mysql_connect ();"
załatw sprawę

@molokoloco zrobiłeś to dwa razy źle. Najpierw nic nie naprawiłeś. Po prostu to uciszyłeś. Po drugie, nadal używasz tego, mysqlktóry jest przestarzały. Powinieneś przynajmniej przełączyć się namysqli
Marcin Orłowski

Nie działa. Czy jest gdzieś nadpisany? Gdzie to położyłeś?
Alex,


22

Aby uzyskać tylko te błędy, które powodują, że aplikacja przestaje działać, użyj:

error_reporting(E_ALL ^ (E_NOTICE | E_WARNING | E_DEPRECATED));

Spowoduje to zaprzestanie wyświetlania powiadomień, ostrzeżeń i przestarzałych błędów.


13

Wszystkie poprzednie odpowiedzi są prawidłowe. Ponieważ nikt nie podpowiedział, jak wyłączyć wszystkie błędy w PHP, chciałbym o tym tutaj wspomnieć:

error_reporting(0); // Turn off warning, deprecated,
                    // notice everything except error

Ktoś może uznać to za przydatne ...


11

Właśnie spotkałem się z podobnym problemem, w którym wtyczka SEO wyświetlała dużą liczbę ostrzeżeń, powodując, że wykorzystanie mojego dysku bloga przekroczyło limit planu.

Dowiedziałem się, że musisz dołączyć polecenie error_reporting po wymaganym przez wp-settings.php pliku wp-config.php:

   require_once( ABSPATH .'wp-settings.php' );
   error_reporting( E_ALL ^ ( E_NOTICE | E_WARNING | E_DEPRECATED ) );

w ten sposób żadne ostrzeżenia, uwagi ani przestarzałe wiersze nie są dodawane do pliku dziennika błędów!

Testowane na WordPress 3.8, ale myślę, że działa przy każdej instalacji.


9

W pliku wp-config.php można znaleźć stałą WP_DEBUG. Upewnij się, że ma wartość false.

define('WP_DEBUG', false);

To jest dla WordPress 3.x.


7

Musisz edytować plik konfiguracyjny PHP. Znajdź linię

error_reporting = E_ALL

i zamień na:

error_reporting = E_ALL ^ E_DEPRECATED

Jeśli nie masz dostępu do pliku konfiguracyjnego, możesz dodać tę linię do pliku PHP WordPress (np. Headers.php):

error_reporting(E_ALL ^ E_DEPRECATED);

O wiele lepiej to dodać wp-config.php. Jest przeznaczony do edycji z ustawieniami konfiguracji.
Nilpo

4

Zwykle używam tej metody

$errorlevel=error_reporting();
$errorlevel=error_reporting($errorlevel & ~E_DEPRECATED);

W ten sposób nie wyłączam przypadkowo czegoś, czego potrzebuję


1
To daje mniej kontroli. Zakładasz, że wszystko, co jest obecnie skonfigurowane, jest poprawne. Lepiej jest ustawić to bezpośrednio w razie potrzeby, aby nie uzyskać nakładających się konfiguracji.
Nilpo

Rozumiesz. Każdy przypadek jest inny.
realtebo

1
Mimo wszystko jest to najlepsza odpowiedź. Jako jedyny bezpośrednio odpowiada na pytanie: wyłącz tylko E_DEPRECATED, bez żadnych skutków ubocznych.
Sygmoral

-3

ten błąd występuje, gdy zmienisz wersję php: bardzo łatwo jest pominąć ten komunikat o błędzie

Aby ukryć komunikat o błędzie DEPRECATED, po prostu dodaj poniższy kod do pliku index.php:

init_set ('display_errors', False);


nie rób tego, to ukrywa wszystkie komunikaty o błędach, nie tylko w przypadku amortyzacji.
tanaydin
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.