[PHP] Wyłączanie komunikatów notice

Problem stary jak świat. Po odpaleniu aplikacji (często na innym serwerze) wyskakuje szereg komunikatów typu notice (podkreślmy od razu bardzo ważną rzecz: notice to nie błąd). W tym wypadku przedstawiane są dwie szkoły: jedna mówi, że aplikacja nie powinna generować żadnych komunikatów, a druga uznaje, że skoro notice błędem nie jest, to może wystąpić, bo to tylko informacja dla programisty. Niezależnie od tego, którą z nich wyznajemy, ukrycie notice (jak i  błędów) jest konieczne w środowisku produkcyjnym, ze względów bezpieczeństwa.

Wykonanie tego zadania sprowadza się do dodania jednej linijki gdzieś na początku pliku PHP.

<?php
error_reporting(E_ALL ^ E_NOTICE);

To sposób jednorazowy/doraźny. Jeżeli chcemy załatwić sprawę na stałe i mamy taką możliwość to po prostu edytujemy plik php.ini i tak jak wyżej zmieniamy wartość dyrektywy error_reporting na E_ALL ^ E_NOTICE.

PS: Wiem, ze problem jest oklepany, ale będzie gdzie odsyłać kolejnych ludzi mówiących o "błędach notice".

Walka z falą błędów 404

Witajcie,

jak może część z Was pamięta, przy ostatniej migracji zmieniłem lekko format linków prowadzących do wpisów. Uważałem, że pozbycie się ID notek z adresów będzie dobrym posunięciem, bo wtedy linki staną się zwyczajnie prostsze. Założenie dobre, a wyszło… jak zwykle ;)

Można mi się dziwić czemu nie zadbałem o przekierowania ze starych adresów na nowe - po prostu sądziłem, że Google znacznie szybciej zreindeksuje strony. Tak czy siak problem narastał, zainstalowałem wtyczkę 404 redirected by Weberz. Za jej pomocą ustawiłem kilkadziesiąt ręcznych przekierowań 301 na nowe adresy, sama wtyczka utworzyła ich ponad 800. Mimo wszystko Centrum dla Webmasterów od Google nadal informowało o rosnącej liczbie błędów 404 na mojej stronie. Czymś co najbardziej mnie martwiło, jest to, że liczba błędów 404 wykazywanych przez Google z każdym dniem rośnie (aktualnie koło 480).

W pewnym momencie nowe przekierowania dodawane w wyżej wspomnianej wtyczce po prostu przestały mi działać. Dlatego poszukałem innych rozwiązań - dodatkowo doinstalowałem  (starej nie usuwałem, ze względu na te ponad 800 już ustawionych redirectów)  wtyczkę Redirection.

W końcu stwierdziłem, że ręczne dodawanie kolejnych przekierowań mija się z celem i postanowiłem zautomatyzować proces. Napisałem na tą okoliczność mały skrypcik, który przedstawiam poniżej.

<?php
$mysqli = new mysqli('serwer', 'user', 'haselko', 'baza');

$result = $mysqli -> query("SELECT ID, post_name FROM wp_posts WHERE post_status = 'publish' AND post_type = 'post'");

$i = 1;
while ($row = $result -> fetch_array()) {
	$mysqli -> query("INSERT INTO wp_redirection_items SET url = '/".$row['ID']."/".$row['post_name']."/', action_data = '/".$row['post_name']."/', regex = 0, position = $i, group_id = 1, status = 'enabled', action_type = 'url', action_code = 301, match_type = 'url';");
	$mysqli -> query("INSERT INTO wp_redirection_items SET url = '/".$row['ID']."/".$row['post_name']."', action_data = '/".$row['post_name']."/', regex = 0, position = $i, group_id = 1, status = 'enabled', action_type = 'url', action_code = 301, match_type = 'url';");
	$mysqli -> query("INSERT INTO wp_redirection_items SET url = '/".$row['ID']."/', action_data = '/".$row['post_name']."/', regex = 0, position = $i, group_id = 1, status = 'enabled', action_type = 'url', action_code = 301, match_type = 'url';");
	$mysqli -> query("INSERT INTO wp_redirection_items SET url = '/".$row['ID']."', action_data = '/".$row['post_name']."/', regex = 0, position = $i, group_id = 1, status = 'enabled', action_type = 'url', action_code = 301, match_type = 'url';");
	++$i;
}

Skrypt dodaje rekordy do tabeli wyżej wspomnianego pluginu - we wszystkich formatach, w jakich mogą być spotykane w na moim blogu lub indeksach Google. W ten sposób z automatu dodałem 456 przekierowań (liczba wpisów * 4 możliwe warianty).

Mam nadzieję, że to rozwiąże problem i liczba stron z błędami 404 zacznie spadać. W najbliższym czasie podzielę się wynikami.