wyłączenie magic quotes gpc oraz magic quotes runtime

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.

4 Comments

  1. A co w przypadku gdy tablica $_POST jest wielowymiarowa, wtedy wywali error bo do array nie będzie mogło zrobić stripslashes

  2. tosiek

    19.06.2011 at 16:22

    Wtedy skorzystaj ze skryptu na samym dole, usuwa backslashe w tablicach wielowymiarowych.

  3. Witam,mam taki proble, i nie wiem czy to przypadkiem nie chodzi o magic_quotes_gpc. A dokladnie:

    Przygotowywalem strone na serwerze w d2, i po przecuceniu na serwer klienta mam problem z jedna rzecza a mianowicie:

    w CKEditor wklejam gotowy kod, przygotowany z innej strony (tak sobie zazyczyl klient) i problem jest z apostrofami:

    jesli sa apostrofy, to oferta sie nie dodaje, tak jak tutaj
    Cytat
    style=”font-family: ‘Jakas Czcionka’;

    jesli natomiast wyrzuce te apostrofy to juz jest wszystko ok.

    Moj klient nie chce niczego zmieniac w wklejonym kodzie i to jest jeszcze jedyny problem.
    Myslalem ze na moim serwerze jest wlaczona opcja
    Cytat
    ini_set(‘magic_quotes_gpc’, ‘On’);

    ale tez to nic nie daje,

    Prosze o pomoc co moze byc innego w wersji php, badz tez ustawieniach, ze z apostrofami u mnie wszystko dziala natomiast na serwerze klienta pojawia sie blad.

    • tosiek

      28.12.2012 at 11:53

      Jak chcesz wyłączyć to zmień na off.

      Kopiowanie sformatowanego tekstu to nie jest najlepszy pomysł. Lepiej skopiować czysty tekst i dopiero potem sformatować go w tamtym edytorze.

Dodaj komentarz