Переход с PHP4 на PHP5

Тема в разделе "PHP", создана пользователем karapet, 11 май 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. karapet

    karapet

    Регистр.:
    9 сен 2008
    Сообщения:
    168
    Симпатии:
    104
    Вообщем есть движок один, писал знакомый давненько.. Думаю его под сателиты попробовать доделать, но вот встала проблема в том что он писался на PHP4 и теперь на денвере с PHP5 отказывается работать.. Я уже почти докатился до прописывания в начале типа:

    Код:
    $content = $_POST['content'];
    $title = $_GET['title'];
    $id_news = ($_POST['id_news']?$_POST['id_news']:$_GET['id_news']);
    $edit_news = ($_GET['edit_news']?$_POST['edit_news']:$_GET['edit_news']);
    и т.д...
    но головой понимаю что должно быть какоето простое решение нежели переименовывать во всем скрипте все переменные или как я... гдето встречался пример перехода, но гугль щас чето отказывается мне показывать(((
     
  2. -=Xardas=-

    -=Xardas=-

    Регистр.:
    17 сен 2008
    Сообщения:
    250
    Симпатии:
    58
    если хочеш что бы работал можно сделать в конфиге php
    register_globals = on
    но это не есть гуд, так что лучше перепиши код, ИМХО. :)
     
  3. Liver

    Liver

    Регистр.:
    24 сен 2008
    Сообщения:
    316
    Симпатии:
    91
    Не в конфиге, который недоступен обычно, а в .htaccess
    php_value register_globals on

    вместо
    $id_news = ($_POST['id_news']?$_POST['id_news']:$_GET['id_news']);
    удобнее
    $id_news = $_REQUEST['id_news'];

    ну и на крайний случай, если регистер_глобалс не врубается (такое видел тоже), то как очень плохой, но быстрый костыль
    extract ($_REQUEST);
     
  4. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    591
    Что приведёт к 500 ошибке при установке PHP как *CGI.
    Не стоит отвечать столь категорично.
    Да и речь в топике о денвере, а не хостинге.

    По сабжу - потратить один или два или 3 дня и добавить везде где надо $_GET|POST.
    Или же воспользоваться советом из поста #2 (для денвера это не критично).
     
  5. Liver

    Liver

    Регистр.:
    24 сен 2008
    Сообщения:
    316
    Симпатии:
    91
    На такой случай советуют, как вариант, такое.
    php_admin_flag register_globals on

    я не пробовал. регистер_глобалс мне нафиг не нужно

    Речь идет о движке, который приспосабливают под саттелиты. Из этого делаем вывод, что движок будет движком саттелита и на денвере только напильником дорабатывается. А саттелиты на денвере никому не нужны.

    И не всегда можно потратить 2-3 дня на ручную доработку. Писал не он, а раньше как писали (и я в том числе) - не обозначиваю переменные, которые приходят мне, а использую их там, где мне надо. И чтобы найти их надо шерстить хмтл, либо обмен с сервером. Либо логить ошибки, но в старых скриптах варнингов и нотисов столько, что закачаешься. Я вот вчера модуль к форуму IPB включил вывод ошибок и там количество ошибок на 3 раза прокрутить страницу, прежде чем вывод нормальный пойдет.
     
  6. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    591
    Какой такой случай?
    При установке PHP как CGI, любая дирректива php_* в htaccess приведёт к Internal Server Error.

    Ух ты :)
    А прописывание
    займёт много меньше времени? Разговор о целесообразности проверки как пришла переменная вообще опустим.
     
  7. karapet

    karapet

    Регистр.:
    9 сен 2008
    Сообщения:
    168
    Симпатии:
    104

    решил остановиться на:

    Код:
    foreach($_REQUEST as $k=>$v)
    {
     $$k=$v;
    }
    
    как ни странно, все вроде нормально работает :) только вот какие минусы у данного решения и насколько оно безопасно? при условии что сам по себе код тоже был безопасен на PHP4 :)
     
  8. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    591
    Безопасно оно ровно на столько, насколько было безопасно на PHP4.
    Минусы - накладные расходы на эмуляцию register_globals.
     
  9. ev09

    ev09 Постоялец

    Регистр.:
    7 апр 2007
    Сообщения:
    117
    Симпатии:
    4
    class Foo {
    function Foo($class)
    {
    $this = new $class;
    }
    }
    class Bar {
    }
    $foobar = new Foo('Bar');
    // Fatal error: Cannot re-assign $this

    подскажите как лучше такую проблему решить, я с С++ знаком, но не припомню там подобных конструкций, а к ООП в интерпретаторах отношусь не очень, т.к. накладные рассходы, посему не знаю с какой стороны подойти…

    PS
    само по себе это не дырка, я всегда поражался тому, что это например, в неткате было условием работы движка, а сам неткат по взлому, очень и очень безопасен
     
  10. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    591
    Так оно и есть. Если руки растут из правильного места, то опасности в них никакой. А если не из правильного, то и суперглобальные массивы не помогут.

    PHP:
    class Foo {
        public 
    $inst;

        function 
    __construct($class) {
            
    $this->inst = new $class;
        }
    }

    class 
    Bar {
    }
    $foobar = new Foo('Bar');
    Ну и доступ через $this->inst. $this является указателем на инстанс класса Foo и переопределить его нельзя.
     
Статус темы:
Закрыта.