Wyłączenie magic_quotes_gpc

Otóż co możemy poradzić na kłopotliwe magic quotes gpc oraz magic quotes runtime które dodają nam w naszych danych niechciane backslashe za pomocą addslashes

magic_quotes_gpc dodaje nam backslashe w tablicach Get, Post oraz Cookie przed znakami cudzysłowów

magic_quotes_runtime tak samo jak wyżej, ale dodaje backslashe w danych z zewnętrznych źródeł (baza mysql, otwierane pliki)

Za pomocą konfiguracji php

Niestety ten sposób zadziała tylko jeśli możemy konfigurować interpreter php za pomocą plików php.ini, co rzadko jest dostępne na hostingach ale można spróbować stworzyć taki plik w katalogu głównym domeny

Więc modyfikujemy dwa wpisy aby miały wartość Off

magic_quotes_gpc = Off
magic_quotes_runtime = Off

Za pomocą pliku .htaccess

Pamiętaj wszystkie podkatalogi dziedziczą ustawienia pliku .htaccess
Niestety ale i to może nie zadziałać. Otwieramy plik .htaccess w głównym katalogu domeny (jeśli nie istnieje należy go utworzyć) i dodajemy w nim takie linijki:

php_flag magic_quotes_gpc off
php_flag magic_quotes_runtime off

Konfiguracja w skrypcie php

Możemy spróbować także wyłączyć te dwie funkcje bezpośrednio w skrypcie php za pomocą tych dwóch linijek:

ini_set('magic_quotes_runtime', 'Off');

Niestety ini_set(‘magic_quotes_gpc’, ‘Off’); dyrektywa magic_quotes_gpc jest typu PHP_INI_PERDIR i nie da się jej zmienić za pomocą ini_set();

W przypadku niemożności wyłączenia

W przypadku gdy nie możemy tego wyłączyć to możemy skontaktować się z adminem lub na początku skryptu dodać taki mały skrypcik który oczyści nasze dane za pomocą stripslashes (niestety dane z plików i baz mysql musimy ręcznie czyścić poprzez stripslashes)

if (get_magic_quotes_gpc ()) {
 
	function stripslashes_deep($value) {
		$value = is_array($value) ? array_map('stripslashes_deep', $value) : stripslashes($value);
		return $value;
	}
 
	$_POST = (isset($_POST) && !empty($_POST)) ? array_map('stripslashes_deep', $_POST) : array();
	$_GET = (isset($_GET) && !empty($_GET)) ? array_map('stripslashes_deep', $_GET) : array();
	$_COOKIE = (isset($_COOKIE) && !empty($_COOKIE)) ? array_map('stripslashes_deep', $_COOKIE) : array();
	$_REQUEST = (isset($_REQUEST) && !empty($_REQUEST)) ? array_map('stripslashes_deep', $_REQUEST) : array();
}

Który sprawdzi czy magic_quotes_gpc jest włączone i w razie potrzeby oczyści nam jedną z tablic $_COOKIE, $_GET lub $_POST

Aktualny stan magic quotes gpc oraz magic quotes runtime można sprawdzać odpowiednio za pomocą:

get_magic_quotes_gpc()
get_magic_quotes_runtime()

Obydwie funkcje zwracają 1 (true) jeśli opcja jest włączona lub 0 (false) gdy jest wyłączona.