magiq quotes

Статус
В этой теме нельзя размещать новые ответы.

Kirill

Новичок
magiq quotes

Имеется скрипт (cms) который корректно работает с выключенным magiq_quotes. Система расчитана на продажу, поэтому вполне возможно она будет запускаться и на машинах с включенным параметром magic_quotes_gpc (который отключить из скрипта нельзя).
Видятся след. решения проблемы:
-написать пользователю предупреждение что будет корректно работаьть только с выкл. magiq_quotes
-при инициализации скрипта, если включен параметр magiq_quotes_gpc пробегаться по всему массиву POST, GET, COOKIE (рекурсивно) и к каждому элементу применять stripsleshas
-при присвоении переменной какого-либо значения из этих массивов(GET, POST, COOKIE) использовать функции, которые будут в зависимости от установленных параметров возвращать либо само значение, либо предварительно обработанное stripslashes.

Кто что может посоветовать? Как обычно это реализовывается в крупных проектах?
 

maxru

МИФИст
Эээ... я бы написал функцию decodeMQGPC($value), которая проверяла бы текущее значение magic_quotes_gpc и если ==1, то возвращала stripslashes, иначе - просто возвращала значение. Вот и обрабатывай все, что ты получаешь извне этой функцией.
 

MadGreen

meninweb
я тоже при получении всех POST, GET, COOKIE сразу обрабатываю данные функцией наподобие описанной maxru
И крупный проект или не очень - большого значения не имеет..
 

Luerssen

Новичок
А как же, всеми любимый .htaccess?
Или он уже не считается, частью скрипта?
 

Фанат

oncle terrible
Команда форума
и какое отношение имеет .htaccess к вопросу?

-~{}~ 24.02.07 15:03:

а точнее, как наличие или отсутствия .htaccess может повлиять на постановку вопроса?
 

dark-demon

d(^-^)b
Фанат, в нём можно менять некоторые установки php.
Kirill, лучше совместить первый и второй варианты.
 

Фанат

oncle terrible
Команда форума
dark-demon
Спасибо, ты открыл мне глаза. за 8 лет работы с пхп ты первый, кто мне об этом сообщил.

вот только вопрос остался прежним. как возможность менять некоторые установки php влияет на постановку вопроса.

И, если кто не заметил ни в тексте, ни в обсуждении, первое - это вообще не вариант, и объединять его со вторым - глупость несусветная. Не находишь?
 

Kirill

Новичок
Фанат, почему 3 - это не решение (создать функцию наподобие описанной maxru)?
 

Фанат

oncle terrible
Команда форума
потому что maxru пишет про 2.

-~{}~ 24.02.07 21:40:

а в 3 смысла вообще нету.
ну пострипаешь при присвоении. а если будешь юзать без присвоения - тогда что?
 

Kirill

Новичок
ок, спасибо убедил. Кстати, кому надо на php.net есть уже написанная функция для этих целей (немного доработаь):

function StripAllSlashes (&$ArrayGET, $Value)
{
if (is_array ($ArrayGET)) array_walk ($ArrayGET, "StripAllSlashes");
else $ArrayGET = stripslashes ($ArrayGET);
}
if (isset ($_GET) && get_magic_quotes_gpc ()) array_walk ($_GET, "StripAllSlashes");

Оригинал http://ru.php.net/manual/ru/function.array-walk.php#45363
 

Фанат

oncle terrible
Команда форума
Убедить тебя должен не я, а простая логика.

а за функцию тебе тоже спасибо.
чтобы я только делал без вас, добрые дети...
 

SiMM

Новичок
За 2 с лишним года ни разу не прочесть FAQ - это нонсенс :)
PHP:
if (isset ($_GET) ... ) ...
Зачотно :)
 

dark-demon

d(^-^)b
Фанат, меня не интересует, сколько ты времени программируешь на PHP. ты спросил - я ответил.
а совместить первые два варианта - очень даже правильное решение. если тот, кто будет устанавливать систему, не может правильно настроить веб-сервер, то скрипт будет исправлять испорченные переменные, а в еррорлоге будут записи типа: сейчас скрипт занимается всякой ерундой потому, что вы не удосужились настроить сервер, если вы хотите оптимизировать его работу и избавиться от этого нотиса, произведите следующие нехитрые упражнения...
 

Vladson

Сильнобухер
Проще всего отключать magic_quotes через .htaccess
Код:
<IfModule mod_php5.c>
	php_flag	magic_quotes_gpc	Off
</IfModule>
В исключительных случаях (на некоторых бесплатных хостах где нет такой возможности) можно сделать функцию на подобии той что приведена выше.

Например
PHP:
<?php
if (get_magic_quotes_gpc()) {
    array_walk_recursive($_GET, create_function( '$val, $key', '$_GET[$key] = stripslashes($val);'));
    array_walk_recursive($_POST, create_function( '$val, $key', '$_POST[$key] = stripslashes($val);'));
    array_walk_recursive($_COOKIE, create_function( '$val, $key', '$_COOKIE[$key] = stripslashes($val);'));
}
?>
Хотя чаще всего я просто при получении параметра проверяю настройки и делаю соответствующие действия
PHP:
<?php
$text = get_magic_quotes_gpc() ? stripslashes($_POST['text']) : $_POST['text'];
?>
 

jonjonson

Охренеть
dark-demon, Vladson, а вы не думаете, что Фанат по этой теме собаку съел? Вот его классический текст http://phpfaq.ru/slashes


dark-demon, касательно первого и третьего... Если задачу можно решить раз и на всегда незаметно от пользователя первыйнах, а третий добавление повторного кода, который вы так якобы не любите http://phpclub.ru/talk/showthread.php?postid=698184#post698184
Второй вариант описан у Фанат. Если и после этого разжёвывания есть проблемы с понимание, то ой :)
 

Vladson

Сильнобухер
jonjonson
А я разве спорил с тем что он собак ест ?
Я только привёл свои примеры (которыми пользовался лично)
 

Фанат

oncle terrible
Команда форума
очень грустно, когда у людей с головой проблемы.
очень грустно, когда они считают, будто обман пользователя - это решение проблемы.
очень грустно, когда люди не читают текст, а видят собственные фантазии.
Не увидеть, что первые два варианта просто противоречат друг другу, может только слепой. или тупой.
если речь идёт о рекомендации настроить сервер, то при чем здесь тогда первый пункт вообще? Который просто говорит пользователяю, что скрипт при определённых условиях работать не будет?
но если объединять со вторым, и скрипт БУДЕТ, то какой смысл писать, что не будет? идиотизм.

что здесь обсуждается? Работоспособность скрипта или отмазки перед пользователем?
Неужели кто-то думает, что второе?
ЕДИНСТВЕННЫМ стопроцентно рабочим вариантом является второй. Всё остальное - по желанию.

и так у них во всем...

причем я готов поверить, что часть присутствующих вполне себе грамотные разработчики и даже могут накропать скрипт-другой. Но именно это их и губит. Они в принципе не могут прочесть вопрос полностью. а видят только знакомые слова и вспоминают два похожих случая, встречавшихся им в жизни. и отвечают не на вопрос, а рассказывают, как старые ветераны, строго про свой случай "а вот у нас в бердичеве..."
 

dark-demon

d(^-^)b
Фанат, "некорректно работать" - это не обязательно означает "упадёт с громкими матами". выполнение магических операций над данными - это тоже некорректная с точки зрения логики работа, хотя и не приводящая к фатальным ошибкам.
в общем, не занимайся буквоедством, я уже подробно расписал свою точку зрения.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху