Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   ПО для Web разработчика (https://forum.antichat.xyz/forumdisplay.php?f=92)
-   -   Bambalam PHP EXE Compiler/Embedder 1.21 (https://forum.antichat.xyz/showthread.php?t=131232)

b3 24.07.2009 21:02

Компилируем PHP в Win приложения
 
Компилируем PHP в Win приложения

Что нам понадобится скачать:
1. winbinder - Фреймворк для разработки ГУИ, легкий в использовании.
Скриншот программы
2. Bambalam PHP EXE Compiler/Embedder - Компилятор PHP скриптов. Качаем последнюю версию.
Мини фак по использованию:
Цитата:

Usage:
bamcompile [-options] infile.php [outfile.exe]
bamcompile [-options] project_directory mainfile.php [outfile.exe]
bamcompile projectfile.bcp

Options:
-w Hide console window for windowed applications
-c Compress output exe (using UPX)
-d Do not encode PHP files
-e:extension.dll Embed and use PHP extension
-i:icon.ico Add icon to exe
Далее будет подробно...
3. UPX - Компресор, чтоб наше приложение на выходе было не таким весомым. В bamcompile он уже есть, но я качал последнюю версию с SVN'a.
4. Иконка =) для нашего приложения, допустим эта - ЙА ИКОНКО
5. php_winbinder.dll - библиотека для создания окон, это нужно для того что в некоторых версиях bamcompile к примеру в последней версии на данный момент 1.21 некоректно работает с окнами и создает нерабочие приложения, данная либа решает эту проблемму.

Подготовка

1. Создаем на Диске C: файл cmd.bat с содержимым:
Цитата:

cmd.exe
2. Создаем там же папку bamcompile, в нее кидаем:
bamcompile.exe - компилятор
favicon.ico - иконку
php_winbinder.dll - библиотеку
upx.exe - упаковщик
И обязательно папку include из установленой программы WINBINDER по умолчанию путь к ней C:\WinBinder\phpcode\include в етой папке класс для работы с Формами.
Вот в принцыпе и все. Перейдем к небольшому примеру:

Пример
1. Запускаем наш cmd.bat в него закидываем bamcompile.exe[пробел]
Теперь нужно указать все параметры:
2. Ставим иконку:
Цитата:

-i:C:\bamcompile\favicon.ico[пробел]
Подсказка: в окно консоли можно закидывать файлы, и путь будет прописываться автоматом, ненужно писать все пути вручную.
3. Добавляем библиотеку
Цитата:

-e:C:\bamcompile\php_winbinder.dll[пробел]
4. Далее указываем что ето Оконное приожение а не консольное (-w) и то, что мы хотим его запаковать пакером UPX (-c)
Цитата:

-w -c[пробел]
5. Указываем путь к скрипту который компилим:
Цитата:

C:\bamcompile\calculate.php
Готово, если сделали все правильно, то в папке где был скрипт появится EXE файл, упакованый и с иконкой. На скрине удачно выполненый нерультат:

Для примера я взял готовый php скрипт, с коментариями. Скрипт скапипизжен с http://www.codenet.ru/webmast/php/PHP-Compiler-EXE/
PHP код:

<?php

// Подключаем основную библиотеку
include "include/winbinder.php";

// Даём метки окнам редактирования
define('IDC_EDITBOX1002'1002);
define('IDC_EDITBOX1003'1003);

// Рисуем окошко
$winmain wb_create_window(null,
        
AppWindow,
        
'MD5 Hash Generator by S1B [SBT]',
        
WBC_CENTERWBC_CENTER315134,
        
0x000000000);

// Шпигуем окошко кнопками

# Рисуем рамочку
wb_create_control($winmainFrame''10102908500x0000000000);
# Рисуем надписи (лейблы)
wb_create_control($winmainLabel'Текст:'2335451500x0000000000);
wb_create_control($winmainLabel'Hash:'2365451500x0000000000);
# Рисуем окошки редактирования (нижнее будет неактивным), и загоняем их данные в переменные
$text=wb_create_control($winmainEditBox''783021020IDC_EDITBOX10020x0000000000);
$hash=wb_create_control($winmainEditBox''786021020IDC_EDITBOX10030x0000004000);

// Две необходимые надписи =)
wb_set_handler($winmain"process_main");
wb_main_loop();

function 
process_main($window,$id) {
  
# Объявляем данные окошек редактирования глобальными
 
global $text,$hash;
 switch(
$id) {
  case 
IDC_EDITBOX1002:
    
wb_set_text($hash,md5(wb_get_text($text)));
  break;
  case 
IDCLOSE:
   
wb_destroy_window($window);
  break;
 }
}

?>

В результате имеем программу с приятным интерфейсом


Все файлы, можно скачать с моего архива - http://b3.grabberz.com/files/bamcompile.rar [3mb]
b3 (c) Спешинал для недовольного Pashkela :D

BiG_][aKeR 19.09.2009 20:15

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

zifanchuck 19.09.2009 20:31

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

Mixon 26.09.2009 10:24

Сейчас вот сижу и дуплю это,подскажите кто знает,как тут сделать подобие этого <input type="file" name="Filedata">,тоисть выбор файла с кнопочкой "Обзор"...

Pashkela 26.09.2009 21:37

очень просто, примеры есть в winbinder , пункт 1 из первого поста. Когда скачаешь, загляни в папочку "\phpcode\examples" и у тебя глаза на лоб вылезут от открывшихся переспектив:)

