Roadsend php compiler и Roadsend php IDE (бесплатная последняя версия 2.9.0-beta)

Наконец я нашел откомпилированную версию сабжа, и теперь ее можно скачать бесплатно, без СМС и вирусов отсюда. IDE, тащемта, дерьмо, но это можно простить, ибо писалось все это дело в 2008 году, но до сей поры ничего лучшего никто не написал.
Не буду подробно рассказывать, чего мне это стоило, но было нагажено одному болгарскому файл-хостингу и инсталлятор пришлось избавлять от вирей, распространяющих рекламу и майнящих криптовалюту.
Избавили и выкладываем в нормальный открытый доступ. Кто умеет в торренты, помогите и выложите на Рутрекер и TPB, оно маленькое 20 мегабайт всего. Но очень полезное.

Итак: Roadsend PHP Studio (IDE) + Roadsend PHP Compiler
Компилятор PHP для Windows.
Умеет компилировать PHP в EXE в нескольких режимах:
— Console application — на выходе получается стандартное консольное приложение для Win32
— Desktop GUI Application — десктопное оконное приложение, для того, чтоб его собрать нужны еще библиотеки и инструментарий PHP-GTK, в комплекте нет
— Compiled Web Application (FastCGI) — скомпилированное Web-приложение, в экзешник встраивается FastCGI.
— Standalone Web Application (MicroServer) — почти тоже самое, но в экзешник встраивается Web-сервер от Roadsend.
-Library — компилирует полноценный DLL из PHP-кода, который можно встроить в свое приложение, хоть на C#, хоть на C++, хоть на небе, хоть на Аллахе.
Компилировать может в двух режимах — dynamic и static, В статическом режиме в экзешник внедряются DLL от Sheme на котором написан сам компилятор, и их не надо таскать за собой, в динамическом режиме — будет надо, но в статическом вырастает размер готового экзешника, примерно на мегабайт.

Проблемы:
— В Windows 7 не работает штатный лаунчер для IDE (сам компилятор работает).

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

@echo off

set ROADSEND_ROOT=#put you Roadsend root directory here, e.g. C:\roadsend#
set SH=\bin\sh.exe
set IDE=\pcc\bin\loon.exe

if not exist %ROADSEND_ROOT%%SH% goto NOSH
if not exist %ROADSEND_ROOT%%IDE% goto NOIDE

echo Files OK.
echo Launch Roadsend IDE...
%ROADSEND_ROOT%%SH% --login -c "cd /pcc/bin && start loon"


:NOSH
	echo File %ROADSEND_ROOT%%SH% not found
	exit /b 1

:NOIDE
	echo File %ROADSEND_ROOT%%IDE% not found
	exit /b 1

куда вместо #put you Roadsend root directory here, e.g. C:\roadsend# надо вставить директорию, куда установлена IDE с компилятором.

Впрочем, Леша, заглаживая вчерашний демарш, написал свой лаунчер с азартными играми и продажными женщинами на C# и даже с инсталлятором.

Подробнее про Roadsend PHP Compiler и Roadsend PHP Studio можно прочесть в статье на Хабре

Скачать бесплатно, без СМС и вирусов

Оригинальный инсталлятор Roadsend PHP Studio (IDE + компилятор)

