Сравнение производительности версий php

Содержание

Compile

  1. Open the command prompt and enter the build directory:
    cd c:\php-sdk\
  2. Set up the build environment variables:
    bin\phpsdk_setvars.bat
  3. Change directory to the location of your PHP source code, e.g.
    cd C:\php-sdk\phpdev\vc11\x86\php-5.6.4-src
  4. Run:
    buildconf
  5. To get an overview of the compiling flags:
    configure --help
  6. Create your configure command:
    configure --disable-all --enable-cli --enable-$remains
  7. To build PHP, run:
    nmake
  8. If you want the resulting PHP builds and extensions to be zipped, after ‘nmake’ also run:
    nmake snap
  9. The compiled PHP is now under “C:\php-sdk\phpdev\vcXX\x86\php-source-directory\Release_TS”. If you ran ‘nmake snap’ the zip file will also be here.

    If you compiled with “—disable-zts” the compiled PHP will be under “C:\php-sdk\phpdev\vcXX\x86\php-source-directory\Release”

Recompile after you have done some changes

  1. Clean up old compiled binaries
    nmake clean
  2. If you need to update the ‘configure’ script
    buildconf --force
  3. Create your makefile: see release
    configure --disable-all --enable-cli --enable-$remains
  4. Compile
    nmake

Building PECL extensions

To build a PECL extension (for example APCu):

  1. Download the extension source either by:
    • downloading a source archive
    • fetching the source from the extension’s repository (link can be found under *Browse Source*)
  2. Create a directory named on the same level as your PHP source directory, e.g.

  3. Extract or clone the extension source code to the directory
    • if cloning, clone to a subdirectory, e.g.

    • source code archive should already contain a subdirectory named e.g.

  4. Open a command prompt, run the script, and enter your PHP source directory
  5. Rebuild the configure script by running:
    buildconf
  6. Executing should now contain an option to enable APCu
    --enable-apcu    Whether to enable APCu support
  7. Configure and build:
    configure --disable-all --enable-cli --enable-apcu
    nmake
  8. Test the binary with a command, to make sure APCu is loaded

At this point, your compiled extension will be located in the release directory.

Additional Links:

Список некоторых устаревших вещей

  • Тип real
  • Magic quotes legacy
  • array_key_exists() с объектами
  • FILTER_SANITIZE_MAGIC_QUOTES фильтр
  • Метод Reflection export() 
  • mb_strrpos() с указанием кодировки 3 аргументом
  • implode() параметр порядка смешивания
  • Открепление $this от нестатических замыканий ($closure->bindTo(null))
  • функция hebrevc()
  • функция convert_cyr_string()
  • функция money_format()
  • функция ezmlm_hash()
  • функция restore_include_path()
  • директива ini allow_url_include

Обратно несовместимые изменения


Так же не забываем смотреть на полный документ обновлений версий PHP.

Можно выделить следующие несовместимых назад изменений:

  • Вызов parent:: в классе без родителя вызовет ошибку.
  • Использование var_dump для DateTime или DateTimeImmutable больше не будет выводить доступные свойства объекта.
  • openssl_random_pseudo_bytes сгенерирует исключение в случае ошибки. Раньше она возвращала false, что могло привести к генерации пустой строки.
  • Попытка сериализации экземпляров PDO или PDOStatement сгенерирует Exception вместо PDOException.
  • Вызов get_object_vars() для ArrayObject экземпляре будет возвращать свойства самого ArrayObject, а не значения обернутого массива или объекта. Чтобы как раньше получить значения обернутого массива — приведите ArrayObject к типу array

Установка PHP 7.4 для Debian

Метод работает на Debian 8 (Jessie), Debian 9 (Stretch) и Debian 10 (Buster). Добавляем новый репозиторий:

sudo apt install -y apt-transport-https lsb-release ca-certificates wget
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list
sudo apt update

После этого можно установить PHP

sudo apt install php7.4

# Установка дополнительных пакетов
sudo apt install php7.4-cli php7.4-fpm php7.4-bcmath php7.4-curl php7.4-gd php7.4-intl php7.4-json php7.4-mbstring php7.4-mysql php7.4-opcache php7.4-sqlite3 php7.4-xml php7.4-zip

