Какая версия php быстрее? Переход с PHP 5.2 на PHP 5.5 и более поздние

С увеличением версии наращивается функционал тем, увеличивается нагрузка на CPU и память. Какие-то участки кода, кончено, оптимизируются, но функционал наращивается быстрее.. Так что все наоборот. Чем выше версия, тем больше прожорливость. Последние

Какая версия php быстрее? Переход с PHP 5.2 на PHP 5.5

» » Сообщение:

Какая версия php быстрее? Переход с PHP 5.2 на PHP 5.5 и более поздние

Теоретически, переход с версии PHP 5.2 на новейшую, на момент написания статьи PHP 5.5, проходит безболезненно, если программист придерживался рекомендаций PHP и писал свой код в UTF8. Вот только далеко не всегда скрипты, отлично работавшие на устаревшей версии PHP, будут работать на PHP 5.5, и этому есть множество причин, которые подробно описаны в официальной документации PHP:

Прочитав официальную документацию PHP, по миграции на более новые версии, можно начинать рефакторинг кода скриптов. Ниже, я опишу те проблемы и методы их решения, с которыми столкнулся я сам.

Вывод сообщений об ошибках PHP

Первым делом необходимо включить отображение ошибок в скриптах, разместив код в начале скритпа:

Код: Выделить всё Развернуть
error_reporting(E_ALL ^ E_NOTICE);
ini_set('display_errors', 1);

И теперь тестируя весь функционал скриптов, нужно обращать внимание на ошибки Deprecated и изменять код, в соответствии с сообщением об ошибке. Например, сообщение: "Deprecated: mysql_escape_string(): This function is deprecated; use mysql_real_escape_string() instead." само подсказывает решение проблемы - нужно заменить функцию mysql_escape_string() на новую: mysql_real_escape_string().

Следует отметить, что Deprecated означает «устаревшая», и заменять все функции отмеченные как Deprecated не обязательно, если скрипты не планируется использовать в долгосрочной перспективе. Можно просто подавить вывод ошибок раздела Deprecated. Но вот если функция уже не доступна, как например session_register(), исключенная из версии PHP 5.4 и старше, то скрипт с такими функциями будет вызывать Fatal error, что потребует обязательного рефакторинга когда.

В одной CMS использовалась самописная функция hex2bin(). В PHP версии 5.4 появилась штатная функция с идентичным именем, но в корне отличающемся функционалом - пришлось переименовывать самописную функцию и заменять все строки кода, где она использовалась, так как такое совпадение имен вызывало ошибку Fatal error: Cannot redeclare hex2bin().

Если несмотря на вставку кода для отображения всех ошибок, ошибки не отображаются, а страница загружается с кодом ошибки HTTP 500, то нужно для начала отключить файл .htaccess, переименовав его, например, в «.h». Если это помогло - ищите ошибки в .htaccess, если нет, тогда нужно создать новый файл PHP, из которого подгрузить проблемный скрипт:

Код: Выделить всё Развернуть
<?php
error_reporting(E_ALL ^ E_NOTICE);
ini_set('display_errors', 1);
// Подгрузить файл, выдающий 500 ошибку протокола HTTP
include_once 'index.php';
?>

Скрытые ошибки htmlspecialchars, htmlentities

Проверяя работу форм на сайте, написанном и работающем в кодировке Windows-1251, обнаружил странное поведение функции htmlspecialchars - все буквы славянских алфавитов эта функция просто удаляла. Начав разбираться с решением проблемы обнаружил, что разработчики PHP с версии 5.4 изменили поведение этой функции: если не указан третий параметр функции, отвечающий за кодировку, то кодировкой по умолчанию становится UTF8, хотя ранее применялась ISO-8859-1, что и вызывает «удаление» букв славянских алфавитов при работе этой функции. Функция htmlentities вызывает аналогичные проблемы.

Решение проблемы - добавление во всем коде параметров в функции htmlspecialchars(), например заменив: htmlspecialchars($str) на htmlspecialchars($str, ENT_COMPAT, «cp1251»).

Другой, более предпочтительный на мой взгляд, вариант - заменить все вхождения функции htmlspecialchars() на самописную htmlsch(), что потребует значительно меньше усилий по рефакторингу кодов скриптов.
htmlsch() - замена htmlspecialchars() в PHP 5.4 и старше

Код: Выделить всё Развернуть
function htmlsch($str)
  {
  $str = htmlspecialchars($str, ENT_COMPAT, 'cp1251');
  return $str;
  }

Провести рефакторинг (средство реорганизации кода) стандартных функций в популярных средствах разработки PHP, например таких, как NetBeans, на первый взгляд невозможно - выдается ошибка о недопустимости запрошенного действия. Обойти это недоразумение весьма легко: нужно временно разместить свою функцию htmlspecialchars() в коде, провести уже ее рефакторинг, после чего ее удалить:
Самописная htmlspecialchars для рефакторинга кода

