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.

atwellpub
źródło
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);
Robus
źródło
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,
23

Musiałem to dostosować

error_reporting = E_ALL & ~E_DEPRECATED
Simon H.
źródło
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.

codefreak
źródło
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 ...

sudip
źródło
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.

Camaleo
źródło
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.

Audrius
źródło
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);
Kreker
źródło
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ę

realtebo
źródło
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);

dheerendra
źródło
nie rób tego, to ukrywa wszystkie komunikaty o błędach, nie tylko w przypadku amortyzacji.
tanaydin