2009-07-13 3 views
4

Есть ли какие-нибудь волшебные инструменты, которые я могу использовать для сканирования исходного кода, написанного для PHP4, чтобы выделить устаревшие функции в PHP5? В настоящее время я использую последнюю версию PHP на сервере, и мне нужно перенести этот код. Есть ли что-нибудь, что может дать мне руку?Инструменты для выделения устаревших функций в источниках PHP4?

+1

Список устаревших функций будет недостаточным. Некоторые функции, используемые для принятия определенных аргументов, теперь вызывают ошибку, если полученные аргументы не относятся к ожидаемому типу. IIRC, array_merge() - один из примеров - он принимал аргумент NULL; теперь он выдает ошибку, если какой-либо аргумент не является массивом. Короче говоря, единственный реальный способ убедиться в том, что переход с PHP 4 на 5 завершен, - это испытание в значительной степени. –

+0

Назначение возвращаемого значения new по ссылке устарело. Это кошмар. –

ответ

5

PHP 5.3 выдает предупреждение E_DEPRECATED, если вы установите уровни отчетов об ошибках, чтобы показать их.

+0

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

0

appendices of the manual содержит некоторую информацию о миграции, но я не думаю, что она содержит то, что вы ищете.

Один из способов (который может быть неточным, но может быть использован). Я думал о том, что news.txt включен в каждую загрузку PHP. Я writing a script atm, который анализирует этот файл, и проверка устаревших функций может быть чем-то, что я мог бы добавить. Я работаю над другим проектом atm, но я хотел бы добавить функциональность для этого в более крупную перестроенную версию.

+0

Ссылка на ваш скрипт нарушена. Вы можете это исправить? – hakre

+0

Обновлено, сделаю это одним файлом, я думаю. – Ross

1

Я хотел сам сделать что-то подобное. Используя этот список deprecated features in PHP 5.3.x, я сделал регулярное выражение для поиска любого использования этих функций:

(?i:(call_user_method\(|call_user_method_array\(|define_syslog_variables\(|dl\(|ereg\(|ereg_replace\(|eregi\(|eregi_replace\(|set_magic_quotes_runtime\(|session_register\(|session_unregister\(|session_is_registered\(|set_socket_blocking\(|split\(|spliti\(|sql_regcase\(|mysql_db_query\(|mysql_escape_string\()) 

(чувствительно к регистру, с каждым именем функции, включая открывающую скобку, только чтобы избежать ложных срабатываний, «дли» доведу . до много шума в противном случае)

Если вы на системе с find и grep, вы могли бы просто выполнить что-то вроде этого:

find <directory to search> -type f -name '*.php' -exec grep -R -P -H "<above regex>" {} \; 

Просто, чтобы сделать более конкретный пример, я использовал следующее:

find htdocs -type f -name '*.php' -exec grep -R -P -H "(?i:(call_user_method\(|call_user_method_array\(|define_syslog_variables\(|dl\(|ereg\(|ereg_replace\(|eregi\(|eregi_replace\(|set_magic_quotes_runtime\(|session_register\(|session_unregister\(|session_is_registered\(|set_socket_blocking\(|split\(|spliti\(|sql_regcase\(|mysql_db_query\(|mysql_escape_string\())" {} \; 

Похоже, мне теперь нужно заменить несколько экземпляров session_register и session_unregister себя!

То же самое можно сделать для устаревших директив INI и параметров.

Смежные вопросы