Known Problems

  • foreach may behave differently
    • tests/lang/foreachLoop.013.phpt
    • tests/lang/foreachLoop.014.phpt
    • tests/lang/foreachLoop.015.phpt
    • ext/standard/tests/serialize/serialization_arrays_005.phpt

  • user code in error handler may cause destruction of array, element of which is currently processed

    Zend/tests/bug54265.phpt

  • _toString() may behave differently

    Zend/tests/bug60825.phpt (it was a bogus behavior in php5.6 and below)

  • Internal object constructors can’t set $this to NULL

    • ext/fileinfo/tests/bug61173.phpt

    • ext/fileinfo/tests/finfo_open_error.phpt

    • ext/pdo_mysql/tests/pdo_mysql_construct.phpt

    • ext/pdo_mysql/tests/pdo_mysql_construct_options.phpt

    • ext/intl/tests/breakiter_construct_error.phpt

    • ext/intl/tests/bug62017.phpt

    • ext/intl/tests/dateformat_construct_bad_tz_cal.phpt

    • ext/intl/tests/formatter_format2.phpt

    • ext/intl/tests/gregoriancalendar_construct_error.phpt

    • ext/intl/tests/resourcebundle_create.phpt

  • Internal object constructors can’t set $this to NULL when called indirectly — parent::__construct()
    • ext/date/tests/bug67118.phpt
    • ext/date/tests/bug67118_2.phpt
  • PDP Persistent connection handling

    • ext/pdo_mysql/tests/bug63176.phpt

    • ext/pdo_mysql/tests/pdo_mysql_pconnect.phpt

    • ext/pdo_sqlite/tests/bug43831.phpt

  • Passing scalars by reference may behave differently, because they don’t have reference counters anymore
    • Zend/tests/bug35393.phpt

    • ext/pdo_firebird/tests/pdo_005.phpt

    • ext/pdo_mysql/tests/pdo_005.phpt

    • ext/pdo_odbc/tests/pdo_005.phpt

    • ext/pdo_pgsql/tests/pdo_005.phpt

    • ext/pdo_sqlite/tests/pdo_005.phpt

  • We can’t catch situations when argument passed to internal function was modified by callback

    • ext/standard/tests/array/unexpected_array_mod_bug.phpt

    • ext/standard/tests/strings/bug55871.phpt (it was a bogus behavior in php5.6 and below)

  • Memory or resource leaks

    ext/standard/tests/http/bug60570.phpt

  • Inconsistent reference behaviour <?php $a = ‘foo’; $a = &$a; $a = array(); $a = $a; var_dump($a); ?>

    ext/wddx/tests/bug48562.phpt

  • Bug in GC

    Zend/tests/bug63635.phpt (visible with valgrind)

  • GC doesn’t destroy inner-loops

    ext/standard/tests/array/compact_variation1.phpt

  • Improper resource destruction

    ext/standard/tests/streams/bug61115.phpt (visible with valgrind)

  • Arrays are not allowed in class constants

    • Zend/tests/bug67368.phpt

    • Zend/tests/constant_expressions_self_referencing_array.phpt

  • Improperly detected resource leaks during pharcmd build

  • Memory leak if pdo persistent dbh lost connection to server

  • accepts some arguments for by-ref params that it did not previously. Reproduce code:

Установка MySQL

Запускаем установщик, после небольшой загрузки видим следующее окно:

Нажимаем Install MySQL Products, появляется следующее окно, в котором мы принимаем лицензионное соглашение (ставим галочку) и жмем Next >

Следующее окно нам предлагает проверить, есть ли более новая версия MySQL, ставим галочку Skip… (пропустить) и нажимаем Next >

В следующем окне нам предлагают выбрать тип установки, выбираем Custom и жмем Next >:

В следующем окне нам предоставляется возможность выбратьнеобходимые компоненты: убираем галочку с MySQL Connectors, в Application убираем галочку с MySQL Workbench CE 6.0.8 и MySQL Notifier 1.1.5, в MySQL Server 5.6.16 убираем галочки с Development Components и Client C API library (shared) и жмем Next >