Код: Выделить всё Развернуть
function htmlspecialchars()
  {
  }

Такой же трюк можно провести и с функцией htmlentities.

Call-time pass-by-reference has been removed

Если в PHP 5.3 при использование атрибутов в функциях как ссылки сообщалось, что это устаревшая возможность, то уже в PHP 5.4 выдается Fatal error: Call-time pass-by-reference has been removed in. Для решения этой проблемы, необходимо везде заменить &$var на $var. Если все же необходимо передавать атрибуты в функциях, как ссылки, то тогда нужно изменить сами функции:

Код: Выделить всё Развернуть
// Правильно
function myFunc(&$arg) { }
myFunc($var);
Rather than:

// Не правильно
function myFunc($arg) { }
myFunc(&$arg);

Рефакторинг кода при возникновении ошибки Call-time pass-by-reference has been removed займет, скорее всего, много времени.
---

Кроме того, :

Guru-Editor писал(а):С увеличением версии наращивается функционал -> увеличивается нагрузка на CPU и память.
Какие-то участки кода, кончено, оптимизируются, но функционал наращивается быстрее..
Так что все наоборот. Чем выше версия, тем больше прожорливость.

Последние версии имеет смысл ставить, если точно знаете, что они вам нужны.
Например, на виртуальном хостинге пользователи крайне неохотно обновляют свои сайты.
И большинство сайтов, работающих на версии 5.3, не будут работать даже на 5.5.
Поэтому, если ставите только для себя, то смотрите на требование CMS-ок, которые собираетесь использовать.
Если ставите для клиентов, то выше 5.4 я бы ставить пока не рекомендовал.
© 13.01.2015

Lord_Leon писал(а):В версии 5.5 появился внутренний Opcode Caching у меня он глючит с xcache, пришлось xcache отключить.
Еще проблема возникла - в одном проекте пришлось в код лезть, переписывать функцию с preg_replace на preg_replace_callback
В 5.3 таких проблем не было.
© 14.01.2015

© petrenco.com

deprecated, mysql_escape_string, session_register, fatal error, hex2bin, htmlspecialchars, функционал, сайтов, сайты, требование, рекомендовал, использовать, обновляют, прожорливость, быстрее, php 7, новой, версию, лердорф, релиз, синтаксическом, абстрактном, cannot redeclare

PHP 7 работает в два с лишним раза быстрее предыдущей версии

Admin » » Сообщение:

PHP 7 работает в два с лишним раза быстрее предыдущей версии
PHP 7 работает в два с лишним раза быстрее предыдущей версии
cybersecurity.ru писал(а):Создатель скриптового языка PHP сообщил о скором выходе его новой версии: первый релиз-кандидат PHP 7 планируется выпустить в июне, финальную версию - в октябре.

Расмус Лердорф, создатель скриптового языка PHP, сообщил на конференции O'Reilly Fluent о скором выходе его новой версии, заявив что ее быстродействие увеличилось более чем вдвое: по его словам, именно такое ускорение наблюдалось на реальных веб-приложениях.

Первый релиз-кандидат PHP 7 планируется выпустить в июне, финальную версию - в октябре. PHP 7 основан на ветке phpng, созданной для устранения недоработок, связанных со структурами и типами данных, а также с управлением памятью. Как подчеркнул Лердорф, PHP 7 экономнее расходует серверные ресурсы, поэтому на новую версию надо переходить «всем, кто пользуется большим количеством серверов».

PHP 7 основан на абстрактном синтаксическом дереве, благодаря чему, по словам создателя языка, упрощается разработка вспомогательных инструментов, а также статический анализ и профилирование кода. Функции в PHP 7 могут возвращать массивы, введена строгая типизация.

Лердорф предупредил, что в новой версии не поддерживаются некоторые функции PHP 4, так что код двенадцатилетней давности с новой версией интерпретатора может не заработать.
© 24.04.2015

Ну не знаю - будем тестить, а пока форум, при попытке перейти на версию php 5.6 вывалился с ошибкой: Cannot redeclare такая-то-функция() (previously declared in тут-то:43) at file..
В принципе, не вижу особых причин делать какие-то лишние движения, во всяком случает до тех пор, когда положительные эффекты значительно превысят затраты..
Это не касается “мифических” заявлений кого-то о том, что “PHP 7 работает в два с лишним раза быстрее предыдущей версии” - в данном случае php 5.4.
---

php 7, новой, версию, лердорф, релиз, синтаксическом, абстрактном, cannot redeclare




Похожие темыКомментарии ПросмотрыПоследнее сообщение
01239Инструкция по установке мода Mutipl...
Сообщение от: Admin
0696Инструкции по установке мода Change...
Сообщение от: Admin
02211Инструкции по установке мода Posts ...
Сообщение от: Admin
0845Инструкции по установке мода Enable...
Сообщение от: Admin
21224Re: Инструкция по установке мода NV...
Сообщение от: Admin