скучаете на зимних каникулах?

tony2001

TeaM PHPClub
скучаете на зимних каникулах?

Код:
Date: Thu, 27 Dec 2007 10:19:20 -0800
From: Rasmus Lerdorf <[email protected]>
Subject: [PECL-DEV] libupnp extension?

If anybody is looking for a small project, how about wrapping libupnp?
[url]http://pupnp.sourceforge.net/[/url]

It's a small and seemingly well-documented library.  BSD-licensed and
actively developed, so a perfect candidate for a PHP extension.

It would make building web UIs for various media devices much easier.

-Rasmus
Если кому-то хочется заняться интересным проектом на зимних каникулах, то это отличный вариант - написать полезный экстеншен, познакомиться с коммьюнити и разобраться во внутренностях PHP одновременно.
Я со своей стороны обещаю помочь советами и не только.
 

ran

Новичок
мне интересно разобраться во внутренностях PHP. Если путь лежит через написание экстеншена, то я готов, но не знаю с чего начать и где почитать про это
 

tony2001

TeaM PHPClub
качай библиотеку по ссылке выше, собирай и ставь её, например, в /tmp/upnp.
бери исходники PHP, распаковывай.

открывай http://talks.php.net/show/vancouver-ext/2 и выполняй ext_skel, как там написано (--extname=upnp, конечно).
 

Alexandre

PHPПенсионер
скучаете на зимних каникулах?
ничуть ;)
с удовольствием присоединюсь, но чуть позже. В настоящее время заканчиваю один "полезный" экстеншен... думаю, после каникул выложить исходники. Не хотелось бы бросать дело наполпути ...

тема интересная, обязательно посмотрю,
возможно и помогу :)
 

Develar

Новичок
А фраза "написать полезный экстеншен, познакомиться с коммьюнити и разобраться во внутренностях PHP одновременно" относится к кому? — уже знающим язык C программистам, или к тем, кто знает другие языки (PHP и AS3 в моем случае)? То есть хватит ли книги "Ритчи Д., Керниган Б. Язык программирования Си" и литературы по написанию расширений для PHP для реализации поддержки протокола AMF (http://download.macromedia.com/pub/labs/amf/amf3_spec_121207.pdf) в PHP?
 

Pigmeich

Новичок
Develar
Так как суть wrapper - думаю хватит.

Тем более Кернигана и Ритчи
 

Alexandre

PHPПенсионер
То есть хватит ли книги "Ритчи Д., Керниган Б. Язык программирования Си" и литературы по написанию расширений для PHP для реализации поддержки протокола AMF (http://download.macromedia.com/pub/...spec_121207.pdf) в PHP?
в принципе да...
когда я писал свой первый экстеншен., то книги Джехани "Программирование на Си" и инфы с php.net вполне хватило ;)
дело в желании.
 

tony2001

TeaM PHPClub
> А фраза "написать полезный экстеншен, познакомиться с коммьюнити и
> разобраться во внутренностях PHP одновременно" относится к кому? — уже
> знающим язык C программистам, или к тем, кто знает другие языки (PHP и AS3 в
> моем случае)?

основы C, конечно, надо знать.

>То есть хватит ли книги "Ритчи Д., Керниган Б. Язык программирования Си" и
>литературы по написанию расширений для PHP для реализации поддержки
>протокола AMF (http://download.macromedia.com/pub/...spec_121207.pdf) в PHP?

надо только начать и иметь желание закончить, это всё, что реально требуется.
а так - ничего невозможного нет.

-~{}~ 29.12.07 12:47:

Кстати:
http://pecl.php.net/package/amfext
 

Develar

Новичок
tony2001
Спасибо, книгу по С уже купил, желание есть, тем более, если что, есть у кого спросить ;)

>> http://pecl.php.net/package/amfext
Оно только для Hello world. критическая ошибка http://pecl.php.net/bugs/bug.php?id=12668 + поверхностный reverse engineering (то есть не используются те возможности AMF, использование которых могло бы значительно сократить размер сообщения). Тем более, что amfext это только десериализация/сериализация, а не поддержка Flex Data Services.
 

tony2001

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

-~{}~ 01.01.08 21:14:

продолжать готовы?
 

Develar

Новичок
>> продолжать готовы?
если это мне, то да, но после окончания другого opensource проекта и по работе еще один, где-то через месяц.
 

tony2001

TeaM PHPClub
гут.
дальше надо отредактировать config.m4, убрать PHP_ARG_ENABLE и раскомментить часть с поиском хидеров и проверкой библиотеки.

работающий пример:
http://cvs.php.net/viewvc.cgi/pecl/tdb/config.m4?revision=1.2&view=markup

см. еще http://talks.php.net/show/vancouver-ext/3

после этого `./buildconf --force` в корне исходников и у ./configure появится новая опция --with-upnp, после чего можно будет собрать экстеншен.
 

ran

Новичок
устанавливал upnp так
./configure --prefix=/tmp/upnp
make
make install

после выполнил все, как описано выше
когда для php выполнял ./configure в самом конце получал сообщение:
checking for upnp files in default path... not found
configure: error: Please reinstall the upnp distribution

решил проверить ./configure --help и там не оказалось опции with-upnp

как я понял, опция появляется в результате выполнение ./buildconf --force, но выполнив еще раз получил такой результат
Forcing buildconf
using default Zend directory
buildconf: checking installation...
buildconf: autoconf version 2.61 (ok)
buildconf: Your version of autoconf likely contains buggy cache code.
Running cvsclean for you.
To avoid this, install autoconf-2.13.
rebuilding configure
aclocal.m4:2090: PHP_PROG_LEX is expanded from...

подскажите. пожалуйста, в сторону чего смотреть?

P.S. Установлен openSuse10.3 и с самим процессом компиляции исходних по *nix сталкиваюсь впервые, до этого только под виндовсом работал, поэтому много времени трачу на, казалось бы, элементарные вещи :(
 

tony2001

TeaM PHPClub
./configure --help | grep pnp ?

что в config.m4 ?
да, нужно `./buildconf --force` и все мессаджи там правильные, опция должна появиться.
 

ran

Новичок
Автор оригинала: tony2001
./configure --help | grep pnp ?

что в config.m4 ?
да, нужно `./buildconf --force` и все мессаджи там правильные, опция должна появиться.
>./configure --help | grep pnp ?
пусто

>что в config.m4 ?
Код:
if test "$PHP_UPNP" != "no"; then
  SEARCH_PATH="/tmp/upnp"     
  SEARCH_FOR="/include/upnp/upnp.h"  
  if test -r $PHP_UPNP/$SEARCH_FOR; then # path given as parameter
    UPNP_DIR=$PHP_UPNP
  else # search default path list
    AC_MSG_CHECKING([for upnp files in default path])
    for i in $SEARCH_PATH ; do
      if test -r $i/$SEARCH_FOR; then
        UPNP_DIR=$i
        AC_MSG_RESULT(found in $i)
      fi
    done
  fi
  if test -z "$UPNP_DIR"; then
    AC_MSG_RESULT([not found])
    AC_MSG_ERROR([Please reinstall the upnp distribution])
  fi

  dnl # --with-upnp -> add include path
  PHP_ADD_INCLUDE($UPNP_DIR/include)

  dnl # --with-upnp -> check for lib and symbol presence
  LIBNAME=upnp # you may want to change this
  LIBSYMBOL=upnp # you most likely want to change this 

  PHP_CHECK_LIBRARY($LIBNAME,$LIBSYMBOL,
  [
    PHP_ADD_LIBRARY_WITH_PATH($LIBNAME, $UPNP_DIR/lib, UPNP_SHARED_LIBADD)
    AC_DEFINE(HAVE_UPNPLIB,1,[ ])
  ],[
    AC_MSG_ERROR([wrong upnp lib version or lib not found])
  ],[
    -L$UPNP_DIR/lib -lm -ldl
  ])
  PHP_SUBST(UPNP_SHARED_LIBADD)

  PHP_NEW_EXTENSION(upnp, upnp.c, $ext_shared)
fi
 

Ирокез

бессмертный пони
Команда форума
Партнер клуба
Вопрос, чисто риторический. Все ли компилируют под линуксом, как и где отлаживать экстеншен.
 

tony2001

TeaM PHPClub
никогда не собирал под win32, поэтому ничем не смогу помочь с ним.
под *nix - gdb для отладки приложения, valgrind для отладки памяти.
 
Сверху