Archive for the ‘PHP’ Category

Instalacja Apache 2.2 pod Windows

Sunday, March 1st, 2009

Instalacja Apache 1.3 pod Windows – instalacja starszej wersji.

Instalacja Apache 2.2 pod Windows.

Serwer Apache można pobrać ze strony:  http://httpd.apache.org/download.cgi
Php można pobrać ze strony: http://windows.php.net/download/ – wystarczy pobrać spakowane źródła zipem i rozpakować do dowolnego katalogu(dla apache wersja vc6 thread safe).

Instalacja przebiega dosyć podobnie do Apache w wersji 1.3.  Apache pobieramy ze strony w wersji instalacyjnej dla Windows. Pierwsze kroki są bardzo proste, ograniczają się do uruchomienia instalatora i klikania dalej, dalej… Ciekawie robi się dopiero gdy przechodzimy do konfiguracji. Na dobrą sprawę można było by nic nie konfigurować, bo serwer po zainstalowaniu zawiera już plik ze standardową konfiguracją, ale brakuje tam kilku linijek, które są niezbędne do pracy z php i również takich które ułatwiają pracę.
Zaczynamy od ustawienia DocumentRoot  i <Directory>  tam gdzie znajduje się nasz katalog ze stronami np. “D:/strony”. Zastępujemy standardowe wpisy wskazujące na katalog: htdocs wewnątrz instalacji Apache. Ja trzymam zawsze strony na dysku na którym nie mam systemu, co ułatwia sprawę jak trzeba przeinstalować windows. U mnie wygląda to tak:

  • DocumentRoot “D:/strony”
  • <Directory “D:/strony”>

Dalej instalujemy php w dowolnym katalogu, ja wrzucam to do katalogu apache: “C:/Program Files/Apache Group/php/”. Dodajemy kolejne wpisy w httpd.conf:

  • w sekcji: <IfModule mime_module> np. na samym końcu: AddType application/x-httpd-php .php
  • na samym końcu listy z wpisami LoadModule:  LoadModule php5_module “C:/Program Files/Apache Group/php/php5apache2_2.dll”
  • na samym końcu zmienna, która pozwala na wskazanie położenia pliku php.ini: PHPIniDir “C:/Program Files/Apache Group/php”

Plik: php5apache2_2.dll znajduje się w katalogu php i jest dołączany do źródeł php. Aktualnie korzytam z wersji php: 5.3.10

Konfiguracja php.ini:
Php.ini znajduje się w katalogu php jako php.ini-development lub php.ini-production. Warto go trochę pozmieniać.

  • pewnie będziemy korzystać z MySql, z bibliotek graficznych i zip. Odchaszowujemy następujące linijki: extension=php_mysqli.dll, extension=php_gd2.dll, extension=php_zip.dll
  • żeby apache znalazł te biblioteki(są dołączone do źródeł php) musimy mu podać scieżkę do nich: extension_dir = “C:\Program Files\Apache Group\php\ext”
  • dodatkowo trzeba dodać do zmiennej systemowej PATH scieżkę do biblioteki: libmysql.dll, która znajduje się w kataogu php. Aby dotrzeć do zmiennych systemowych w Windows xp wybieramy: Mój Komputer/Właściwości/Zaawansowane/Zmienne środowiskowe/.  Po dodaniu naszej ścieżki do php, restartujemy komputer.
  • chcemy też widzieć błędy jakie popełniamy. Serwer jest przeznaczony tylko do testowania aplikacji. Zmieniamy z Off na On: display_errors = On

Teraz już wszystko działa. Warto jednak dodać parę rzeczy, które ułatwią nam pracę:

  • mode_rewrite. W aplikacjach opartych np. na Frameworku Zend, bez włączonego mode_rewrite nie da się pracować.  Ogólnie mode_rewrite pozwala na manipulowanie adresami stron. Włącza się go w httpd.conf w linijce: LoadModule rewrite_module modules/mod_rewrite.so oraz AllowOverride None – zmieniamy na AllowOverride All w przeciwnym razie zmiany,  które wprowadzimy w pliku .htaccess będą ignorowane przez serwer.
  • do parametru DirectoryIndex dodajemy index.php: DirectoryIndex index.html index.php

