Posts tagged ‘pecl’

Narazie prace nad moim rozszerzeniem stanęły w miejscu, ale poszukując informacji nt. budowy takowego znalazłem pare ciekawych artykułów i wszystkie oscylują wokół wykonywania php i przetwarzania kodu na wewnętrzną reprezentację Zend engine, czli opcode’y (nie wiem jaki jest odpowiednik po polsku), oto one.

Na początek wspominana już wcześniej przeze mnie Sarah Golemon i jej wprowadzenie do opcodeów nowy link. Później  Terry Chay (chyba, wniskuję z nazwy domeny) opisuje swoją batalię z Zend enginem. Następnie lista opcodeów lokalnie zapisana z opisem i wytłumaczeniem. I ostatni z nich, czyli jak są Zend engine przetwarza tablice.

A wszystko zaczęło sie od tego, że zacząłem sie zastanawiać jakby tu udoskonalić jakiś system szablonów np. Smarty. Pierwszy strzał padł na rozszerzenie języka, dystrybuowane jako pliki źródłowe, kompilowane dynamicznie (jako .so), ale teraz myślę, że chyba lepiej by było rozszerzyć sam Zend engine o mapowanie kodów danego języka szablonów, bezpośrednio na opcode’y, ale do tego to jeszcze długa droga.

Są jeszcze 2 rzeczy, które planuje wykorzystać jako drogowskazy. Są to gotowe rozszerzenia php, dostępne przez system instalacji PECL. Jedno z nich to opcode cache, które ma zapewniać, ponowne wykorzystywanie opcodeów, tak żeby nie była potrzebna ich kompilacja – czyli autorzy też musieli się dość mocno wgryźć w sam Zend engine i na to właśnie liczę:)

Druga to już chyba nieco prostsza sprawa: pecl_http , które ma chować cała magię związaną z wysyłaniem i odbieraniem żądania HTTP, a że przeglądałem podobne rozwiązania zarówno w Apache Httpd (ma całkiem miły framework w C do budowania rozszerzeń i filtrów), HttpServletRequest w Javie (specyfikacja Servlet 2.4), kończąc na mojej implementacji (na potrzeby Fligg’a) to doszedłem do wniosku, że pomimo różnic między wszystkimi prezentowanymi rozwiązaniami, łatwiej mi się będzie przegryzać przez rozszerzenie pecl’owe.

No nic zobaczymy jak z czasem będzie, może pecl_smarty kiedyś ujrzy światło dzienne.

Zapowiadało się łatwo, prosto i przyjemnie:

sudo pecl install PDO_OCI

PDO już jest więc powinno pójść jak z płatka, ale niestety…

marek2@marek-laptop:/tmp/pear/temp$ sudo pecl install PDO_OCI
pear/PDO_OCI requires PHP extension „pdo” (version >= 1.0)
No valid packages found
install failed

Chwila guglania i jedyna rozsądna rada to zainstalować sobie PDO_OCI samemu, bo wtedy ponoć instaluje sie bez problemów, no więc jedziemy:

sudo pecl download PDO_OCI

sudo tar xzf PDO_OCI*.tgz

cd PDO_OCI*

sudo phpize

sudo ./configure

tutaj może się pojawić krótkie zająknięcie nt. braku ORACLE_HOME pomimo tego, że jest jak byk, no ale to da sie szybko załatwić:

sudo ./configure –with-pdo-oci=$ORACLE_HOME

make

sudo cp modules/pdo_oci.so /usr/lib/php5/20060613+lfs/

marek2@marek-laptop:/tmp/pear/temp/PDO_OCI-1.0$ php -m | grep -i pdo
PDO
pdo_mysql
PDO_OCI
pdo_pgsql

I voila 🙂

Garść informacji dostępna także na blogu Diablo.