Оплата        11.05.2019   

Основные преимущества PHC. Бесплатные компиляторы PHP для составления скриптов native code,.NET или Java байт-кода

Здравствуйте! Сейчас мы попробуем реализовать самую простую регистрацию на сайте с помощью PHP + MySQL. Для этого на вашем компьютере должен быть установлен Apache. Принцип работы нашего скрипта изображен ниже.

1. Начнем с создания таблички users в базе . Она будет содержать данные пользователя (логин и пароль). Зайдем в phpmyadmin (если вы создаете базу на своем ПК http://localhost/phpmyadmin/ ). Создаем таблицу users , в ней будет 3 поля.

Я создаю ее в базе mysql, вы можете создавать в другой базе. Далее устанавливаем значения, как на рисунке:

2. Необходимо соединение с этой таблицей. Давайте создадим файл bd.php . Его содержание:

$db = mysql_connect ("ваш MySQL сервер","логин к этому серверу","пароль к этому серверу");
mysql_select_db ("имя базы, к которой подключаемся",$db);
?>

В моем случае это выглядит так:

$db = mysql_connect ("localhost","user","1234");
mysql_select_db ("mysql",$db);
?>

Сохраняем bd.php .
Отлично! У нас есть таблица в базе, соединение к ней. Теперь можно приступать к созданию странички, на которой пользователи будут оставлять свои данные.

3. Создаем файл reg.php с содержанием (все комментарии внутри):



Регистрация


Регистрация
















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



{
}
//если логин и пароль введены, то обрабатываем их, чтобы теги и скрипты не работали, мало ли что люди могут ввести


//удаляем лишние пробелы
$login = trim($login);
$password = trim($password);
// подключаемся к базе
// проверка на существование пользователя с таким же логином
$result = mysql_query("SELECT id FROM users WHERE login="$login"",$db);
if (!empty($myrow["id"])) {
exit ("Извините, введённый вами логин уже зарегистрирован. Введите другой логин.");
}
// если такого нет, то сохраняем данные
$result2 = mysql_query ("INSERT INTO users (login,password) VALUES("$login","$password")");
// Проверяем, есть ли ошибки
if ($result2=="TRUE")
{
echo "Вы успешно зарегистрированы! Теперь вы можете зайти на сайт. Главная страница";
}
else {
echo "Ошибка! Вы не зарегистрированы.";
}
?>

5. Теперь наши пользователи могут регистрироваться! Далее необходимо сделать "дверь" для входа на сайт уже зарегистрированным пользователям. index.php (комментарии внутри) :

// вся процедура работает на сессиях. Именно в ней хранятся данные пользователя, пока он находится на сайте. Очень важно запустить их в самом начале странички!!!
session_start();
?>


<a href="/personal-account/kak-sdelat-yandeks-poiskovoi-stranicei-kak-sdelat-glavnuyu-stranicu/">Главная страница</a>


Главная страница











Зарегистрироваться



// Проверяем, пусты ли переменные логина и id пользователя
if (empty($_SESSION["login"]) or empty($_SESSION["id"]))
{
// Если пусты, то мы не выводим ссылку
echo "Вы вошли на сайт, как гость
Эта ссылка доступна только зарегистрированным пользователям";
}
else
{

В файле index.php мы выведем ссылочку, которая будет открыта только для зарегистрированных пользователей. В этом и заключается вся суть скрипта - ограничить доступ к каким-либо данным.

6. Остался файл с проверкой введенного логина и пароля. testreg.php (комментарии внутри):

session_start();// вся процедура работает на сессиях. Именно в ней хранятся данные пользователя, пока он находится на сайте. Очень важно запустить их в самом начале странички!!!
if (isset($_POST["login"])) { $login = $_POST["login"]; if ($login == "") { unset($login);} } //заносим введенный пользователем логин в переменную $login, если он пустой, то уничтожаем переменную
if (isset($_POST["password"])) { $password=$_POST["password"]; if ($password =="") { unset($password);} }
//заносим введенный пользователем пароль в переменную $password, если он пустой, то уничтожаем переменную
if (empty($login) or empty($password)) //если пользователь не ввел логин или пароль, то выдаем ошибку и останавливаем скрипт
{
exit ("Вы ввели не всю информацию, вернитесь назад и заполните все поля!");
}
//если логин и пароль введены,то обрабатываем их, чтобы теги и скрипты не работали, мало ли что люди могут ввести
$login = stripslashes($login);
$login = htmlspecialchars($login);
$password = stripslashes($password);
$password = htmlspecialchars($password);
//удаляем лишние пробелы
$login = trim($login);
$password = trim($password);
// подключаемся к базе
include ("bd.php");// файл bd.php должен быть в той же папке, что и все остальные, если это не так, то просто измените путь

$result = mysql_query("SELECT * FROM users WHERE login="$login"",$db); //извлекаем из базы все данные о пользователе с введенным логином
$myrow = mysql_fetch_array($result);
if (empty($myrow["password"]))
{
//если пользователя с введенным логином не существует
}
else {
//если существует, то сверяем пароли
if ($myrow["password"]==$password) {
//если пароли совпадают, то запускаем пользователю сессию! Можете его поздравить, он вошел!
$_SESSION["login"]=$myrow["login"];
$_SESSION["id"]=$myrow["id"];//эти данные очень часто используются, вот их и будет "носить с собой" вошедший пользователь
echo "Вы успешно вошли на сайт! Главная страница";
}
else {
//если пароли не сошлись

Exit ("Извините, введённый вами login или пароль неверный.");
}
}
?>

Ну вот и все! Может урок и скучный, но очень полезный. Здесь показана только идея регистрации, далее Вы можете усовершенствовать ее: добавить защиту, оформление, поля с данными, загрузку аватаров, выход из аккаунта (для этого просто уничтожить переменные из сессии функцией unset ) и так далее. Удачи!

Все проверил, работает исправно!

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

Ниже речь пойдет о компиляторах, позволяющих компилировать php код в C++, а его в исполняемый. Таким образом PHP приложения выполняются непосредсвенно процессором, минуя интерпретатор.

Проверим все ли так хорошо на практике.

Как работает интерпретатор

Интерпретация PHP кода проходит в два этапа:

  1. Парсинг кода и генерация опкодов (Zend opcodes) - инструкций, понятных интерпретатору.
  2. Выполнение опкодов.

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

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

HipHop PHP

HipHop написан разработчиками Facebook и представляет собой приложение, которое:
  1. оптимизирует PHP код
  2. конвертирует в С++
  3. генерирует из вашего приложения многопоточный веб-сервер исполняющий его
  4. компилирует в исполняемый код при помощи 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).

Для удачной компиляции нужно немного пропатчить Wordpress:

  1. Открываем wp-includes/js/tinymce/plugins/spellchecker/classes/SpellChecker.php и заменяем: function &loopback(/* args.. */) { return func_get_args(); } на function &loopback(/* args.. */) { $ret = func_get_args(); return $ret; }
  2. В wp-includes/query.php, вместо if (!isset($q["suppress_filters"])) $q["suppress_filters"] = false; вставляем $q["suppress_filters"] = true;

Wordpress готов.

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 поработали на славу. Компилятор действительно делает из приложения ракету и хотя перед компилированием приложение нужно подготавливать - результат того стоит.

В тему:

Если пост понравился - нажмите на гугловский +1 - мне будет больше мотивации писать ещё и просто приятно.

Почти все разработчики рано или поздно сталкиваются с необходимостью запустить или быстро проверить какой-то код, но не все знают, что для такой простой задачи совсем не обязательно запускать тяжёлые десктопные IDE или прикладные компиляторы. Достаточно воспользоваться онлайн-инструментами, которые позволяют всё сделать намного быстрее: Ctrl+C, Ctrl+V, Run, вжух - и вывод программы уже перед вашими красноватыми глазами.

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

Koding

Koding.com не является онлайн-компилятором в привычном смысле. Каждый пользователь сервиса может создать в облаке несколько полноценных виртуальных машин под управлением Ubuntu 14.04, на которых может сделать всё, что пожелает, в том числе - скомпилировать код. Все популярные языки поддерживаются по умолчанию, но вы с лёгкостью сможете добавить свои.

Кроме панели управления своим сервером, в интерфейсе доступна удобная IDE и окошко терминала. Koding является самым универсальным средством, далее мы рассмотрим более простые и специализированные варианты.

IdeOne

IdeOne - это онлайн компилятор, а также инструмент отладки, который позволяет прямо в браузере выполнять код на более чем 60 языках программирования и их конкретных версиях.

Для тех, у кого нет девушки, создатели предусмотрели компиляцию кода на языке Brainfuck.

JDoodle

Ещё один онлайн-компилятор, который поддерживает множество языков, в том числе и тех, которые вы не найдете во многих других онлайн-компиляторах. Приятной особенностью JDoodle является возможность совместной работы - просто отправьте ссылку на вашу текущую сессию и плодите баги с двойной скоростью!

jsFiddle

Пусть название вас не обманывает - jsFiddle создан не только для JavaScript. Этот онлайн-редактор для фронтенда позволяет проверить любое сочетание JavaScript, HTML и CSS. Разумеется, есть поддержка разных фреймворков, например, jQuery, Vue, React, TypeScript, а также CSS-препроцессоров вроде SCSS. Для удобства вы можете выбрать привязку клавиш из любимого редактора. Правда, только в том случае, если ваш любимый редактор - Vim, Emacs или Sublime Text.

CodePad

CodePad - минималистичный сервис, в котором можно хранить код, делиться им и запускать с последующим выводом результатов его выполнения. На выбор предоставляется несколько наиболее распространённых языков, но, к сожалению, без выбора конкретных версий интерпретаторов или компиляторов.

Главным его достоинством является простота и лёгкость: сайт будет быстро работать даже при медленном интернете. Предусмотрено автоподключение стандартных заголовков, а также интеграция с Vim или Emacs.

Из минусов можно назвать полное отсутствие подсветки синтаксиса при вводе кода в форму. Впрочем, при просмотре уже сохранённой записи подсветка присутствует.

GCC GodBolt

GCC GodBolt - интерактивный компилятор языка С++. Попал в эту подборку по той причине, что имеет простой интерфейс, а также большое количество настроек, в том числе для опций, регулируемых с помощью ключей.

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

Все бесплатные компиляторы PHP, которые представлены здесь, могут пересобирать PHP скрипты в машинный код, способный работать на компьютере без загрузки специального PHP интерпретатора, или компилировать их в интерфейс командной строки байт-кода (для установки необходим NET или Mono framework или Java байт-кода (где требуется виртуальная машина Java для установки)).

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

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

Полезная информация для тех, кто ещё не знает, что официальную версию PHP-переводчика можно скачать на сайте PHP: Hypertext Processor.

Бесплатные компиляторы PHP для составления скриптов native code, .NET или Java байт-кода.

Bambalam (новинка)

Эта программа производит самостоятельные Windows приложения EXE для вашего PHP исходного кода. Это не совсем компилятор для native code, поскольку он просто кодирует исходный код и встраивает интерпретатор PHP, но эта программа, безусловно, подходит людям, которые ищут компиляторы для native и byte-code. К тому времени, как вся программа была написана, средой её выполнения была встроенная версия PHP 4.4.4 (программа не обновлялась с 2006 года). Исходный код для Bambalam находится в открытом доступе.

Phalanger (для.NET)

Phalanger компилирует ваш PHP код в байт-код CLI (.exe или.dll). Эту программу можно запустить через.NET 4.0 или Mono frameworks. Ваш PHP код может использовать любые объекты.NET и дополнительные библиотеки стандартного расширения PHP. Получившаяся NET-сборка может быть как подписанной, так и скрытой. Данная программа также выпускает шаблоны, позволяющие вам создавать приложения PHP с помощью Visual Studio. Программа выпущена под лицензией Apache.

HipHop for PHP (для native code)

HipHop переводит ваш PHP код на код С++, который позже компилируется, используя компилятор GNU C++, в исполняемый двоичный код. Компилятор поддерживает все функции версии PHP 5.3 (конечно, за исключением такой вещи, как eval() ). Он работает и компилирует код для 64 битной версии Linux и FreeBSD. Так как программа распространяется в форме исходного кода, вам придётся компилировать вручную (самостоятельно). Она выпускается под лицензией PHP Licence.

Roadsend PHP (для native code).

Компилятор Roadsend PHP производит машинные двоичные (исполняемые) файлы для Windows и Linux. Ваши скрипты не ограничиваются программами консоли (командными строками): они могут быть построены с помощью встроенных веб-серверов, позволяющих им работать тем способом, которым они работают на веб-сайте, пусть и на вашей конечно пользовательской системе. Компилятор выпущен под лицензией GNU GPL и выполняется под GNU LGPL. К несчастью, программа остановила своё активное развитие.

Project Zero (для Java)

(Замечание: похоже, это программное обеспечение является ныне несуществующим. Сайт вот уже как пол года является недосягаемым.) Project Zero включает в себя компилятор и среду CLR, которые могут прокомпилировать ваш PHP код в Java bytecode и исполнять его. Заметьте, что Project Zero является чем-то большим, чем просто PHP компилятором/средой выполнения; он представляет собой развитую среду, которая позволяет вам совершенствовать веб-приложения, используя PHP или Groovy (другой скрипт-язык). Этот компилятор доступен для Windows, Mac OS X и Linux. Для того, чтобы работать с этим компилятором, вам понадобиться скачать Java Development Kit.

А какой из предложенных компиляторов предпочитаете вы? Или у вас есть другой любимый переводчик? Оставляйте свои замечания и комментарии ниже, мы с радостью их прочитаем и намотаем на ус.

Теги: PHP компиляторы, перевод скриптов