Virtual Hosts:

Bardzo wygodnie jest tesotwać aplikacje i odwoływać się do nich poprzez subdomeny. Odwołujemy się w tedy do aplikacji tak: http://aplikacja.localhost zamiast http://localhost/aplikacja. Nie ulegną wtedy zmianie scieżki i wszystko będzie wyglądało tak jak na serwerze docelowym. Żeby módz korzystać z subdomen w pliku httpd.conf dodajemy na końcu pliku dla każdej subdomeny następujące wpisy:

NameVirtualHost 127.0.0.1
<VirtualHost 127.0.0.1>
DocumentRoot “D:\strony\aplikacja”
ServerName aplikacja.localhost
</VirtualHost>

Żeby zmiany były widoczne, trzeba dodać jeszcze wpis w pliku: C:\WINDOWS\system32\drivers\etc\hosts o następującej treści: 127.0.0.1 aplikacja.localhost.

Jak instalowałem za pierwszym razem nie obeszło się bez problemów, jak zawsze wynikających z nieuwagi. W instrukcji zrobiłem wszystko jak dla Apache 2.0 i w pliku httpd.conf ustawiłem LoadModule php5_module “C:/Program Files/Apache Group/php/php5apache2_2.dll. W efekcie Apache nie wystartował i dostałem komunikat błędu :

Syntax error on line 127 of C:/Program Files/Apache Group/Apache/conf/httpd.conf: Cannot load   C:/Program Files/Apache Group/php/php5apache2.dll into server:

Wszystko pięknie ale ścieżka jest przecież dobra, nie mogłem się pomylić.  Okazuje się że nie zauważyłem że czytam instrukcję dla serwera 2.0. Dla wersji 2.2 trzeba załadować bibliotekę: php5apache2_2.dll a nie php5apache2.dll.

Kodowanie adresów url za pomocą urlencode i urldecode

Tuesday, November 25th, 2008

Jeśli zakodujemy sobie sami adresy url rezygnująć ze standardowych ?nazwa_zmiennej=wartosc_zmiennej, możemy się zdziwić przy ich odczycie. Przypuśćmy że chcemy przekazać w zmiennej wartość “ala ma kota”. Po zdekodowaniu adresu i odczytaniu zmiennych, które miały mieć znakami specjalnei np. spacja ” ” ” – dostaniemy w miejscu spacji %22. No i aplikacja nie działa tak jak zakładaliśmy.

Używając standarodwego kodowania adresów i odczytując wartości zmiennych z tablicy $_GET problemy powyższego nie było. Na każdej wartości tablicy $_GET wywoływana jest automatycznie funkcja urldecode która dekoduje wszystkie ciągi znaków %## na znaki specjalne, którymi były na początku.

W drugą stronę też trzeba być czujnym. Przy zapisie do atrybutu href tagu <a>. Wrzucenie ciągu znaków z jakimś cudzysłowem, rozwali nam najprawdopodobniej cały adres. Więc jeśli nie stosujemy własnych funcji escape, warto użyc urlencode, która zamieni wszystkie znaki specjalne na ciągi typu: %##

Szybka publikacja strony. Zip i ftp.

Saturday, November 22nd, 2008

Zip i Ftp.

Publikacja stron może czasem doprowadzić do szału. Szczególnie jeśli ktoś zamierza wrzucać pliki pojedynczo. No to lecą biblioteki z tysiącami plików, połączenia się zrywają, trwa to długo, długo, długo… Po co tak. Lepiej spakować sobie wszystko ładnie zipem. Plik nie będzie zbyt duży, szybko się wrzuci. Rozpakować go można potem tak:

<?php if($_GET['dest']){ $dest = ' -d '.$_GET['dest']; } else { $dest = ''; } if($_GET['name']){ $unzip = shell_exec("unzip $_GET[name].zip $dest"); echo $unzip; }

lub korzystając z biblioteki zip

<?php if($_GET['name']){ $zip = new ZipArchive; if ($zip->open($_GET['name']) === TRUE) { $zip->extractTo('./'); $zip->close(); echo 'ok'; } else { echo 'failed'; } }