Лаунчер для Windows 7 (C#) с Mega.nz
Лаунчер для Windows 7 (C#) с GitHub

Лаунчер для Windows 7 (BAT/CMD) с Mega.nz
Лаунчер для Windows 7 (BAT/CMD) с GitHub

Прочие ссылки

Статья о Roadsend PHP Compiler на Хабр Копия
Исходники лаунчера
BAT/CMD лаунчер на PasteBin

Дождь

НЕФОРМАТ УДАЛЕН.

Леша Сайлент
Не потерплю такого неформатного говна на наших ресурсах. Типа давай гусей не дразнить

Определение IP и местоположения посетителя сайта 7.

Консольный вариант скрипта.

Т.е. это уже не совсем «определение местоположения посетителя сайта», это просто интерфейс к базе данных Sypex Geo, который можно использовать в консольных приложениях на PHP.

Что переделано:
Переделан изначальный скрипт, для работы под консоль, или, если хотите, а качестве stand-alone скрипта. Для консольного приложения очень важно вернуть код завершения, чтобы далее его могло обработать либо следующая программа в командном файле (BAT/CMD), либо вызвавшая скрипт, как внешний процесс, программа.

Таким же образом был немного подправлен SxGeo.php, распространяемый разработчиками Cypex Geo.

Исправления таковы:

— Везде, где скрипт завершает работу, была добавлена выдача кода завершения
— Таким же образом подправлен класс SxGeo, поставляемый разработчиками Cypex Geo.

Краткая справка скрипта:

Вызов скрипта:
consxgeo.php <ip-address> <database-path> [FIELD_NAME]
consxgeo.php --spec
consxgeo.php --help

--help - Помощь
--spec - Список зарезервированных диапазонов IP-адресов
<ip-address> - Адрес IPv4 (например, 8.8.8.8)
<database-path> - Путь к файлу SxGeoCity.dat
[FIELD_NAME] - Для включения в вывод результата работы скрипта источника IP-адреса. По умолчанию, это значение = MANUAL

Коды завершения:
0 - OK
1 - Предупреждение
3 - Вывод информационных сообщений
4 - Ошибка или неправильные параметры скрипта

Структура ответа:
IP|ISO_CODE|COUNTRY_NAME|CTNR_LAT|CTNR_LON|
REGION_ISO|REGION_NAME|CITY_NAME|CTY_LAT|CTY_LON
|FIELD|MESSAGE|

Пример вывода

Частный IP:


Просто адрес IP:

Сокращенный IP-адрес:

Скрипт на GitHub

Предыдущая часть Копия

PHP. Проверка корректности IP-адреса

Преамбула

[info]ketmar@ljr справедливо заметил, что наши скрипты принимают только IP-адреса в формате xxx.xxx.xxx.xxx, где xxx — десятеричное число от 0 до 255, а IP может быть записан и в виде шестнадцатеричных, и в виде восьмеричных чисел, и даже смешано. Также IP-адрес может быть неполным. Например, адрес 4.0.0.1 можно записать как 4.1
В наших скриптах корректность IP проверялась регулярным выражением, т.к. все равно им же производился поиск IP в полях HTTP_*, в которых IP может передаваться прокси-серверами.
Но валидацию IP можно провести и без использования регулярных выражений. Другое дело, поиск без него уже не произведешь, и это может создать определенные проблемы, если прокси-сервер, например, будет передавать IP в виде шестнадцатеричных чисел или преобразовывать, где возможно, полные адреса в неполные.

Не очень хороший способ валидации IP функцией filter_var()

В PHP 5.2.0 появилась функция filter_var(), которая позволяет проверять строки на соответствие разным форматам, не только IP, но и, например URL или e-mail.
Для проверки IP она вызывается так:

filter_var($ip,FILTER_VALIDATE_IP);
где:
$ip — строка, содержащая IP-адрес
FILTER_VALIDATE_IP — встроенный фильтр для IP-адреса
Функция возвращает TRUE, если строка прошла проверку, и FALSE если нет.

А не очень хорош способ тем, что валидацию проходят только IP, соответствующие формату «четыре десятеричных числа от 0 до 255, разделенных точкой», т.е. работает точно также, как и наша старая функция
Такое ощущение, что разработчики PHP пытаются избавить мир от зоопарка способов записи IP-адреса, и привести все, наконец, к единому знаменателю 🙂

Пример с использованием функции filter_var

Проверка корректности IP-адреса функцией ip2long()

[info]ketmar@ljr предлагал использовать сишную функцию inet_addr(), но где ж я ее возьму-то в PHP, подумал я, и зря подумал. 🙂 Функция ip2long($ip), которая использовалась для проверки попадания IP-адреса в определенный диапазон Копия ее аналог. Если переменная $ip содержит корректный IP-адрес, то функция вернет целое число, если в IP-адресе ошибка, то функция вернет FALSE или -1.

Примечание: Функция ip2long() возвратит FALSE для IP 255.255.255.255 в PHP 5 <= 5.0.2 и -1 в PHP 5 <=5.2.4 на 64-битных системах. Это было исправлено в PHP 5.2.5, теперь возвращается 4294967295. В 32-битных системах будет возвращено -1 из-за целочисленного переполнения.

Так что проверку на корректность IP можно делать в функции-обертке, добавив код-заглушку для IP 255.255.255.255:

function IsIP($ip)
{
	//преобразуем в нижний регистр, на случай шестнадцатиричных чисел
	$ip=strtoupper($ip);
	//ip2long в некоторых версиях php 
	//некорректно реагирует на адрес 255.255.255.255
	//делаем небольшую заглушку
	if ($ip == '255.255.255.255'||$ip == '0xff.0xff.0xff.0xff'||
	   $ip == '0377.0377.0377.0377')
	   {
		   return true;
	   }
	
	$tolong=ip2long($ip);
	
	if ($tolong == -1||$tolong===FALSE) return FALSE;
	else return TRUE;	
}

Преобразование неполных и прочих «необычных» IP-адресов в привычный вид.

В PHP есть функция long2ip(), которая делает обратное преобразование, т.е. преобразует целое число в IP-адрес в привычном виде. Если их совместить, то можно преобразовывать неполные адреса в полные:

function fulladdr($ip)
{
	//преобразует неполные адреса в полные
	//для информации
	$tolong=ip2long($ip);
	return long2ip ($tolong);
}


Пример работы скрипта:
isip.php?ip=4.1

Скрипт на GitHub

Внезапное дополнение

Внедрил последний метод в рабочие скрипты, залил на сервер, и оказалось, что метод не работает. Ну не то, чтобы не совсем не работает, а работает точно так же, как старая функция с регулярным выражением, т.е. возвращает TRUE только если IP-адрес записан в виде четырех десятеричных чисел от 0 до 255, разделенных точкой. Неполные адреса, или адреса в других системах счисления IP-адресами не считаются. Функция ip2long() возвращает FALSE, если ей скормить такой адрес. Уж не знаю, и сходу не нагуглил, отчего такая оказия, то ли такое поведение зависит от настроек PHP, то ли от сервера. На локальном сервере работало, а на том, который в интернете — перестало. Можно сказать, зря делал, но зато сделал валидацию IP без регулярного выражения.

Источники

1. ip2long
2. Ещё раз о filter_var