Как скомпилировать php
If you are getting the following error message:
Input Error: There is no script engine for file extension «.js»
with Visual Studio 2005 Command Prompt or similar, try to add «/e:jscript» to the command line.
Something like:
cscript /nologo /e:jscript win32/build/buildconf.js
It worked for me, I hope it helps.
12 years ago
Using —enable-snapshot-build when setting the configure command requires you to also set —disable-static-analyze (Win7 64Bit, VC9 Express, SDK 6.1) for otherwise you will run into a fatal compiler error «C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\Include\tchar.h(1659) : fa
tal error C1001: Interner Compilerfehler.
(Compilerdatei «msc1ast.cpp», Zeile 1411)»
(see also https://bugs.php.net/bug.php?id=55779)
14 years ago
If trying to compile the code (Windows XP, SDK v6.1) and you get the following types of errors:
c:\phpdev\php-5.2.9\main\php_network.h(128) : warning C4005: ‘POLLIN’ : macro redefinition
c:\program files\microsoft sdks\windows\v6.1\include\winsock2.h(1495) :
see previous definition of ‘POLLIN’
c:\phpdev\php-5.2.9\main\php_network.h(129) : warning C4005: ‘POLLPRI’ : macro redefinition
c:\program files\microsoft sdks\windows\v6.1\include\winsock2.h(1496) :
see previous definition of ‘POLLPRI’
c:\phpdev\php-5.2.9\main\php_network.h(130) : warning C4005: ‘POLLOUT’ : macro redefinition
c:\program files\microsoft sdks\windows\v6.1\include\winsock2.h(1499) :
see previous definition of ‘POLLOUT’
c:\phpdev\php-5.2.9\main\php_network.h(131) : warning C4005: ‘POLLERR’ : macro redefinition
c:\program files\microsoft sdks\windows\v6.1\include\winsock2.h(1502) :
see previous definition of ‘POLLERR’
c:\phpdev\php-5.2.9\main\php_network.h(132) : warning C4005: ‘POLLHUP’ : macro redefinition
c:\program files\microsoft sdks\windows\v6.1\include\winsock2.h(1503) :
see previous definition of ‘POLLHUP’
c:\phpdev\php-5.2.9\main\php_network.h(133) : warning C4005: ‘POLLNVAL’ : macro redefinition
c:\program files\microsoft sdks\windows\v6.1\include\winsock2.h(1504) :
see previous definition of ‘POLLNVAL’
NMAKE : fatal error U1077: ‘»C:\Program Files\Microsoft Visual Studio 9.0\VC\BIN
\cl.exe»‘ : return code ‘0x2’
Stop.
You can alter the Makefile and add the following switch to CFLAGS:
Как скомпилировать php
PHP — интерпретируемый язык программирования, при каждом запросе происходит анализ и «выполнение» исходного кода. Такой подход, конечно, очень удобен на стадии разработки проекта, но вносит лишний шаг в процесс выполнения продакшен кода. Таким образом интерпретация, на первый взгляд сильная сторона PHP, стоит лишнего процесорного времени и ресурсов.
Ниже речь пойдет о компиляторах, позволяющих компилировать php код в C++, а его в исполняемый. Таким образом PHP приложения выполняются непосредсвенно процессором, минуя интерпретатор.
Проверим все ли так хорошо на практике.
Как работает интерпретатор
- Парсинг кода и генерация опкодов (Zend opcodes) — инструкций, понятных интерпретатору.
- Выполнение опкодов.
Тогда как первая фаза хорошо поддается оптимизации (использование кеша опкодов), вторая довольно закрытая — интерпретатор всегда является посредником между набором команд и процессором, выполняющим их. Без интерпретатора, процессору не понять, чего делать с опкодами.
Чтобы избавиться от звена-интерпретатора придумали компиляторы, наиболее популярный и свежий из них HipHop от Facebook. Пощупаем его поближе.
HipHop PHP
- оптимизирует PHP код
- конвертирует в С++
- генерирует из вашего приложения многопоточный веб-сервер исполняющий его
- компилирует в исполняемый код при помощи g++
Таким образом на входе PHP код, на выходе сервер, частью которого является написаный функционал.
Проверим, как справится HipHop с компилированием приложения написаного с использованием фреймворка, например WordPress.
Компилируем WordPress
После установки HipHop в папке src/hphp/ получим файл hphp, который и является компилятором. Перед началом компиляции, устанавливаем переменные среды:
cd .. # переходим в папку с hiphop export HPHP_HOME=`pwd` export HPHP_LIB=`pwd`/bin export CMAKE_PREFIX_PATH=`/bin/pwd`/../
Скачиваем WordPress и разархивируем архив:
wget http://wordpress.org/latest.tar.gz tar zxvf latest.tar.gz
Копируем wp-config-sample.php в wp-config.php и указываем настройки соединения с базой (в настройках хоста указываем 127.0.0.1, а не localhost).
-
Открываем wp-includes/js/tinymce/plugins/spellchecker/classes/SpellChecker.php и заменяем:
function &loopback(/* args.. */)
function &loopback(/* args.. */)
if ( !isset($q['suppress_filters']) ) $q['suppress_filters'] = false;
$q['suppress_filters'] = true;
Hiphop’у нужно указать список файлов, которые будем компилировать — получим его и сохраним в files.list:
find . -name "*.php" > files.list
Все готово к компиляции, приступим:
$HPHP_HOME/src/hphp/hphp --input-list=files.list -k 1 --log=3 --force=1 --cluster-count=50
После завершения выполнения команды, во временной папке (в начале компиляции hphp покажет ее путь, что то типа «/tmp/hphp_ptRgV1») получим скомпилированный веб-сервер. Запустим его (если на 80 порту, что-то висит, например apache или nginx — нужно сначала остановить, чтобы освободить порт):
sudo /tmp/hphp_6s0pzd/program -m server -v "Server.SourceRoot=`pwd`" -v "Server.DefaultDocument=index.php" -c $HPHP_HOME/bin/mime.hdf
Вуаля! Перейдя на http://localost увидим рабочий WordPress блог.
Производительность
Посмотрим, будет ли прирост производительности, по сравнению с нескомпилированой версией Вордпреса, бегающей на apache2. Ниже графики зависимости скорости генерации страниц от количества параллельных пользователей.
Как видите результаты получились шокирующие: скомпилированый блог работает в среднем в 6 раз быстрее! Среднее количество обработанных запросов за секунду в нескомпилированом 9, а в скомпилированом 50! Не знаю как вас, а меня эти результаты поразили, такого сильного прироста производительности не ожидал.
Подведем итог
После таких ошеломляющих результатов можно сказать только одно — ребята из Facebook поработали на славу. Компилятор действительно делает из приложения ракету и хотя перед компилированием приложение нужно подготавливать — результат того стоит.
В тему:
- Компиляция PHP приложений — Phc и Phalanger
- Шустрые фреймворки-расширения
Если пост понравился — нажмите на гугловский +1 — мне будет больше мотивации писать ещё и просто приятно.
Компиляция php
Вопрос можно ли скомпилировать php для работы на сервере (т.е. не интерпретировать через движок php, а скомпилировать и вызывать)? Дело в том что нашел на хабре статью, сравнивающую twig со smarty и там была табличка с графой компиляция. Вот я не понял как они компилировали и имелось ли ввиду компиляция php скрипта или шаблона в быстрый php скрипт (как это делает смарти). Также заинтересовал возможность компилирования, чтобы продавать под ключ сайты.
Отслеживать
задан 30 сен 2011 в 18:14
3,322 3 3 золотых знака 28 28 серебряных знаков 56 56 бронзовых знаков
Присоединяюсь к вопросу, хотелось бы увидеть примеров парочку.
30 сен 2011 в 18:20
Про шаблонизаторы — имелось в виду второе.
30 сен 2011 в 18:28
понятно все со смарти) оставшаяся часть вопроса все еще интересна)
30 сен 2011 в 18:29
4 ответа 4
Сортировка: Сброс на вариант по умолчанию
Имеется еще такая штука, как говорит википедия
Zend Guard (ранее назывался Zend Encoder) — позволяет закодировать скрипт в байт-код, который потом можно использовать точно также как и обычный, за исключением возможности его отредактировать. Предназначено для защиты интересов и интеллектуальной собственности разработчика. Для работы таких скриптов обязательно нужен Zend Optimizer.
Zend SafeGuard Suite — то же самое, что и Zend Encoder, только дополнен Zend License Manager, который позволяет создавать лицензии к кодируемым скриптам. Можно задать время (expire) и условия (привязка к IP, MAC, etc) работы. Удобно для Shareware-версий или демоверсий.
Zend Optimizer — единственное приложение, распространяемое бесплатно. Являет собой серверный модуль для запуска закодированных с помощью Zend Encoder и Zend SafeGuard Suite скриптов, а также немного их ускоряющий (заявлено, что до 40 %).
Подробности о разработках Zend найдете здесь. Цены, правда, запредельные, но как вариант я бы рассмотрел.
Как скомпилировать PHP?
Заинтересовало получение патента на мое ПО, а там сказано, что это возможно только для скомпилированного приложения таким образом набор PHP скриптов патентованию не подлежит.
Но. У нас есть FCGI или какой-то JIT(PHP 8). То есть скрипт куда-то компилируется. Можно ли через командную строку закомпилить мой kernel, если я через foreach собираю все ядро в один файл и наружу торчит только подключение шаблона?
Может есть вариант как-то это сделать или хотя бы написать извлечение CGI компилята из памяти?
Я бы хотел запатентовать мою архитектуру приложения.