No i mamy cały projekt szybciutko i pięknie na serwerze.

Instalacja Apache, mysql i php5 pod windows

Sunday, November 2nd, 2008

1. Instalacja apache.

Ten punkt jest dosyć prosty. Wystarczy pobrać źródło i klikać dalej. Ja używam apache 1.3.33 bo nigdy nie miałem z nim problemów w przeciwieństwie do wesrsji 2.

Jeśli nie chcemy aby pliki znajdowały się w stanadardowym miejscu htdocs, należy ustawić dwie zmienne w httpd.conf: DocumentRoot “” oraz <Directory “”>.

2. Instalacja php.

Pomocne linki:

http://pl.php.net/manual/en/install.windows.apache1.php

http://pl.php.net/manual/en/install.windows.manual.php

Żeby wogóle ruszyło wystarczy dodać do pliku konfiguracyjnego apache – httpd.conf 4 linijki:

Na końcu sekcji LoadModule:
LoadModule php5_module “C:/php/php5apache.dll”

Na końcu sekcji AddModule:

AddModule mod_php5.c
W środku sekcji <IfModule mod_mime.c> :
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

Apache i php już hula.

Pliki konfiguracyjne i niektóre dll muszą być widoczne dla serwera. Brzydko i niepraktycznie jest wrzucić to do katalogu windows. Więc zostawiamy to gdzie jest i dodajemy scieżkę kataogu php do zmiennej środowiskowej PATH. Tak pisze w dokumentacji ale nigdy nie działa, więc wrzucam do katalogu Windows. Korzystamy z php.ini-recomended.

W pliku php.ini odhashowujemy linijkę: extension=php_mysql.dll i php_mysqli.dll ustawiamy również zmienną extension_dir na katalog C:/php/ext, domyślnie jest na ./ Ustawiamy display_errors On

Biblioteka powinna być już dostępna. Jeśli coś będzie nie tak ze ścieżkami zawsze można zajrzeć do logów apache, tam wszystko co zrobiliśmy źle znajdziemy.

Jeszcze włączam pare rzeczy w httpd.conf:

  • Mod rewrite: LoadModule rewrite_module modules/mod_rewrite.so i AddModule mod_rewrite.c
  • AllowOverride None – zmieniamy na AllowOverride All inaczej zmiany które wprowadzamy w htacces będą ignorowane przez apache.
  • Dodaję index.php do: DirectoryIndex index.html index.php
  • Żeby wszystko wygladalo tak jak na serwerze docelowym, zgadzały się scieżki, tworzę wirtualne hosty dla każdego projektu. Wtedy adres przez który odwołuję się do aplikacji wyglada tak: http://aplikacja.localhost zamiast http://localhost/aplikacja/. Ułatwia to pracę. Żeby módz z tego korzystać w httpd.conf dodajemy:
    NameVirtualHost 127.0.0.1
    <VirtualHost 127.0.0.1>
    DocumentRoot “D:\htdocs\aplikacja”
    ServerName aplikacja.localhost
    </VirtualHost>
    a w pliku: C:\WINDOWS\system32\drivers\etc\hosts dodajemy linijkę: 127.0.0.1 aplikacja.localhost

3. Instalacja MySql.

Korzystamy ze standardowej kofiguracji. Ma działać tak żeby można było testować aplikacje. Ogranicza się to więc do podania hasła dla roota i klikaniu dalej.

Witam!

Thursday, August 7th, 2008

Często znajduję rozwiązanie jakiegoś problemu. Zastosowanie jest dosyć rzadkie i powtarza się raz na pół roku może rzadziej. Zdarza się więc, że sam zapominam jak rozwiązałem dany problem. I zaczynam wtedy jeszcze raz. Bez sensu. Dobrym pomysłem więc będzie zapisać to gdzieś sobie, tak żeby można było łatwo sięgnąć w odpowiednim czasie po rozwiązanie i po raz kolejny nie wywarzać drzwi. Tak więc będę sobie zapisywał na tym blogu wszystko co wymyśliłem lub nauczyłem się od kogoś lub z jakiegoś miejsca w sieci. Przy okazji może komuś się to przyda.