2012-02-22 2 views
2

Я работаю над старым сайтом, написанным кем-то другим, и они сделали что-то эквивалентное extract($_POST) где-то там код. Но они не использовали экстракт функции.Как найти переменные, динамически созданные, но не с помощью экстракта?

Приложение первоначально предназначалось для PHP3 (да, старый), затем оно было перенесено на PHP4, и теперь я переношу его на PHP5.

Кто-нибудь знает, какая функция это может быть? Или любой способ узнать это? Я пробовал использовать «GoTo -> Декларация» PHPStorm, но это было не так.

Я просмотрел документы для этой переменной, и нет никакой другой ссылки на нее, поэтому она генерируется функция, эквивалентная извлечению.

ответ

3

Это может быть установка register_globals. Проверьте файл php.ini на сервере и проверьте, включено ли оно. Если он включен, вы должны отключить его и внести необходимые изменения в код, чтобы исправить его (как часть вашего портирования на PHP 5).

другой релевантной страница после проверки другой ссылки на этом посте: http://php.net/manual/en/security.globals.php

+0

Вот и все! Спасибо за то, что это делало мою голову в поиске кода, выполняющего его, но это был не код, это была настройка php.ini! – Mattisdada

+0

Добро пожаловать. При включении параметра register_globals могут возникнуть серьезные недостатки безопасности, так как каждый может добавить аргументы в строку запроса (или POST/Cookies) в HTTP-запросе, и они сразу же станут заданными переменными в вашем коде. Вот почему он устарел и настоятельно рекомендуется отключить. – Paulpro

+0

Я изучу каждую часть кода и удалю любую зависимость от нее, но на данный момент это просто необходимо для восстановления и запуска сервера. Огромная помощь хотя :). – Mattisdada

1

Может быть использовано что-то вроде этого:

foreach ($_POST as $key => $value) 
{ 
    ${$key} = $value; 
} 
+0

Хм, что это Защита»возможность! Спасибо за идею, плохо расследуйте за это – Mattisdada