Далее нам пишут, что ничего дополнительно нам устанавливать не нужно и мы можем приступить к установке, просто жмем Next >

Следующее окно нам сообщает что именно будет установлено, просто нажимаем Execute

После успешной установки жмем Next >

Вследующем окно нам сообщается о том, что далее мы немного настроим наш сервер, жмем Next >

В первом окне настрокйки, устанавливаем галочку Show Advanced Options, остальное оставляем как есть и жмем Next >

В следующем окне нам предлагается установить пароль администратора (root). Этот пароль лучше не терять! Устанавливаем пароль и жмем Next >

В следующем окне стираем в поле ввода цифры 56, остальное оставляем как есть и жмем Next >


Жмем Next >

Жмем Next >

Жмем Finish

Осталось проверить успешно ли прошла установка. (win 8): Заходим в меню пуск → переходим к приложениям (стрелочка вниз) → находим MySQL5.6 Command Line Client (терминал для работы с MySQL в командной строке) → открываем его. Далее вводим пароль администратора (root). Если пароль правильный, вы попадете в командную строку ( mysql> ). Введите команду: show databases; (точка с запятой на конце обязательна). В результате вы должны увидеть список баз данных (как минимум две — information_schema и mysql). Это означает, что сервер работает правильно. Закрываем командную строку выполнив команду exit.

