За последние 24 часа нас посетили 17542 программиста и 1607 роботов. Сейчас ищут 1140 программистов ...

обнуление всех переменых

Тема в разделе "PHP для новичков", создана пользователем antonn, 21 ноя 2007.

  1. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    есть скрипт, принимает параметр (get/post), мурыжит его, по окончании нужно определить, какой скрипт должен работать дальше - index.php или same.php. Редирект нельзя делать. Получается лучше следать include('index.php')? А как удалить все переменные из начального скрипта, удалить, если был, вывод в браузер, в общем сделать так, чтобы при отрабоке index.php все было для него так же, как при прямом вызове?
     
  2. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    Что это означает?
    нельзя Header()
    или нельзя echo '<script type="text/javascript">window.location=...</script>
    ?

    что-то на тему body.innerHTML=
    и смотреть что там с заголовками и т.п.
     
  3. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    означает, что скрипт лежит в папке, защимщенной htaccess с "дени фром алл" :)
    меня интересовало, чтобы именно убить все переменные скрипта, который определяет, какой инклудить - задалбает перебирать все и писать для них unset();
     
  4. Anonymous

    Anonymous Guest

    PHP:
    1. <?php
    2. foreach($sui as $key=>$val) unset($$key);
    3. ?>
    А вообще, ошибка гораздо раньше, в планировании...
     
  5. QQQ

    QQQ Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    Переписать скрипт.

    1) Юзать в нём все переменные через некий массив (не $a, $b, $c, а скажем $_AR['a'], $_AR['b'], $_AR['c']) - потом unset массива
    2) Извращенство конечно... но засунуть весь код первого скрипта в функцию, по выходу выдавать имя скрипта, который надо инклюдить

    Убить вывод? А зачем его делать раньше времени? Пиши весь вывод в переменную, а в конце echo


    Но ИМХО ты извращенец, и движок, который ты пытаешся мутить - извращенство :) Так жить нельзя :)



    Ты можешь по-человечески объяснить в чём твоя гениальная задумка, что тебе нужно именно такую ужасную схему использовать?? :D
     
  6. QQQ

    QQQ Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    Горбунов Олег
    get_defined_vars(); - прикольно, не знал )
     
  7. Anonymous

    Anonymous Guest

    Ага... эмуляция пространства имен в php всегда лишь эмуляция... =) в php 6 вроде, будут реализованы.
     
  8. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    PHP:
    1. <?php
    2. foreach(get_defined_vars() as $key=>$val) unset($$key);
    3. print_r($_SERVER);
    Отгадай результат :)
     
  9. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    launch.php:
    PHP:
    1. <?php
    2. unset($_POST);
    3. unset($_GET);
    4. include('includes/greatprotectedscript.php');
    5. ?>
    ...

    greatprotectedscript.php:

    PHP:
    1. ...
    2. echo '<script type="text/javascript">window.location="launch.php"</script> ';
    3. ?>
     
  10. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    прикольно :))

    короче, сказали сделать поддомены. С интеграцией в основной сайт, и без его модификаций (не смейтесь :) )
    ничего более умного, чем реализацию через htaccess я не придумал:) Только дилема, либо делать в нем обращение к sub.php в корне сайта, передавать через get/post имя поддомена и имя скрипта, и после кучи перепроверок инклудить "поддоменные" скрипты из папки поддомена. (ну а если, например, нужна регистрация - выдавать форму логина основного сайта - вот почему нужно убивать переменные, мало ли, что там в той форме они сделают, если и там такие же имена).
    либо я делаю в htaccess обращение к скрипту в папке /поддомены/поддомен без каких либо лишних проверок из первого варианта, но тогда я не могу инклудить скрипты из основного сайта - она там настроены так, что сработают если запущен index.php из корня, т.е. если "текущая директория php" - корень основного.
    В первом способе косяк в том, что картинки и прочую дребедень придется тоже скриптом отдавать, и мне это чет не нравится :))
    Во втором - я не знаю, как сменить "текущий каталог php"... Если подскажите как, вопрос из нулевого поста сам собой аннигилируется :)
     
  11. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    chdir() %)
     
  12. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    PHP:
    1. <?php
    2. // Твой первый скрипт
    3. $var = 1;
    4. $str = '123';
    5.  
    6. clear_globals();
    7. // Новый скрипт
    8.  
    9. function clear_globals() {
    10.     foreach ($GLOBALS as $k => $v) {
    11.         if ($k[0] == '_' || $k == 'GLOBALS') continue;
    12.         unset($GLOBALS[$k]);
    13.     }
    14. }
    Я как-нибудь бы так сделал.
     
  13. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    Sergey89
    да, сделал примерно так, только с префиксом подлинее в начале имен переменных :) люблю нижний прочерк, поэтому у меня он тоже понапихан :)

    тупурь у меня вопросец потрудней, но вынесу в другую ветку :)
     
  14. Mavir

    Mavir Guest

    Я бы инклюдил файл в функции, так как в функции не видны внешние переменные (кроме глобальных, разумеется).
     
  15. Anonymous

    Anonymous Guest

    Эт частности. )