geforse 27.09.2009 12:00

А у меня отказывается работать :(
Делаю всё по инструкции, в логах написано что все ОК и *.exe создаётся, но когда его открываю, то ничего не происходит :(

Pashkela 27.09.2009 13:29

покажи код, который компилишь

geforse 27.09.2009 13:51

Код "калькулятора" из первого поста
Вот логи:

PHP код:

Bambalam PHP EXE Compiler/Embedder 1.21

Windowed application
Compress
Mainfile
calculate.php
Outfile
calculate.exe

Encoding 
and embedding calculate.php
Embedding php_winbinder
.dll and adding it to extension loader
Compressing 
final exe..
Compression done

calculate
.exe created successfully

Думал у меня с вистой что-то не так, запустил на ХП, тот же результат :(

Pashkela 27.09.2009 14:55

ну ты выбрал для первогот раза, молодец, чтобы скомпилировать калькулятор, у тебя должны быть:

В отдельной папке лежать файлы и папка:

- файл calculate.bcp
Код:

; Bamcompile example project file
mainfile calculate.php
outfile calculate.exe
compress
windowed
icon calculate\hal.ico
embed calculate
extension calculate\php_winbinder.dll

- файл compile.bat
Код:

bamcompile calculate.bcp
- файл bamcompile.exe

- папка calculate, в ней:

------файл php_winbinder.dll
------файл calc.rc
------файл calculate.php
------файл hal.ico (файл иконки для программы)
------папка include, в ней:
-----------файл winbinder.php

geforse 27.09.2009 15:04

Все заработало, спасибо :)
Вы добавили слишком много репутации в последние 24 часа. Попробуйте попозже.

Pashkela 28.09.2009 15:24

CURL+bamcompile

1. Качаем нужные библы тут
2. Для компиляции вашего php-скрита с curl положите рядом со скриптом все файлы, что вы скачали - php_curl.dll, libeay32.dll, ssleay32.dll
3. Сам bamcompile.exe должен тоже лежать рядом (т.е. вообще все файлы в одной отдельной папке)
4. Создайте и запустите такой create.cmd:
Код:

cmd /k bamcompile -e:php_curl.dll -c ваш_скрипт.php ваш_скрипт.exe
5. Готово, curl работает.

PS: Ограничения - если вы убираете получившийся .exe в другую папку, всегда придется с собой таскать php_curl.dll, libeay32.dll, ssleay32.dll - без них программа работать не будет. Т.е. они всегда должны лежать рядом с .exe

Tested on Bamcompile 1.21 + Win XP

Deathdreams 02.11.2009 14:29

Как тут сделать в окне <textarea> с полосой прокрутки?

m0Hze 02.11.2009 14:46

Цитата:

Сообщение от Deathdreams
Как тут сделать в окне <textarea> с полосой прокрутки?

Правильно построенный вопрос - 50% ответа.

Deathdreams 02.11.2009 14:54

m0Hze

Это тебе не php :)

Тут от PHP остались только функции, а оформление по-другому строится.

erihtoney 13.11.2009 14:12

Извращение, зачем тогда гребаный delphi, всеми любимый си++, java и другие языки?

login999 13.11.2009 14:34

Цитата:

Сообщение от erihtoney
Извращение, зачем тогда гребаный delphi, всеми любимый си++, java и другие языки?

Для того чтоб мы занимались онанизмом, глядя на них :)

