|
Ако сте се занимавали с обработка на текстови данни от формуляри, сигурно вече сте се се сблъсквали с неприятния проблем около магическите кавички. Същността на проблема е в това, че когато конфигурационната директива magic_quotes_gpc е включена, енджина на PHP сам поставя "обезопасителни" наклонени черти преди всички кавички в стойностите на суперглобалните променливи $_GET, $_POST, $_COOKIE, $_SERVER и т.н.
Идеята за магическите кавички е възникнала в по-ранните версии на PHP, когато разработчиците на езика са се опасявали, че има твърде много неразумни "разработчици", които никога няма да извикат функцията addslashes() върху някой низ преди да го използват в SQL заявка например. За всички останали разумни хора магическите кавички са просто едно неудобство. Когато те са включени, и някой потребител въведе стойността "It's me" в дадено текстово поле на формуляр, то истинската стойност на променливата, когато тя бъде получена от обработващия PHP скрипт ще бъде "It\'s me". Добре написания PHP код не трябва да разчита на magic_quotes_gpc. Всички разработчици на езика насърчават хората да спрат да използват magic_quotes_gpc. Дори е планувано в PHP6 тази директива да бъде напълно премахната. Как да ги предотвратим? Сега следва да ви покажа няколко начина, чрез които можете да развалите "магията" на магическите кавички. Първи начин: директно от php.ini Ако сървъра е ваш или имате възможност да редактирате php.ini, тогава отворете този файл и просто напишете "Off" срещу директивата magic_quotes_gpc. Втори начин: чрез .htaccess файл Ако хоствате сайта си на споделен сървър, едва ли ще е възможно да редактирате php.ini. Но при повечето хостове е позволено да слагате .htaccess файлове във вашите директории. Напишете следното във файл, наречен ".htaccess": CODE
След това качете този файл в директорията, където са вашите PHP скриптове и така те вече няма да бъдат "омагьосвани" от магическите кавички. Трети начин: динамично разваляне на магията по време на изпълнение Сигурно някои от вас си задават въпроса: не може ли това да стане просто с един ред като този: ini_set("magic_quotes_gpc", 0)? Отговорът е НЕ. Ако се разровите в PHP документацията, ще видите, че директивата magic_quotes_gpc е от ниво PHP_INI_PERDIR|PHP_INI_SYSTEM. Това означава, че тя може да се променя по горните два начина, които вече обясних, но не и по време на изпълнение. Причината е в това, че енджина на PHP слага тези наклонени черти още преди изпълнението на скрипта, при регистрирането на суперглобалните променливи. Но както знаете няма невъзможни неща, и аз обичам да казвам, че когато нещо не може да се направи по стандартен начин, винаги е възможно да се заобиколи като се приложи някаква хитрост: CODE
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||









