Powtils

Вопросы использования сторонних (не входящих в состав FPC и Lazarus) утилит и библиотек.

Модератор: Модераторы

Powtils

Сообщение Sawer » 21.08.2008 22:16:50

Собственно серьезный вопрос...
Ларс написал, что от него будут только багофиксы, а основные вопросы развития надо направлять в коммьюнити!
http://z505.com/powtils/news.shtml
Форум (да и вообще сайт) http://z505.com не работает, только прямые ссылки на некоторые разделы действуют.

Есть ли на форуме кто пользуется данными расширениями?
Кто что знает про будущее проекта?
Последний раз редактировалось Sawer 09.11.2008 10:15:33, всего редактировалось 2 раз(а).
Sawer
новенький
 
Сообщения: 69
Зарегистрирован: 15.05.2007 22:53:48

Re: Powtils - какое будущее?

Сообщение Brainenjii » 21.08.2008 23:32:09

Я попытался - но так и не получилось >_< Есть ещё что-то у Lazarus'a вроде CGILaz - вроде из той же серии по названию, но тоже не понял где это T_T Буду оч. рад мануалу - как написать hello world в виде CGI для апача ^_^
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Powtils - какое будущее?

Сообщение Sawer » 22.08.2008 00:01:19

Считаю, что это самые удобные юниты для веб-кодинга...
Основная страница с примерами: http://z505.com/cgi-bin/powtils/docs/1.6/idx.cgi?file=otherexamples
Что надо:
1) консольную программу
2) веб-сервер с возможностью запуска этой прогрммы (обычно в папке cgi-bin такое можно)

З.Ы. Если глубже пойдешь изучать, то спрашивай здесь! По возможности помогу!
Sawer
новенький
 
Сообщения: 69
Зарегистрирован: 15.05.2007 22:53:48

Re: Powtils - какое будущее?

Сообщение NTFS » 22.08.2008 10:25:49

Я пользуюсь powutils, только не знал, что они так называются :-) Думал, что это PSP.
Очень удобная библиотека, я даже сделал несколько дополнений - для себя.
NTFS
постоялец
 
Сообщения: 388
Зарегистрирован: 05.11.2007 14:57:50
Откуда: Краснодар

Re: Powtils - какое будущее?

Сообщение Sawer » 22.08.2008 19:02:43

Давайте тогда я переименую тему!

Есть вопрос:
У меня почему то функции SERV.docroot, CgiEnvVar.DocRoot, GetEnvVar('DOCUMENT_ROOT') в Linux (Debian 4.0r0) не возвращают ничего!
Пользуюсь последним релизом 1.7.1. Как можно излечить?
Sawer
новенький
 
Сообщения: 69
Зарегистрирован: 15.05.2007 22:53:48

Re: Powtils - обсуждение

Сообщение Sawer » 09.11.2008 10:14:15

Руководство по использованию Powtils Revision 392 (последняя на 06.11.2008)

Что необходимо для работы с Powtils

1. Скачивать последнюю ревизию с сайта http://powtils.googlecode.com/svn/dev/
2. Заходить на сайт http://z505.com/cgi-bin/powtils/docs/1. ... neralindex, где выложена документация.
3. Читать данное руководство.
4. Спрашивать на форуме freepascal.ru

Исходные данные для начала работ

Выкаченные файлы в кладем папку /home/user/fpc/powtils, прописываем в файле fpc.cfg -Fu/home/user/fpc/powtils/main или в MSEIDE: Project->Options->Make->Directories->/home/user/fpc/powtils/main.

Проверяю работу, на следующей маленькой программе:

Код: Выделить всё
program test;
uses pwinit, pwmain;
begin
  Out('OK!');
end;


Если программа выведет что-нибудь вроде:

Код: Выделить всё
X-Powered-By...
Contert-Ty...

OK!


Тогда все отлично! Идем дальше.

Веб-сервер должен отрабатывать cgi-файлы. Для того, что бы не исполнялось все подряд обычно задаются расширения файлов или часть имени, для которые могут исполняться на сервер (*.cgi, cgi). В особо запущенных случаях можно просто задать все на исполнение. Пример рабочей настройки для веб-сервера

Код: Выделить всё
shttp3 (http://smallsrv.com):
# General setting:
log=/var/log/httpd.log
detail
logday
# radmin

# Direct IPs from that  Web administration will be avilable:
adm_range="127.0.0.1,192.168.0.0-192.168.255.254,10.0.0.0-10.255.255.254"
adm_deny=""

# HTTP server setting:
max=32
port=80
dir="/home/user/www"
def="index.*"

# Other

# Change "none" to your password
user=admin;none;/var/shttps;A


Пример 1. Простой

Код: Выделить всё
program test;
//pwinit и pwmain ОБЯЗАТЕЛЬНЫЕ юниты для работы Powtils!
uses pwinit, pwmain;
begin
  //задаем разработчиков
  SetHeader('X-Powered-By', 'Freepascal Team');
  //задаем тип контента и кодировку (читать маны по веб-серверам и html)
  SetHeader('Content-Type', 'text/html; charset=utf-8');
  //вывод строки без знака CR-LF (т.е аналогично без нажатия Enter)
  Out('Аналог Write');
  //вывод строки со знаком CR-LF (т.е аналогично с нажатием Enter)
  Outln('Аналог Writeln');
end.


Пример 2. Использование шаблонов

Создадим html-шаблон index.tpl:
Код: Выделить всё
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>{$title}</title>
</head>
<body>

  <!-- BEGIN BODY -->
  <h2>Статья о фсягкой фигне</h2>
  <div align="center">
    {$text}
  </div>
  <!-- END BODY -->

  <!-- BEGIN FOOT -->
  <div align="center">
    {$ps}
  </div>
  <!-- END FOOT -->

</body>
</html>


Наш cgi-файл index.cgi:
Код: Выделить всё
program index;
//pwinit и pwmain ОБЯЗАТЕЛЬНЫЕ юниты для работы Powtils!
uses pwinit, pwmain;
begin
  //задаем разработчиков
  SetHeader('X-Powered-By', CRACKO_WAREZ Team');
  //задаем тип контента и кодировку (читать маны по веб-серверам и html)
  SetHeader('Content-Type', 'text/html; charset=utf-8');
  //устновка значений переменных в шаблоне index.tpl
  SetVar('title', 'Это наш заголовок!!!','');
  SetVar('text', 'Тут должно быть бла-бла-бла','');
  SetVar('ps', 'Типа постскриптум','');
  //используем "TemplateRaw" чтобы никаких фильтрайий нашего кода небыло
  //2-й вариант - "Template('ФАЙЛ-ШАБЛОН', УРОВЕНЬ ФИЛЬТРАЦИИ)", но тут надо эксперементировать
  TemplateRaw('index.tpl');
end.


Пример 3. Получение данных из формы, отправленной веб-пользователем

В текущей версии разницы нет, какой тип отправки на сервер используется (GET или POST), в любом случае команда изъятия данный одна.

Создадим html-форму form.html:

Код: Выделить всё
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>{$title}</title>
</head>
<body>

  <!-- BEGIN BODY -->
  <h2>Заполните эту гребанную форму отправьте нам!!!</h2>
  <table border="1" align="center">
  <form action="form.cgi" method="post" type="multipart/form-data">
    <tr>
      <td style="width: 150px;">Параметр</td>
      <td style="width: 130px;">Значение</td>
    </tr>
    <tr>
      <td>Ты хто?</td>
      <td><input type="text" name="param1" size="20"></td>
    </tr>
    <tr>
      <td>Пиши есчо!</td>
      <td><input type="text" name="param2" size="20"></td>
    </tr>
    <tr>
      <td colspan=2 style="text-align: right;"><input type="submit" name="action" value="Send"></td>
    </tr>
  </form>
  </table>
  <!-- END BODY -->

</body>
</html>


Наш cgi-файл form.cgi:
Код: Выделить всё
program form;
//pwinit и pwmain ОБЯЗАТЕЛЬНЫЕ юниты для работы Powtils!
uses pwinit, pwmain, classes;
var StrLst: TStringList;
begin
  StrLst := TStringList.Create;
  //берем значение и добавляе в StringList
  StrLst.Add(GetPostVar_S('param1',0));
  //берем значение и добавляе в StringList
  StrLst.Add(GetPostVar_S('param1',0));
  //теперь весь вывод с формы в файле form_out.txt
  StrLst.SaveToFile('form_out.txt');
end.


Метод отправления данных можно комбинировать.
Типичный пример прописывания разных форм:
...action="form.cgi?cgi_form=first"...
...action="form.cgi?cgi_form=second"...
т.е. на 1-странице можно задавать множество форм в одиноковыми именами параметров, а считывание данных обрабатывать так:
Код: Выделить всё
if GetPostVar_S('сgi_form',0) = 'first' then Procedure1;
if GetPostVar_S('сgi_form',0) = 'second'...


Пример 4. Загрузка файлов на сервер
Код: Выделить всё
program update;
//mode delphi - ОБЯЗАТЕЛЬНО!!!
{$mode delphi}{$H+}

uses unix, pwinit, pwmain, compactsysutils, pwenvvar;

const FUPL = 'fupl';

procedure ShowForm;
begin
  Outln('<b>Обновление программы</b>');
  Outln('<form method=post action="" enctype="multipart/form-data">');
  Outln('<input name="'+FUPL+'" type=file size=20>');
  Outln('<input type=submit value="Обновить">');
  Outln('</form>');
end;

procedure ProcessUpfile;
var AbsoluteFname: string;
begin
  AbsoluteFname := '/home/m230/m230n';
  Out('Обновление...');
  SaveUpFile(FUPL, AbsoluteFname);
  if SaveUpFile(FUPL, AbsoluteFname) then
  begin
    Out('Обновление проведено успешно!');
  end
  else Out('Ошибка при обновлении!');
end;

begin
  SetHeader('X-Powered-By', 'Freepascal Team');
  SetHeader('Content-Type', 'text/html; charset=utf-8');
  if IsUpFile(FUPL) then ProcessUpFile else ShowForm;
end.
Sawer
новенький
 
Сообщения: 69
Зарегистрирован: 15.05.2007 22:53:48

Re: Powtils

Сообщение Slavikk » 10.11.2008 10:35:10

Спасибо, довольно интересно.
Аватара пользователя
Slavikk
постоялец
 
Сообщения: 208
Зарегистрирован: 15.01.2007 22:34:52
Откуда: Из лесов...

Re: Powtils

Сообщение Odyssey » 10.11.2008 12:13:45

Присоединяюсь, спасибо Sawer.
Кстати, есть ли сейчас у powtils постоянное коммьюнити, куда можно отправлять багофиксы и узнавать об изменениях? Может быть список рассылки или ньюсгруп? А то проект кажется замороженным, а ведь крайне нужная штука.
Odyssey
энтузиаст
 
Сообщения: 580
Зарегистрирован: 29.11.2007 17:32:24

Re: Powtils

Сообщение perlpunk » 10.11.2008 14:34:30

а эта штука работает с fast-cgi ?
perlpunk
новенький
 
Сообщения: 90
Зарегистрирован: 26.09.2008 21:19:48

Re: Powtils

Сообщение Odyssey » 12.11.2008 10:44:31

perlpunk
Насколько я знаю, нет.
Odyssey
энтузиаст
 
Сообщения: 580
Зарегистрирован: 29.11.2007 17:32:24

Re: Powtils

Сообщение Slavikk » 12.11.2008 11:30:16

Насколько я помню fast-cgi сидит в памяти, все наиболее часто запускаемые скрипты закачивает и хранит в памяти и там был трабл с переменными окружения что он их не до конца очищал - что не есть гут и может привести к атаке переполнения буфера. Там можно поколдовать и попробовать все CGI хранить в памяти с помощью memcached, тем самым сократив обращения к HDD (я для этого и ставил например PHP через fast-cgi).

У меня вопрос: Powtils может работать с *.dll, кто нибудь разбирался что с помощью этого можно делать и каков результат?
Аватара пользователя
Slavikk
постоялец
 
Сообщения: 208
Зарегистрирован: 15.01.2007 22:34:52
Откуда: Из лесов...

Re: Powtils

Сообщение Odyssey » 12.11.2008 13:30:52

Slavikk писал(а):Насколько я помню fast-cgi сидит в памяти, все наиболее часто запускаемые скрипты закачивает и хранит в памяти...

FastCGI ничего не закачивает и не кеширует. Все FastCGI скрипты просто запускаются и остаются висеть в памяти, а обмен данными с ними происходит через сокеты, а не через stdin/stdout как в обычном CGI.

Slavikk писал(а):У меня вопрос: Powtils может работать с *.dll, кто нибудь разбирался что с помощью этого можно делать и каков результат?

Если имеется ввиду версия Powtils в виде динамической библиотеки, то она используется чтобы
+ сократить расход памяти на сильнозагруженных серверах
+ ускорить компиляцию приложений и уменьшить размер бинарника
Из минусов:
- усложняется отладка
- может возникнуть путаница версий

Подробнее можно почитать тут:
http://z505.com/cgi-bin/powtils/docs/1. ... ynvsstatic
Odyssey
энтузиаст
 
Сообщения: 580
Зарегистрирован: 29.11.2007 17:32:24

Re: Powtils

Сообщение Slavikk » 12.11.2008 14:43:58

>Все FastCGI скрипты просто запускаются и остаются висеть в памяти.

Может быть, может быть... Я подробно не разбирался, но в той документации, что я читал, говорилось что FastCGI выделяет в памяти область в которой запускается скрипт, при обращении к скрипту FastCGI копирует область памяти со скриптом и этому скопированному скрипту скармливает наш заброс. Положительный эффект в том что ненужно дёргать HDD и ждать от него ответа и загрузки скрипта, скрипт уже в памяти. Спорный плюс - для скрипта уже готово окружение с которым он будет работать, но повторюсь былы траблы с этим окружением если вы сильно плотно работаете с его переменными. Спорный плюс - вы экономите один форк на запуск приложения, это плюс, но форк по сравнению со временем загрузки скрипта с hdd - это ничто.

В общем я в FastCGI вижу плюс в основном только в том что все скрипты работают из памяти, без загрузки с hdd.
Аватара пользователя
Slavikk
постоялец
 
Сообщения: 208
Зарегистрирован: 15.01.2007 22:34:52
Откуда: Из лесов...

Re: Powtils

Сообщение L505 » 01.12.2008 07:02:02

Hello, Powtils in 2008 is simply "in pause" or "slower" than usual 2004-2007 development.

This is due to Lars (me) currently developing an important invention in 2008 (mechanical, not too software related) based on gravity. I unfortunately must spend all my time on this invention as it will change the world. I have not announced it.

I am also disappointed with the quality of FPC compiler and got sick of chasing down all the bugs - more time was always spent chasing down compiler bugs than ever developing Powtils itself. But then again I have always felt that way since 2004, so nothing is new.

FastCGI was something planned for the future. There are lots of problems and issues with it to work out.
L505
незнакомец
 
Сообщения: 2
Зарегистрирован: 28.09.2007 09:03:29

Re: Powtils

Сообщение Sawer » 01.12.2008 15:11:00

it's a fully shit!
Sawer
новенький
 
Сообщения: 69
Зарегистрирован: 15.05.2007 22:53:48

След.

Вернуться в Сторонние средства

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

Рейтинг@Mail.ru