Mixon 14.11.2009 16:00

Блин,когда начинает исполняться скрипт то окно с скриптом полностью зависает аж до его полного исполнения,что делать????
sleep(x);
Не помогает!((((

Pashkela 14.11.2009 16:03

Для начала научиться юзать неблокируемые сокеты, если речь идет о парсинге чего либо с www

PS: Всё там работает, и работает довольно прилично, просто нет многопоточности. У меня даже есть SIPT5 практически рабочий на winbinder :)

Но скрипт на том же перле круче в разы, если не в десятки раз

Но чтобы юзать winbinder для серьезных задач - простыми знаниями на php не обойдешься, нужны годы практики и абсолютное понимание каждой функции

Mixon 14.11.2009 16:08

я юзаю тут curl,и пока полное исполнение именно php скрипта не пройдёт то он зависает!!! Пример:

function starter(){
sleep(10);
}

По нажатию кнопки старт в интерфейсе запуститься эта функция,и эти 10 секунд что он спит окно скрипта "Не отвечает"! Причём тут сокеты или что либо если даже sleep зависает...:(

Pashkela 14.11.2009 16:15

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

PS: sleep - не выход, выполнение sleep есс-но влияет на работу всего приложения, т.е. если юзать sleep - то, пока пауза, ничего нажать не получиться. Тем более 10 секунд.

Вот функция с неблокируемыми сокетами которая подойдет для парсинга любой URL (кроме https):

PHP код:

function sql($url) {
  
$patern "/^(http:\/\/)?([^\/]+)/i"
  
$source_host preg_match($patern$url$rezz);
  
$host $rezz[2];
  
$url1 "GET $url\n"// Тут GET можно поменять на POST, к примеру
  
$responce ""
  
$timeout 30// На Ваше усмотрение
  
$fsock    fsockopen($host80$errnum,$errstr,$timeout); 
  if (
$fsock) {  
         
$headers  $url1;
         
$headers .= "Host: $host\n"
         
$headers .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.0.2) Gecko/20060308 Firefox/1.5.0.2\n"
         
$headers .= "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\n"
         
$headers .= "Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3\n"
         
$headers .= "Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7\n"
         
$headers .= "Keep-Alive: 500\n"
         
$headers .= "Connection: close\n"
         
$headers .= "Content-Type: application/x-www-form-urlencoded\r\n\r\n"
         
fwrite   ($fsock,$headers); 
         
stream_set_blocking($fsock0);
         
stream_set_timeout($fsock$timeout);  
         while    (!
feof($fsock)) $responce .= fread($fsock,4096);  
         
fclose   ($fsock);
  }
  return 
$responce;       


пример вызова:

PHP код:

$a sql("http://rambler.ru"); 


Mixon 14.11.2009 16:25

Pashkela,плиз,можеш тогда мне сейчас сделать на неблокируемых сокетах аналог моей функции на php?

PHP код:

function curl($urlcurl,$postcurl,$cookiescurl){
    
$ch=curl_init ($urlcurl);
    
$ua 'Opera/9.64 (Windows NT 5.1; U; ru) Presto/2.1.1';
    
curl_setopt($chCURLOPT_USERAGENT$ua);
    
curl_setopt($chCURLOPT_HEADER0);
    
curl_setopt($chCURLOPT_USERAGENT$ua);
    
curl_setopt($chCURLOPT_REFERER$ref);
    
curl_setopt($chCURLOPT_POST1);
    
curl_setopt($chCURLOPT_POSTFIELDS$PostData);
    
curl_setopt($chCURLOPT_FOLLOWLOCATION1);
    
curl_setopt($chCURLOPT_RETURNTRANSFER1);
    
curl_setopt($chCURLOPT_COOKIE$cookiescurl);
    
curl_setopt($chCURLOPT_POSTFIELDS$postcurl);
    
$page=curl_exec($ch);
    return 
$page;


чтоб был вызов функцыи такой: sock("Ссылка URL","POST запрос вида s=1&hh=4","Кукисы");

Просто я с соксами не работал,всегда курлом обходился,как с ними работать хз,ну более чем такая функция мне и ненужно ничего.Спс

Pashkela 14.11.2009 16:30

исправил предыдущий пост, изучай (там только куки вставить и пост-данные)

Цитата:

Просто я с соксами
сокс это вовсе не сокеты. Не путай фундаметнальные понятия. SOCKETS !== SOCKS

PS: Curl - для лохов. Всегда зри в корень протокола. Познаешь сокеты - захаваешь весь интернет. Шутка, но с очень большой долей правды

Mixon 14.11.2009 16:40

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

PHP код:

<?
include "include/winbinder.php";
define("ID_START",    100);


$mainwin wb_create_window(null,AppWindow,'Тест зависания...',WBC_CENTERWBC_CENTER600600,0x000000000);



wb_create_control($mainwinPushButton"СТАРТ!",       2020560520,    ID_START);



wb_set_handler($mainwin"process_main");
wb_main_loop();

function 
process_main($window,$id) {
 switch(
$id) {
  case 
ID_START:
$a sql("http://www.model.poltava.ua");
alert($a);
  break;
  case 
IDCLOSE:
   
wb_destroy_window($window);
  break;
 }
}

 function 
sql($url) {
  
$patern "/^(http:\/\/)?([^\/]+)/i";
  
$source_host preg_match($patern$url$rezz);
  
$host $rezz[2];
  
$url1 "GET $url\n"// Тут GET можно поменять на POST, к примеру
  
$responce "";
  
$timeout 30// На Ваше усмотрение
  
$fsock    fsockopen($host80$errnum,$errstr,$timeout);
  if (
$fsock) {
         
$headers  $url1;
         
$headers .= "Host: $host\n";
         
$headers .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.0.2) Gecko/20060308 Firefox/1.5.0.2\n";
         
$headers .= "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\n";
         
$headers .= "Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3\n";
         
$headers .= "Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7\n";
         
$headers .= "Keep-Alive: 500\n";
         
$headers .= "Connection: close\n";
         
$headers .= "Content-Type: application/x-www-form-urlencoded\r\n\r\n";
         
fwrite   ($fsock,$headers);
         
stream_set_blocking($fsock0);
         
stream_set_timeout($fsock$timeout);
         while    (!
feof($fsock)) $responce .= fread($fsock,4096);
         
fclose   ($fsock);
  }
  return 
$responce;
}

function 
alert($textalert){
wb_message_box($window$textalert"Alert"WBC_INFO);
}

?>

Сайт выбрал который долго грузиться,сам посмотри...Пока сокс не выполниться,тоисть весь скрипт,ты ничего не можешь сделать...так же само если и место
$a = sql("http://www.model.poltava.ua");
вставить sleep(20);
он зависнет,или любую долгую операцию...

Pashkela 14.11.2009 16:45

так и должно быть, ни в одном языке программирования при плохом конекте с сайтом скорости не жди. Многопоточный если даже будет скрипт - запустит 50 запросов и также будет висеть. А вот ТАЙМАУТ выставленный в функции позволит нажать кнопочку ровно через столько секунд, сколько таймаут.

PS: Еще раз - sleep - не выход. В любом языке программирования.

m0Hze 14.11.2009 16:47

Цитата:

Сообщение от Mixon
Пример на твоих соксах....

PHP код:

<?
include "include/winbinder.php";
define("ID_START",    100);


$mainwin wb_create_window(null,AppWindow,'Тест зависания...',WBC_CENTERWBC_CENTER600600,0x000000000);



wb_create_control($mainwinPushButton"СТАРТ!",       2020560520,    ID_START);



wb_set_handler($mainwin"process_main");
wb_main_loop();

function 
process_main($window,$id) {
 switch(
$id) {
  case 
ID_START:
$a sql("http://www.model.poltava.ua");
alert($a);
  break;
  case 
IDCLOSE:
   
wb_destroy_window($window);
  break;
 }
}

 function 
sql($url) {
  
$patern "/^(http:\/\/)?([^\/]+)/i";
  
$source_host preg_match($patern$url$rezz);
  
$host $rezz[2];
  
$url1 "GET $url\n"// Тут GET можно поменять на POST, к примеру
  
$responce "";
  
$timeout 30// На Ваше усмотрение
  
$fsock    fsockopen($host80$errnum,$errstr,$timeout);
  if (
$fsock) {
         
$headers  $url1;
         
$headers .= "Host: $host\n";
         
$headers .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.0.2) Gecko/20060308 Firefox/1.5.0.2\n";
         
$headers .= "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\n";
         
$headers .= "Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3\n";
         
$headers .= "Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7\n";
         
$headers .= "Keep-Alive: 500\n";
         
$headers .= "Connection: close\n";
         
$headers .= "Content-Type: application/x-www-form-urlencoded\r\n\r\n";
         
fwrite   ($fsock,$headers);
         
stream_set_blocking($fsock0);
         
stream_set_timeout($fsock$timeout);
         while    (!
feof($fsock)) $responce .= fread($fsock,4096);
         
fclose   ($fsock);
  }
  return 
$responce;
}

function 
alert($textalert){
wb_message_box($window$textalert"Alert"WBC_INFO);
}

?>

Сайт выбрал который долго грузиться,сам посмотри...Пока сокс не выполниться,тоисть весь скрипт,ты ничего не можешь сделать...так же само если и место
$a = sql("http://www.model.poltava.ua");
вставить sleep(20);
он зависнет,или любую долгую операцию...

Ну извините меня,но зачем для таких простых целейю юзать php? Ведь тоже самое можно с средними знаниями написать на Сях,с многопоточностью(нормальн й!),или даже на дельфях.Но накой член,мучить компьютер бамкомпилами? Извращение,мне своего мнения не изменить :(
Или уж на крайний случай юзайте Perl, там тоже есть консольное окошко,тоже перед однокласниками можно понтонуться крутым софтом :(

Mixon 14.11.2009 16:51

тогда вставь место
$a = sql("http://www.model.poltava.ua");
цыкл долгий,например:
for ($i=$i; $i>-1; $bezk++){
echo $i;
}

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



Цитата:

Сообщение от m0Hze
Ну извините меня,но зачем для таких простых целейю юзать php? Ведь тоже самое можно с средними знаниями написать на Сях,с многопоточностью(нормальн й!),или даже на дельфях.Но накой член,мучить компьютер бамкомпилами? Извращение,мне своего мнения не изменить :(
Или уж на крайний случай юзайте Perl, там тоже есть консольное окошко,тоже перед однокласниками можно понтонуться крутым софтом :(

жжошь:D,мы тут сейчас обговариваем зависание бамкомпиля,а ето самый елементарный пример показать его зависание,а как таково то у меня уже на нём написан спамер на 400 строк кода уже с полностью написаным интерфейсом;) Вот только фигня в том что если етого зависания не избавиться то 3 дня под ряд что я просидел за написанием скрипта етого пойдут в попу,ото где обидно будет,что сидел по 1 пикселю выставлял етот интерфейс только сутки!

Pashkela 14.11.2009 16:57

Если ты не осознал/впитал то, что было писано выше - то да, выхода нет. Или просто недостаточно опыта. CURL тут не поможет. GUI на PHP требует высшей квалификации.

m0Hze 14.11.2009 17:02

Цитата:

Сообщение от Mixon
жжошь:D,мы тут сейчас обговариваем зависание бамкомпиля,а ето самый елементарный пример показать его зависание,а как таково то у меня уже на нём написан спамер на 400 строк кода уже с полностью написаным интерфейсом;) Вот только фигня в том что если етого зависания не избавиться то 3 дня под ряд что я просидел за написанием скрипта етого пойдут в попу,ото где обидно будет,что сидел по 1 пикселю выставлял етот интерфейс только сутки!

Что я могу сказать? Ты дурак. За 2 недели реально понять принцыпы Пер-ла,и писать на нем неплохие скрипты,не мучая людей и форум тупыми вопросами,про эту недоделаную конвертацию пхп в машинный код.Будь умнее,не трать время зря.Хочеш писать актуальный софт - пиши его на C++\C#\java, но никак не на php.Побереги свое время

Mixon 14.11.2009 17:06

не мучая людей и форум тупыми вопросами,если не ошибаюсь то ета тема именно об этой софтине...
а насчёт того что времени и нервов много потратил то ето реально так...не зря d_x мне говорил,не страдай фигней в виде етих бамкомпиль,нет же,не послушал...
Спс всем кароч,погнал просто на php переписывать:)

попугай 22.01.2010 01:01

Хорошая статья.

А формы рисовать для бамкомпилера нужно вручную ? Нет каких либо тулз, как IDE для С++, delphi и прочих ?



Цитата:

Сообщение от Pashkela
curl не пойдет для таких целей - кури неблокируемые сокеты, или задавай конкретные вопросы, что именно не получается с сокетами, тогда будет конкретный ответ (куски кода обязательны, а также подробное описание той задачи, которую надо выполнить, а не общие твои домыслы)

PS: sleep - не выход, выполнение sleep есс-но влияет на работу всего приложения, т.е. если юзать sleep - то, пока пауза, ничего нажать не получиться. Тем более 10 секунд.

Вот функция с неблокируемыми сокетами которая подойдет для парсинга любой URL (кроме https):

PHP код:

function sql($url) {
  
$patern "/^(http:\/\/)?([^\/]+)/i"
  
$source_host preg_match($patern$url$rezz);
  
$host $rezz[2];
  
$url1 "GET $url\n"// Тут GET можно поменять на POST, к примеру
  
$responce ""
  
$timeout 30// На Ваше усмотрение
  
$fsock    fsockopen($host80$errnum,$errstr,$timeout); 
  if (
$fsock) {  
         
$headers  $url1;
         
$headers .= "Host: $host\n"
         
$headers .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.0.2) Gecko/20060308 Firefox/1.5.0.2\n"
         
$headers .= "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\n"
         
$headers .= "Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3\n"
         
$headers .= "Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7\n"
         
$headers .= "Keep-Alive: 500\n"
         
$headers .= "Connection: close\n"
         
$headers .= "Content-Type: application/x-www-form-urlencoded\r\n\r\n"
         
fwrite   ($fsock,$headers); 
         
stream_set_blocking($fsock0);
         
stream_set_timeout($fsock$timeout);  
         while    (!
feof($fsock)) $responce .= fread($fsock,4096);  
         
fclose   ($fsock);
  }
  return 
$responce;       


пример вызова:

PHP код:

$a sql("http://rambler.ru"); 




А зачем кстати нужны эти неблокирующие сокеты? Какие премущества? Я всегда юзал тупо fsockopen, fwrite, while(!feof, fgets - работало. С неблокирующими лучше?

DiffiT 22.01.2010 01:06

у меня такой ламерский вопрос.. нахрена оно вообще надо? :)

попугай 22.01.2010 01:07

Цитата:

Сообщение от m0Hze
Что я могу сказать? Ты дурак. За 2 недели реально понять принцыпы Пер-ла,и писать на нем неплохие скрипты,не мучая людей и форум тупыми вопросами,про эту недоделаную конвертацию пхп в машинный код.Будь умнее,не трать время зря.Хочеш писать актуальный софт - пиши его на C++\C#\java, но никак не на php.Побереги свое время


Вот, как раз интересующая меня тема. Я быдлокодю на php (в основном, парсилки, спамилки и прочее). Думаю, не нужно говорить о недостатках его для таких целей ;) ;)

Много раз подумывал о изучении компилируемых языков, но не хватает времени и мотивации. Расскажи как пересесть с php на с++ или delphi (что лучше из этого для моих целей вышеописанных?) с минимальными "потерями"? Какую среду разработки выбрать? И насчет многопоточности, как она вообще выглядит? После 2 лет кодинга на php мне сложно мысленно представить как это выглядет - это автоматически делается в компиляторах или вручную?

DiffiT 22.01.2010 01:09

Цитата:

Сообщение от попугай
Вот, как раз интересующая меня тема. Я быдлокодю на php (в основном, парсилки, спамилки и прочее). Думаю, не нужно говорить о недостатках его для таких целей ;) ;)

Много раз подумывал о изучении компилируемых языков, но не хватает времени и мотивации. Расскажи как пересесть с php на с++ или delphi (что лучше из этого для моих целей вышеописанных?) с минимальными "потерями"? Какую среду разработки выбрать? И насчет многопоточности, как она вообще выглядит? После 2 лет кодинга на php мне сложно мысленно представить как это выглядет - это автоматически делается в компиляторах или вручную?

пхп - язык СИ-подобный. Если вкратце - убирай доллар от имени переменной, в остальном почти то же самое))))

b3 22.01.2010 01:57

Цитата:

Сообщение от попугай
Вот, как раз интересующая меня тема. Я быдлокодю на php (в основном, парсилки, спамилки и прочее). Думаю, не нужно говорить о недостатках его для таких целей ;)

Каких недостатках =) Это очень интересно, помоему единственный недостаток это нет многопоточности, НО (!!!) есть мультикурл, который дает очень хороший прирост в скорости, а так же греет надежда, что в скором времени будет она, долгожданная многопоточность. В добавок - тише едешь, дальше будешь, это к тому что на личном опыте я заметил что при 5 сессиях на мультикурле парс страници идет превосходно и хороший прирост к скорости, при 20 сессиях уже начинаются пропуски.
Незнаю как в других ЯП с этим.

Fuckel 22.01.2010 02:56

Цитата:

Сообщение от DiffiT
у меня такой ламерский вопрос.. нахрена оно вообще надо? :)

от декомпиля скриптов =))

попугай 22.01.2010 04:11

Цитата:

Сообщение от b3
Каких недостатках =) Это очень интересно, помоему единственный недостаток это нет многопоточности, НО (!!!) есть мультикурл, который дает очень хороший прирост в скорости, а так же греет надежда, что в скором времени будет она, долгожданная многопоточность. В добавок - тише едешь, дальше будешь, это к тому что на личном опыте я заметил что при 5 сессиях на мультикурле парс страници идет превосходно и хороший прирост к скорости, при 20 сессиях уже начинаются пропуски.
Незнаю как в других ЯП с этим.


ну многопоточность, даа..

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

Deathdreams 31.01.2010 02:40

попугай, с асихронными сокетами геморроя меньше.


Время: 16:58