Добавьте в файл C:\Windows\System32\drivers\etc\hosts строчку: 127.0.0.1 localhost. В этом же файле удалите или закомментируйте (поставить знак # в начале строки) строку ::1 localhost (если она изначально закомментирована, то не надо ничего с ней делать).

Performance Evaluation

We constantly measure the performance evaluation using the following 4 tests

bench.php (sec) — time taken to execute Zend/bench.php

sapi/cli/php ../Zend/bench.php

bench.php (instr) — number of CPU instructions for Zend/bench.php execution

valgrind --tool=callgrind sapi/cli/php ../Zend/bench.php

WordPress (sec) — time taken to perform 1000 requests to wordpress-3.6.0 home page

sapi/cgi/php-cgi -T 1000 /var/www/html/bench/wordpress-3.6/index.php > /dev/null

WordPress (instr) — number of CPU instructions for 100 requests to wordpress-3.6.0 home page

valgrind --tool=callgrind sapi/cgi/php-cgi -T 100 /var/www/html/bench/wordpress-3.6/index.php > /dev/null
date bench.php (sec) bench.php (instr) WordPress (sec) WordPress (instr) Comments
20.01.2014 2.115 11,066,515,044 26.756 9,413,106,833 Master branch before split
18.02.2014 1.898 11,120,470,518 Refactored engine is able to run bench.php wthout OPCache
21.02.2014 1.830 10,969,942,729
28.02.2014 1.941 11,273,346,956
07.03.2014 1.906 11,280,441,681
14.03.2014 1.941 11,251,497,687
21.03.2014 1.941 11,309,008,450
28.03.2014 1.821 10,388,772,172 Engine and core extensions mainly work
04.04.2014 1.571 8,794,394,256 23.676 7,472,466,470 OPCache works without fast_shutdown
11.04.2014 1.559 8,666,353,378 22.592 7,186,015,829
18.04.2014 1.515 8,568,559,126 21.503 6,649,116,129
25.04.2014 1.492 8,306,525,457 20.857 6,170,736,000 merged with mainstream master
05.05.2014 1.414 8,168,362,858 18.957 5,090,427,768 ext/json support
18.05.2014 1.490 8,203,816,181 18.913 5,131,213,251 17 extensions left
26.05.2014 1.432 8,204,890,934 18.245 4,992,096,207 zend_hash API optimization
03.06.2014 1.492 8,193,509,303 17.403 4,747,230,312 immutable arrays
09.06.2014 1.497 8,187,248,085 16.540 4,307,808,050 refcounting, PCRE with JIT
30.06.2014 1.412 7,833,554,758 15.940 4,054,164,255 arena, mysqlnd, call frame
09.07.2014 1.367 7,596,383,636 15.850 3,994,171,799 call frame optimization
14.07.2014 1.407 7,601,792,205 14.810 3,627,440,773 fast_zpp, built-ins
15.08.2014 1.350 7,602,520,254 14.864 3,641,452,019 merged into master
02.09.2014 1.302 7,534,391,801 14.150 3,407,124,896 new MM, int64, AST, zend_ini
07.10.2014 1.219 7,255,184,064 13.890 3,234,526,595 many small optimizations
21.11.2014 1.201 7,171,414,831 13.430 3,138,706,949 many small optimizations
31.12.2014 1.159 6,867,449,070 12.629 2,899,707,051
19.03.2015 0.837 5,817,002,981 11.756 2,620,187,238 -DHAVE_GCC_GLOBAL_REGS=1
30.04.2015 0.777 5,292,555,476 11.081 2,483,106,468
03.12.2015 0.756 4,956,752,140 10.398 2,370,938,142 7.0.0 release

О языке PHP

PHP – это язык программирования, который в основном применяется в веб-разработке, как правило, в части back-end. PHP имеет достаточно длинную историю – его первая версия появилась более 20 лет назад, в 1995 году. За это время было выпущено 7 версий PHP, последняя из которых появилась в декабре 2015 года. О ней и пойдет речь в этой статье.

PHPNG

Релиз PHP 7.0 стал в своем роде прорывом, так как он основывался на phpng – экспериментальном и активно развивающимся проекте PHP, название которого расшифровывается как “PHP Next Generation” – «Следующее поколение PHP». Данную технологию можно было использовать и в предыдущих версиях PHP, однако именно в PHP 7 она была введена как основополагающая. При ее разработке была поставлена цель повысить производительность PHP, но при этом не потерять совместимость.

Zend Engine

PHP 7 основан на третьей версии Zend Engine, в которой был развит проект phpng.

Установка

Расширение mysqli было представлено с версией PHP 5.0.0. MySQL Native Driver был включен в PHP версии 5.3.0.

Установка для Linux

Большинство дистрибутивов Unix включает бинарные версии PHP, которые в дальнейшем могут быть установлены. Несмотря на то, что бинарные версии, как правило, собраны с включенной поддержкой расширений MySQL, может потребоваться установка дополнительных пакетов с библиотеками расширений. Убедитесь, что менеджер пакетов, идущий с выбранным дистрибутивом, позволяет установить такие пакеты.

К примеру, на Ubuntu пакет php5-mysql устанавливает расширения ext/mysql, ext/mysqli, и pdo_mysql. На CentOS, пакет php-mysql так же их устанавливает.

Конечно, вы всегда можете собрать PHP из исходного кода. Сборка PHP из исходного кода позволяет выделить только те расширения MySQL (а также клиентские библиотеки для каждого из расширений), которые требуется использовать.

Рекомендуется использовать библиотеку MySQL Native Driver, в результате повышается производительность и имеется доступ к функциям, недоступным при использовании MySQL Client Library. См. для ознакомления с возможностями MySQL Native Driver.

Под /path/to/mysql_config подразумевается расположение программы mysql_config, поставляемой вместе с MySQL Server.

Вспомогательная таблица времени компиляции mysqli
Версия PHP По умолчанию Опции настройки: mysqlnd Опции настройки: libmysqlclient Список изменений
5.4.x и выше mysqlnd —with-mysqli —with-mysqli=/path/to/mysql_config по умолчанию mysqlnd
5.3.x libmysqlclient —with-mysqli=mysqlnd —with-mysqli=/path/to/mysql_config mysqlnd поддерживается
5.0.x, 5.1.x, 5.2.x libmysqlclient Недоступно —with-mysqli=/path/to/mysql_config mysqlnd не поддерживается

Необходимо отметить, что существует возможность свободно перемешивать расширения MySQL и клиентские библиотеки. Например, можно активировать расширение MySQL, позволяющее использовать MySQL Client Library (libmysqlclient), и при этом настроить расширение mysqli для использования MySQL Native Driver. Таким образом, возможны любые перестановки расширений и клиентских библиотек.

Установка PHP (ручная)

Нужен ли нам Apache без PHP? Конечно нет, это нонсенс! Поэтому далее мы рассмотрим ручную (без использования инсталлятора) установку PHP.

Содержимое архива распаковываем в директорию C:\PHP (папку PHP создаём сами). Далее в папке C:\PHP находим два файла php.ini-development и php.ini-production. Эти файлы содержат базовые настройки. Первый файл оптимизирован для разработчиков, второй для рабочих систем. Основная разница в настройках: для разработчиков разрешен вывод на экран ошибок, тогда как для рабочих систем вывод ошибок запрещен из соображений безопасности.

Сделаем кое что, прежде чем продолжить установку PHP. Открываем Панель управления → оформление и персонализация → параметры папок → вкладка Вид, находим строку «Скрывать расширения для зарегистрированных типов файлов», и если там стоит галочка, убираем ее и нажимаем «Применить».

Продолжаем установку. И так, выбираем нужный вам файл (я выбрал php.ini-development). Выбранный файл нужно будет просто немного переименовать. Правый клик по файлу → Переименовать → стираем «-development», оставляя только php.ini

Теперь открываем php.ini, нам необходимо внести несколько изменений (будьте внимательны при внесении изменений, если в начале строки стоит точка с запятой, ее надо будет убрать):

  1. Найти опцию extension_dir (строка 721) и изменить путь к папке ext в соответствии с путем установки PHP. У меня это выглядит так: extension_dir = «C:\PHP\ext»
  2. Найти опцию upload_tmp_dir (строка 791). Здесь надо указать путь к временной папке. Я выбрал c:\windows\temp. Всё вместе: upload_tmp_dir = «C:\Windows\Temp»
  3. Найти опцию session.save_path (строка 1369). Здесь также требуется указать путь к временной папке: session.save_path = «C:\Windows\Temp»
  4. В разделе Dynamic Extensions необходимо раскомментировать несколько строк (убрать точку с запятой в начале), соответствующих модулям PHP, которые могут понадобиться для работы: 866, 873, 874, 876, 886, 895, 900

Сохраняем изменения и закрываем.

Теперь вернемся к настройкам Apache. Нам придется немного отредактировать конфиг Apache. Заходим в папку C:\Apache24\conf и открываем файл httpd.conf.

Переходим в конец файла и в самом низу добавляем следующие строчки:

# Charset
AddDefaultCharset utf-8
# PHP
LoadModule php5_module "C:/PHP/php5apache2_4.dll"
PHPIniDir "C:/PHP"
AddType application/x-httpd-php .php

Путь к папке php указываете тот, который вы выбрали в процессе установки (если вы устанавливали в другую директорию).

В этом же файле находим следующие строки (строки примерно 274-276):

<IfModule dir_module>
  DirectoryIndex index.html
</IfModule>

Перед index.html дописываем через пробел index.php. В итоге получается:

<IfModule dir_module>
  DirectoryIndex index.php index.html
</IfModule>

Чтобы изменения вступили в силу, перезапускаем службу Apache (значок в трее — Apache monitor). Если служба перезапустится — это хороший знак. Если нет (выскочит ошибка) — ищите ошибки в конфигурационных файлах. Особенно внимательно проверьте все пути.

Чтобы нам убедиться в работоспособности PHP, откройте папку C:\Apache24\htdocs (здесь содержатся файлы веб-сайта по умолчанию). Создайте в этой папке файл index.php со следующим содержанием:

<?php phpinfo(); ?>

Теперь откройте в браузере http://localhost/ (или просто localhost). Если все прошло нормально, вы увидите похожую страницу:


Если у вас вместо страницы с инфомацией о php открылась страница с надписью «It works!», тогда просто нажмите обновить страницу.

Предварительная загрузка (Preloading) RFC

Предварительная загрузка — удивительное дополнение к ядру PHP, которое может привести к значительному улучшению производительности.

Итак, если вы в своей работе используете какой-либо фреймворк, его файлы должны быть загружены и перекомпилированы при каждом запросе. Предварительная загрузка позволяет серверу загружать PHP-файлы в память при запуске и иметь их постоянно доступными для всех последующих запросов.

Предварительная загрузка управляется директивой opcache.preload в файле php.ini. Эта директива указывает PHP-скрипт, который будет скомпилирован и выполнен при запуске сервера. Данный файл может использоваться для предварительной загрузки дополнительных файлов или через функцию opcache_compile_file()  (подробнее см. Документацию PHP).

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

Устаревшая функциональность

Ядро PHP

Вложенные тернарные операторы без явного указания скобок

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

Обращение к индексу массива и строки через фигурные скобки

Синтаксис доступа к массиву и строке с использованием фигурных скобок объявлен устаревшим. Используйте $var вместо $var{$idx}.

Приведение типа (real) и функция is_real()

Приведение типа (real) объявлено устаревшим, вместо этого используйте (float).

Функция is_real() также объявлена устаревшей, вместо нее используйте is_float().

Ключевое слово parent вне родительского класса

Использование parent внутри класса, у которого нет родителя, объявлено устаревшим, а в будущем произойдет ошибка компиляции. А пока ошибка будет только при обращении к родителю во время выполнения.

INI-опция allow_url_include

Конфигурационная директива объявлена устаревшей. При включенной опции будет вызвано уведомление об устаревшей возможности во время загрузки.

Недопустимые символы в основных функциях преобразования

Передача недопустимых символов в base_convert(), bindec(), octdec() теперь вызывает уведомление об устаревшей возможности. Результат все равно будет вычислен так, как если бы недопустимых символов не было. Ведущие и завершающие пробелы, а также префиксы типа 0x (в зависимости от системы счисления) по-прежнему разрешены.

Использование array_key_exists() с объектом

Использование array_key_exists() с объектом объявлено устаревшим. Вместо этого следует использовать либо isset(), либо property_exists().

Функция hebrevc()

Функция hebrevc() объявлена устаревшей. Ее можно заменить на выражение nl2br(hebrev($str)), либо лучше всего использовать поддержку Unicode RTL.

Функция convert_cyr_string()

Функция convert_cyr_string() объявлена устаревшей. Ее можно заменить либо на mb_convert_string(), либо iconv() или на класс UConverter.

Функция money_format()

Функция money_format() объявлена устаревшей. Она может быть заменена функциональностью интернационализации — классом NumberFormatter.

Использование implode с нерекомендуемым порядком параметров

Передача параметров в implode() в обратном порядке объявлена устаревшей — используйте implode($glue, $parts) вместо implode($parts, $glue).

Многобайтовые строки

Передача нестрокового шаблона в mb_ereg_replace() объявлена устаревшей. В данный момент нестроковые значения интерпретируются как кодовые точки ASCII. В PHP 8 шаблон будет обрабатываться как строка.

Передача кодировки в качестве 3-го параметра в mb_strrpos() объявлена устаревшей. Вместо этого передавайте позицию как 0, а кодировку в 4-м параметре.

Reflection

Вызовы ReflectionType::__toString() теперь создают уведомление об устаревшей возможности. Этот метод объявлен устаревшим в пользу использования ReflectionNamedType::getName() в документации с PHP 7.1, но не выдавал соответствующего уведомления по техническим причинам.

Методы export() у всех классов Reflection объявлены устаревшими. Теперь создавайте объект Reflection и преобразуйте его в строку:

Флаги и для функции socket_addrinfo_lookup() объявлены устаревшими из-за обновления glibc.

Установка веб-сервера Apache

После того как скачали, открываем архив httpd-2.4.7-win64-VC11.zip

Извлекаем из него папку Apache24 в раздел диска C:\

Теперь нам необходимо немного поправить конфиг, прежде чем устанавливать Apache. Открываем файл httpd.conf (находится здесь: C:\Apache24\conf) желательно через удобный редактор, например notepad++. Находим строку (217) ServerName www.example.com:80 и меняем на ServerName localhost:80

Далее нам необходимо установить Apache используя командную строку. Нажимаем Пуск → Выполнить, вводим команду cmd и нажимаем OK. У нас должно открыться окно командной строки

Здесь нам необходимо указать полный путь к файлу httpd.exe, который находится в папке Apache. В нашем случае это C:\Apache24\bin\httpd.exe. Набираем команду C:\Apache24\bin\httpd.exe -k install и жмем Enter.

Если при выполнении программы у вас возникает следующая ошибка: failed to open the winnt service manager perhaps you forgot to log in as administrator, заходим в следующую папку: C:\Users\Здесь_имя_вашего_пользователя\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\System Tools, запускаем командную строку от имени администратора

И повторяем команду установки.

Установка завершена. Откройте директорию bin (полный путь: C:\Apache24\bin\) и запустите файл: ApacheMonitor.exe. В системном трее появится значок Apache, с помощью которого можно быстро запускать/останавливать службу Apache, жмем start (запуск):

Теперь проверим работоспособность. Открываем браузер, и в адресной строке пишем http://localhost/ (можно просто localhost). Если установка выполнилась успешно, должна открыться страница с надписью It works!

Самостоятельная установка PHP в Windows

Выберите веб-сервер

  • IIS является встроенным в Windows. На сервере Windows используйте Server Manager для добавления роли IIS. Убедитесь, что функция роли CGI включена. На рабочем столе Windows используйте панель «Установка и удаление программ» для добавления IIS. См.: » https://msdn.microsoft.com/en-us/library/ms181052%28v=vs.80%29.aspx?f=255&MSPPError=-2147217396 Для настольных веб-приложений и веб-разработки можно также использовать IIS/Express или рабочий стол PHP

    Пример #1 Командная строка для настройки IIS и PHP

        
        @echo off
    
        REM download .ZIP file of PHP build from http://windows.php.net/downloads/
        REM
        REM path to directory you decompressed PHP .ZIP file into
    set phpdir=c:\php
    set phppath=php-5.6.19-nts-Win32-VC11-x86
    
    REM Clear current PHP handlers
    %windir%\system32\inetsrv\appcmd clear config /section:system.webServer/fastCGI
    %windir%\system32\inetsrv\appcmd set config /section:system.webServer/handlers /-
    
    REM Set up the PHP handler
    %windir%\system32\inetsrv\appcmd set config /section:system.webServer/fastCGI /+
    %windir%\system32\inetsrv\appcmd set config /section:system.webServer/handlers /+
    %windir%\system32\inetsrv\appcmd set config /section:system.webServer/handlers /accessPolicy:Read,Script
    
    REM Configure FastCGI Variables
    %windir%\system32\inetsrv\appcmd set config -section:system.webServer/fastCgi /.instanceMaxRequests:10000
    %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi /+".environmentVariables."
    %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi /+".environmentVariables."
    
    
  • Существует несколько версий Apache2 для Windows. Мы поддерживаем ApacheLounge, но другие варианты включают XAMPP, WampServer и BitNami, которые предоставляют средства автоматической установки. Вы можете использовать mod_php или mod_fastcgi для загрузки PHP на Apache. Если вы используете mod_php, необходимо использовать TS-build Apache, Visual C той же версии и тот же процессор (x86 или x64).

Выберите сборку

Скачайте PHP-релизы с » http://windows.php.net/download/. Много испытаний и оптимизаций Qa релизов уже сделано, но вы можете помочь нам сделать больше. Есть 4 типа сборок PHP:

  • Thread-Safe(TS) — для одного процесса веб-служб, как Apache с mod_php

  • Non-Thread-Safe(NTS) — для служб IIS и других FastCGI веб-серверов (Apache с mod_fastcgi) рекомендуется и для сценариев командной строки

  • для x86 — использовать PHP 5.5 или 5.6 или 7.0.

  • для x64 — использовать PHP 7.0+ если только он не для 32-разрядной версии Windows. 5.5 и 5.6 x64 — экспериментальные.

Future Engine Optimization Ideas

  • Split IS_BOOL into IS_FALSE and IS_TRUE.

  • Introduce immutable arrays. They don’t need to be copied and might be used directly from opcache shared memory. They might be also useful for APCU.
  • Bundle libpcre with JIT support. ext/pcre must use it out of the box.

  • Think about parameter passing/receiving. Currently parameters passed to user functions are copied twice. First by SEND and then by RECV.

  • Refactor zend_parse_parameters() API (It’s slow like a hell. for ord() function it takes 90% of CPU time). See PHP RFC: Fast Parameter Parsing API

  • Convert some simple and often used internal functions into more efficient opcodes — e.g. defined(), strlen(), is_array()…

  • Replace Zend Memory Manager with xx_malloc (it must give us at least additional 2% improvement)

  • Use interned zend_strings for often used strings in C code.
  • arg_info->name should be zend_string*, but we have to initialize it from C code.

  • Think about CALL/RETURN related optimizations. Function call/return code is the main consumer of CPU time now.

  • Try to optimize VM instructions dispatching. May be use global register for “execute_data”. May be also keep “opline” in CPU register?

  • move zend_op.lineno into a separate compressed debug_info table.
  • Try to reduce amount of data copied from OPCache SHM into process memory on each request

  • Try to replace ext/json with pecl/jsond

Incompatibilities (made on purpose and are not going to be fixed)

  1. PHPNG doesn’t keep original values of arguments passed to user functions, so func_get_arg() and func_get_args() will return current value of argument instead of the actually passed. The following code is going to be affected “function foo($x) { $x = 2; return func_get_arg(0);} var_dump(foo(1));”
    • tests/lang/func_get_arg.001.phpt
    • tests/lang/func_get_args.004.phpt
  2. Function parameters with duplicate name are not allowed anymore. Definitions like “function foo($x,$x) {}” will lead to compile time error “Redefinition of parameter”
    • Zend/tests/bug54013.phpt
    • Zend/tests/bug64515.phpt
  3. var_dump() may print recursive data structures differently

    Zend/tests/closure_026.phpt

  4. Passing scalars by reference may behave differently, because they don’t have reference counters anymore

Базовая работа с ООП:

Теперь надо понять базовые принципы работы с ООП в PHP, это достаточно просто, по крайне мере именно базовая работа.

PHP 7 объявление класса:

Для объявления класса в PHP, вам надо использовать только одно ключевое слово .

PHP

1 2 3 4 5 6 7 8 9 10

// Создаём класс User

classUser{


public$name=»Ваня»;// Свойство name

// Метод get_name

publicfunctionget_name(){

return$this->name;

}

}

Давайте разберём этот код по подробнее, мы создаём класс с именем , создаём внутри него свойство с именем , как можете заметить, свойство, это по сути переменная, которая принадлежит к конкретному классу или объекту.

Дальше идёт создание метода , по сути это функция, там даже используется слово , как при создание функции, внутри метода возвращаем свойство .

Для этого используем слово , оно обращается к свойству или методу класса, внутри самого класса, после идёт знак , он используется для обращение к элементу класса или объекта, дальше пишем имя свойства или метода, которое хотим получить, в нашем случае это свойство .

Обратите внимание: при создание свойства, в название используется знак доллара, как при создание переменной, а при обращению к нему нет. Что касается слова , пока что оно вам не нужно, просто знайте, что его надо писать перед объявлением свойства или метода, поподробнее о нём в другой части учебника

Что касается слова , пока что оно вам не нужно, просто знайте, что его надо писать перед объявлением свойства или метода, поподробнее о нём в другой части учебника.

Как видите, сначала всё достаточно просто, таким образом мы объявили класс.

PHP 7 объявление объекта:

В PHP создание объекта класса, очень простое, для этого используем переменную и слово .

Default

1 2

// Создаём объект класса User

$user=newUser();

Как видите, мы просто создаём переменную, с названием , и типа присваиваем ей класс , через слово , но на самом деле создаём объект, то есть мы говорим программе, присвой переменной , новый объект класса .

Базовая работа с объектом:

Теперь в PHP надо получить свойства класса, а точнее объекта, для этого используем переменную которая хранит в себе объект, и ещё используем знак .

PHP

1 2

// Получаем и выводим свойство name

echo$user->name;

Вот результат.

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

В PHP вызвать метод класса, то есть объекта, точно также, как получить свойство.

PHP

1 2

// Вызываем метод get_name

echo$user->get_name();

Как видите всё просто, результат точно такой же, как и в прошлый раз, когда получали свойство.

Вод вам весь код этой программы.

PHP

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

<?php   // Создаём класс User

classUser{

public$name=»Ваня»;// Свойство name

// Метод get_name

publicfunctionget_name(){

return$this->name;

}

}   // Создаём объект класса User

$user=newUser();

  // Вызываем метод get_name

echo$user->get_name();


С этим читают