Citate magice - fracții în loc de citate pe site

Citate magice - fracții în loc de citate pe site
Citate Magice în PHP

Acest articol va spune incepatori PageRanker.Ru precum și cei care au deja o experiență de programare în PHP, așa-numitele „citate magice“.







Dacă sunteți pe site-ul sunt afișate datele introduse incorect - citate sunt înlocuite cu fracțiuni multiple sau utilizarea de link-uri nu este posibil, problema este cel mai probabil de a utiliza citate magie caracteristica

Ce este Magic Quotes?

Dacă ne uităm la noi în php.ini, vom găsi acolo trei directive:
magic_quotes_qpc
magic_quotes_runtime
magic_quotes_sybase

Fiecare dintre ele poate fi activată (Activată) sau oprită (Dezactivată).

Aceste directive sunt responsabile de screening-ul caracterelor speciale în diverse date care intră în scriptul php și se creează din script-ul php.

magic_quotes_qpc

În cazul în care Directiva magic_quotes_qpc este activată, caractere speciale scăpat din următoarele surse: $ _GET, $ _POST, $ _REQUEST, $ _COOKIE, $ _ENV (în PHP4). Apropo, la sfârșitul numelui acestei directive GPC este o abreviere GET / POST / COOKIE.

De exemplu, dacă într-una dintre aceste surse vor fi un element, cum ar fi un marcaj unic citat ( „), citat dublu („), backslash (\) sau NULL caractere, acest element va fi protejat în mod automat de către un backslash:

echo $ test; // print: \ '123 \'

Citate magice - fracții în loc de citate pe site
Astfel, dacă vrem să scriem date de la $ _REQUEST în baza de date MySQL, de exemplu, atunci nu trebuie să scăpăm de ghilimele cu funcția addslashes. acestea vor fi deja examinate. Dar dacă magic_quotes_gpc este dezactivat, atunci trebuie să evadezi cu forța:

dacă (! get_magic_quotes_gpc ()) $ test = addslashes ($ test);
>

mysql_query ($ res, "INSERT INTO test_table (test) VALUES ($ test)");







După cum puteți vedea aici, am folosit funcția get_magic_quotes_gpc pentru a verifica starea directivei magic_quotes_gpc. Dacă directiva este oprită, atunci voi scăpa de variabila de testare $. În caz contrar, nu puteți scăpa deoarece. obținem o examinare dublă. Ie dacă magic_quotes_gpc este activată, atunci:

echo $ test; // print: \\\ '123 \\\'

Ie am ecranul ecranat

Directiva magic_quotes_gpc scapă numai de citate unică dacă este inclusă și directiva magic_quotes_sybase. Și face o singură citare:

echo $ test; // print: "123"

magic_quotes_runtime

Dacă această directivă, cele mai multe funcții care returnează date de instanța bazei de date, sau fișiere text, va reveni la ecranul datele text. Și în cazul în care aditivii incluși Directiva magic_quotes_sybase apoi sortate ghilimele simple, nu backslash și o singură ofertă.

magic_quotes_sybase

Această directivă în apendice la cele două anterioare, după cum sa spus, doar schimba regulile de ecranare un singur citat și ecranare dezactivează caractere rămase (dublu ghilimele, backslash, și NULL caractere).

Personal, nu înțeleg de ce trebuie să citezi citatul cu un alt citare. Dar se pare că a fost o dată necesară.

Cum se iau în considerare toate acestea?

Pentru a începe cu, că directiva magic_quotes_runtime magic_quotes_sybase și poate fi pornit / oprit direct într-un script PHP:

ini_set ('magic_quotes_runtime', 0);
ini_set ('magic_quotes_sybase', 0);

Și recomand acest lucru tuturor.

Soluția problemei cu afișarea de fracții pe site poate fi tocmai dezactivarea funcției de ghilimele magice prin intermediul fișierului de sistem .htaccess

Dar valoarea directivei magic_quotes_qpc poate fi setată numai în php.ini. htaccess sau httpd.conf. Dar de multe ori furnizorul de hosting ne permite să editați doar .htaccess, și chiar și atunci nu întotdeauna. Prin urmare, există doar o singură concluzie: trebuie doar să ia în considerare magic_quotes_qpc de valoare atunci când se utilizează script-uri, pentru a evita proiectii inutile, sau invers, nedoekranirovany Dacă această directivă este dezactivată, utilizarea addslashes a datelor de intrare externe (de la sursele menționate anterior).

Cu condiția, bineînțeles, ca celelalte două directive să fie în statul Off.

De asemenea, se întâmplă ca furnizorul de gazde să blocheze funcția ini_set. În acest caz, trebuie să verificați valorile directivelor cu ajutorul ini_get. Și dacă valorile nu ne sunt potrivite, atunci este mai bine să contactați suportul tehnic de găzduire cu solicitarea de a dezactiva aceste directive.

Cum să dezactivați citatele magice?

Pentru a dezactiva citate magice

  1. creați un fișier .htaccess în director (trebuie să înceapă cu un punct)
  2. inserați următoarea linie în linia: php_flag magic_quotes_gpc oprit
  3. completați serverul

Dacă furnizorul de gazduire a permis ca fișierul .htaccess să fie utilizat, atunci totul ar trebui să funcționeze.

Pentru a testa, a funcționat sau nu

  1. creați un fișier PHP cu un șir
  2. completați-l cu un server, lansați-l
  3. căutați parametrul magic_quotes_gpc. Coloana Valoare locală trebuie să fie OFF

Cum să dezactivați citatele magice prin .htaccess?

Dacă serverul resursei dvs. web este pe Apache, cea mai ușoară soluție la problema cu citate magice este să adăugați acest cod în fișierul .htaccess al sistemului:


php_value magic_quotes_gpc oprit

Citatele Magic sunt cu siguranță lucruri învechite, dar nu le luăm în considerare este periculos în situația actuală, până când lumea merge la PHP6.







Trimiteți-le prietenilor: