Zenedith's dev blog

Dałem się namówić.., szatanowi chyba..

Serwer web w virtualbox

Chcemy postawić serwer web na wirtualce, np. korzystając z virtualbox.
Instalacja wybranego systemu w virtualbox nie wymaga opisu, natomiast sam proces „dostania” się do takiej maszyny może być już bardziej skomplikowany.

Mamy dwie opcje:

  1. w ustawieniach karty sieciowej mamy: NAT
  2. lub mostkowa karta sieciowa (bridged)

Czytaj dalej

Reklamy

21 Listopad, 2010 Posted by | web | | Dodaj komentarz

MacOSX: Przygotowanie stanowiska pracy

Wprowadzenie

Od jakiegoś czasu jestem użytkownikiem MacBook Pro z systemem Snow Leopard.
W tym wpisie postaram się przedstawić parę rozwiązań podstawowych problemów z svn, apache i php.

Co to jest macports?

Przede wszystkim niezbędnym narzędziem jest macports.org.
Jest to zbiór bibliotek i aplikacji przeniesionych ze „świata linux” w ten sposób, żeby działały natywnie na MacOSX. Dla użytkowników linuxa, którzy przesiadają się na MacOSX jest to wręcz niezbędne narzędzie.

Zasada działania macport jest następująca:

  • instalujemy najnowszą paczkę macports w wersji dla konkretnej wersji systemu,
  • korzystając z poleceń port search/install/list wyszukujemy i instalujemy szukane oprogramowanie (lista portów dostępna jest na tej stronie )

Domyślnie wszystko instaluje się w katalogu /opt ale można to zmienić. Tak naprawdę to możemy mieć parę wersji macport zainstalowanych ale o tym być może innym razem.

Przejdźmy do sedna: do czego tak naprawdę jest to nam tak bardzo niezbędne?

Najprostsza odpowiedź jest taka, że uzyskujemy dostęp do „aktualnych” wersji aplikacji.

Przykłady:

  1. svn – standardowo dostępna jest starsza wersja svn,
  2. php5 – dostarczone w wersji 5.3.0 (co i tak uważam za sukces) ale dlaczego nie mielibyśmy wykorzystywać wersji 5.3.2 i nowszych?
  3. apache – dostępny w wersji 2.2.12 gdy aktualnie dostępna jest wersja 2.2.15.

Oczywiście Apple dba o update aplikacji w mniejszym lub większym stopniu, ale dlaczego nie mamy mieć prostej możliwości samemu decydować o tym co chcemy? (filozofia *unix się kłania).

Zainstalujemy więc wypisane wyżej aplikacje korzystając z macport.

Instalacja pakietow z macports

Wszystkie polecenia korzystające z macports zaczynają się od:

sudo port

Jak wskazuje sudo, potrzebne są uprawnienia root.

  • pobranie listy wszystkich dostępnych portów: sudo port list
  • wyszukanie portu po nazwie (częściowej): sudo port search nazwa_portu
  • instalacja konkretnego portu: sudo port install nazwa_portu
  • informacja o wariantach, w których może być zainstalowany port: sudo port variants nazwa_portu
  • aktualizacja (synchronizacja) listy portów: sudo port selfupdate (dodatkowowo parametr -v pokaże szczegółowe informacje)
  • update zainstalowanych portów do najnowszych dostępnych wersji: sudo port upgrade outdated (jeśli chcemy zobaczyć jakie porty pojawiły się w nowszych wersjach wpisujemy sudo port outdated)
  • usuwanie zainstalowanych portów: sudo port uninstall nazwa_portu
  • wyczyszczenie cache’u po odinstalowanych portach: sudo port clean uninstalled
  • aktywowanie/dezaktywowanie portów: sudo port active (deactive) nazwa_portu
  • lista zainstalowanych portów: sudo port installed

Przykładowo, chcemy zainstalować najnowszą wersję svn.

W tym celu wpisujemy:

sudo port install subversion +tools

Jak można zauważyć, pojawia się tutaj dodatkowa zmienna sterująca „+tools„. W ten sposób oznaczane są warianty czyli „variants”, w których dany pakiet może zostać zainstalowany. W tym przypadku możemy zobaczyć czym jest variant „+tools” na stronie opisu danego portu. Polecenie, które podaje dostępne warianty zostało wymienione wyżej ale powtórzę je jeszcze raz:

sudo port variants nazwa_portu.

Warianty to bardzo dobre rozwiązanie na instalowanie konkretnych funkcjonalności danego pakietu lub usuwanie funkcjonalności, które nie będą nam potrzebne. Dla przykładu, instalując port apache2, domyślnie zawiera on dołączone następujące warianty: „+darwin+preforkmpm„. Jeśli nie chcemy instalować funkcjonalności związanych z preforkmpm, to przy instalacji tego port’u napisalibyśmy:

sudo port install apache2 -preforkmpm

a chcąc np. dodac funkcjonalność openldap (którą wyczytaliśmy z opisu zwróconego przez polecenie sudo port variants apache2), powstałoby polecenie:

sudo port install apache2 -preforkmpm +openldap

W ten sposób w prosty sposób dobierzemy odpowiednie funkcjonalności względem naszych potrzeb.

Zainstalujmy w końcu svn, czyli port o nazwie subversion z dodatkowymi narzędziami:

sudo port install subversion +tools

Ponieważ nie mam jeszcze żadnego portu zainstalowanego, instalacja tego portu może wymagać instalacji portów, od których działanie portu subversion jest konieczne. Wszystko dzieje się automatycznie i nie jest konieczna nasza ingerencja (lecz nie zawsze o czym może jeszcze napiszę).

Ponieważ port subversion nie jest szczególnie rozbudowanym, jego instalacja może potrwać około 15 minut, gdzie większość tego czasu instalowane będą port zależne (wymagane nie tylko dla tego portu).

Pliki zostaną zapisane w katalogu, który podaliśmy przy instalacji macports i domyślnie jest to katalog /opt/local/bin). Żeby nasza nowa wersja svn była widoczna w systemie, musi się ona znaleźć w ścieżce przeszukiwania PATH wcześniej, niż katalog systemu zawierający svn. W tym celu można zmodyfikować zawartość zmiennej PATH ustawianej przy logowaniu użytkownika w pliku ~/.profile (plik .profile w katalogu domowym użytkownika). Należy tam dopisać (jeśli nie zrobił tego macports):

export PATH=/opt/local/bin:/opt/local/sbin:$PATH

Jeśli okazałoby się, że nadal nie jest wywoływana nasza wersja svn, należy skopiować stare pliki svn i napisać je nowymi, wydając polecenia:

sudo mv /usr/bin/svn* /usr/bin/old_svn

sudo ln -s /opt/local/bin/svn* /usr/bin

PHP5

Instalacja PHP5 będzie równie prosta dzięki macports. Dodatkowo, bez żadnych problemów doinstalujemy rozszerzenia, których potrzebujemy.
Na początek warto spojrzeć jakie warianty oferuje port php5:

sudo port variants php5

Od razu można pominąć wszystkie te, które zawierają w opisie słówko „Obsolete„, ponieważ są to pozostałości po starym systemie kompilacji php5.
Dla podglądu, podam tutaj listę możliwych wariantów:

  • apache: Add Apache 1 web server module
    * conflicts with apache2 no_web
  • [+]apache2: Add Apache 2.2 web server module
    * conflicts with apache no_web
  • debug: Enable debug support (useful to analyze a PHP-related core dump)
  • fastcgi: Add FastCGI web server binary
    * conflicts with no_web
  • ipc: Add semaphore, shared memory and IPC functions
  • no_web: Don’t include any web server support
    * conflicts with apache apache2 fastcgi
  • pear: Add PEAR
  • suhosin: Add Suhosin patch

Jak pokazuje [+] przy apache2, instalując php5 z domyślnymi wariantami, zostanie zainstalowany także serwer apache2. Jeśli nie chcemy tego robić, możemy przy instalacji portu dodać -apache2 (oraz ewentualnie no_web). Wiąże się z tym jednak jeden problem, ponieważ przy kompilowaniu php5 bez apache2, nie zostanie utworzona biblioteka libphp5.so.

Polecam zainstalować port php5 z następującymi parametrami:

sudo port install php5 +pear +suhosin

php extensions

Po zainstalowaniu tego portu, które może potrwać około 30 minut (dużo zależności), warto doinstalować rozszerzenia, z których w php5 korzystamy.

Na mojej liście znalazły się następujące rozszerzenia:

  • php5-apc
  • php5-curl
  • php5-gd
  • php5-iconv
  • php5-mbstring
  • php5-mcrypt
  • php5-mysql
  • php5-openssl
  • php5-soap
  • php5-sockets

Można je zainstalować wszystkie na raz przez polecenie:

sudo port install php5-apc php5-curl php5-gd php5-iconv php5-mbstring php5-mcrypt php5-mysql php5-openssl php5-soap php5-sockets

xdebug

Niezbędne będzie nam jeszcze rozszerzenie xdebug i można je zainstalować jako port php5-xdebug, lecz ja pokusiłem się o instalację najnowszej wersji dostępnej na stronie xdebug.org/download.php.

Ściągamy wersje z svn i postępujemy zgodnie z plikiem README.
Jeśli instalowaliśmy xdebug ręcznie, będziemy musieli dokonać modyfikacji pliku php.ini.

php.ini

Ponieważ po instalacji portu php5, zostały utworzone dwa pliki w katalogu /opt/local/etc/php5, musimy jeden z nich skopiować w tym samym katalogu jako php.ini, np. tak:

sudo cp php.ini-development php.ini

Możemy teraz wprowadzić zmiany jeśli ustawienia domyślne nam nie odpowiadają.

Jeśli kompilowaliśmy xdebug sami, należy dopisać w pliku następujące linie:

[xdebug]
zend_extension=/path/to/xdebug.so

gdzie oczywiście /path/to/xdebug.so podmieniamy na konkretną ścieżkę do xdebug.so.

Jeśli chodzi o sam xdebug, można go trochę bardziej spersonalizować.

Mój konfig wygląda następująco:

[xdebug]
zend_extension=/path/to/xdebug.so
xdebug.file_link_format = „txmt://open?url=file://%f&line=%l”
xdebug.var_display_max_data = 8000
xdebug.var_display_max_children = 256
xdebug.var_display_max_depth = 10
xdebug.collect_params = 4

Apache2

Konfiguracja apache2 który dostarczony jest z MacOSX sprowadza się do zmiany w pliku /private/etc/apache2/httpd.conf linii zawierającej:

LoadModule php5_module

Wystarczy zamienić tą linię na następującą:

LoadModule php5_module /opt/local/apache2/modules/libphp5.so

Jeśli chcemy wykorzystywać apache2 zainstalowanego z port, musimy załadować jego autostart w systemie:

sudo launchctl load -w /Library/LaunchDaemons/org.macports.apache2.plist

oraz dokonać podobnej konfiguracji w pliku konfiguracyjnym /opt/local/apache2/conf/httpd.conf.

Ponieważ apache2 nie zmienia się istotnie z wersji na wersję (nie dla użytku dev), ja pozostałem przy wersji dostarczonej z MacOSX.

Zarządzanie apache2 sprowadza się do znajomości poleceń:

sudo httpd -k start
sudo httpd -k stop
sudo httpd -k restart

Możemy też dodać go do autostartu w panelu ustawień systemowych/udostępniania i wybrać udostępnianie www.

Powinniśmy teraz sprawdzić konfigurację php5 (oraz xdebug) i apache2 przez phpinfo() i pogratulować sobie efektu;)

2 Kwiecień, 2010 Posted by | macos, web | , | 5 Komentarzy

Allegro web api

Ostatnio miałem okazję zapoznać się z web api Allegro web api Allegro.
Wiele nieciekawych opinii na jego temat napisano (główne wady to brak konkretnej dokumentacji oraz przyjęte nazewnictwo pól w postaci „troche-to-dziwne”).
Żeby sobie trochę pomóc, skorzystałem z wsdl2php: repo dostępne pod adresem:
https://wsdl2php.svn.sourceforge.net/svnroot/wsdl2php
Dodatkowo zmodyfikowałem ten generator tak, żeby wygenerowane api było „poprawne”, czyli zmapowałem wszystkie wystąpienia ‚-‚ na ‚_’, przez co zmienne są dostępne w normalny sposób.
Miałem również problem z oryginalnym plikiem wsdl udostępnionym na stronie Allegro, dlatego w projekcie dołączony jest poprawny plik, który udało się załadować do SoapClient.
Być może mój problem wynika z używania systemy Mac OSX.

Aplikacja powstała w Eclipse.
Do jej wykonania posłużył Zend framework oraz 2 klasy z rozwijanego przeze mnie frameworka. Użyty został jquery oraz jquery ui, do prezentacji prostego interfejsu oraz ajax’u,

Aplikacja oferuje następujące możliwości:
– zalogowanie do allegro (konieczne do wykonania czegokolwiek),
– wyszukiwanie proste i zaawansowane (ajax),
– prezentacji listy wyszukanych produktów oraz szczegółów wybranego produktu (aukcji).

Jedyne co należy zrobić, to uzupełnić uzyskane od Allegro api key w pliku:
application/configs/allegro.ini

Aplikacja ma charakter wyłącznie edukacyjny.

Do pobrania tutaj (należy usnąć rozszerzenie pptx i pozostawić .zip).

UPDATE

Pojawiła się  nowa strona na temat web api Allegro, która nareszcie zaczyna przypominać konkretną dokumentację. Po więcej szczegółów odsyłam na stronę http://allegro.pl/webapi/

30 Marzec, 2010 Posted by | web | , | Dodaj komentarz

Generowanie klasy Zend_Db_Table_Abstract z uzyciem Propel’a.

Zend Framework jest naprawdę fajną biblioteką do tworzenia w technologii PHP.
Tematem tego wpisu będzie sposób na wygenerowanie klasy dziedziczącej po Zend_Db_Table_Abstract
na podstawie schematu xml dla generatora Propel.

Zainspirował mnie do tego wpis ze strony bloga amnuts’a.

Przed przystąpieniem do pracy, wypadałoby zainstalować ten pakiet oraz dodatkowe wymagane – jest to opisane dokładnie tutaj.

Propel to ORM dla PHP, jeden z dwóch najbardziej rozpoznawalnych z Doctrine.
Do wygenerowania użyję Propela z tej prostej przyczyny, że miałem z nim już do czynienia oraz jego „obsługa” jest banalnie prosta.

Dlaczego wogóle używać Propela żeby wygenerować klasę Zend_Db_Table_Abstract skoro Propel załatwia i tak wszystko za nas bez żadnej ingerencji (dostajemy gotowe klasy z mapowaniem do tabel)?

M.in. dlatego, żeby nie dokładać kolejnych zależności do projektu, szczególnie gdy w jego skład wchodzi już bogata biblioteka Zend.

Czytaj dalej

30 Czerwiec, 2009 Posted by | scripts, web | , , | Dodaj komentarz

Gettext – tłumaczenia językowe w php5 dla Debiana i Windows.

Gettext to potężne i wydajne narzędzie do tworzenia wielojęzycznych (internacjonalizacji) tłumaczeń. Nie dotyczy to tylko aplikacji www tworzonych w php, lecz przede wszystkim aplikacji systemowych, czego przykładem jest katalog /usr/share/locale/ w systemach Linux.

Idea tłumaczeń z użyciem Gettext polega na sparsowaniu plików dla aplikacji/strony www, w którym teksty do tłumaczeń będą w jakiś szczególny sposób oznaczony. W php takie teksty oznaczane są następująco:

  • gettext(„A message to translate”) – oznacza szukanie tekstu zastępczego dla wyrażenia „A message to translate”,
  • _(„A message to translate”) – to skrócony zapis dla gettext(),
  • dgettext(„domyslna_domena”,”A message to translate”) – szuka tekstu tłumaczenia w konkretnym pliku (tzw. domenie),
  • ngettext(„File”, „Files”, $number) – zwraca odpowiednią formę mnogą dla wyrażenia, zależną od $number (liczba dodatnia).

Są to najczęściej używane zwroty stosowane do tłumaczenia całych wyrażeń lub poszczególnych wyrazów i ich automatycznej odmiany. Zaczynamy od początku.

Czytaj dalej

2 Styczeń, 2009 Posted by | debian, scripts, web | | Dodaj komentarz

Debian : Konfiguracja workspace’a dla Apache2+PHP5+MySQL #3.

@MySQL

Przy instalacji php5 podałem również pakiety do instalacji MySQL. Podam je tutaj jeszcze raz:

  • mysql-server-5.0 – serwer bazy danych mysql,
  • mysql-client-5.0 – klient serwera bazy danych mysql,
  • phpmyadmin – [opcjonalnie] – proste i intuicyjne zarządzanie bazą danych.

Należy uruchomić serwer bazy danych, jeśli nie jest on automatycznie uruchamiany wraz ze startem systemu. Służy do tego polecenie:

/etc/init.d/mysql start

a dostępne opcje to: start, stop i restart.

Czytaj dalej

30 Grudzień, 2008 Posted by | debian, web | , | 2 Komentarze

Debian : Konfiguracja workspace’a dla Apache2+PHP5+MySQL #2.

@PHP5

Jeśli mamy zainstalowany serwer apache2, instalujemy pakiety php5. Ponownie skorzystam z aptitude/synaptic w celu instalacji następujących pakietów:

  • php5 – binarna wersja php5,
  • libapache2-mod-php5 – moduł php5 współpracujący z apache2,
  • php-pear – repozytorium bibliotek dla php (mamy do niej dostęp przez polecenie pear z konsoli),
  • mysql-server-5.0 – serwer bazy danych mysql,
  • mysql-client-5.0 – klient serwera bazy danych mysql,
  • php5-mysql – rozszerzenie do php5 współpracujące z mysql,
  • php-db – warstwa pośrednia między php i bazami danych (PDO),
  • phpmyadmin – skrypt php ułatwiający zarządzanie bazą danych mysql.

Czytaj dalej

30 Grudzień, 2008 Posted by | debian, web | | Dodaj komentarz