poniedziałek, 12 maja 2008

Nóż w plecy ;) - godzimy PHP z MS SQL

Nie wiem co Wy o tym sądzicie, ale dla mnie jakoś tak PHP i MS SQL nie pasują do siebie ;p No nie wiem, nie wiem. Może to przez moją delikatną niechęć do Microsoftu? Może. A może coś w tym jest, bo jakby nie patrzeć pehapca faktycznie nie tak łatwo namówić do współpracy z bazami MS. I vice versa. Niby ma PHP te biblioteki do pogaduch z SQL Serverem, a jednak trzeba im pomóc się dogadać.

Na zajęciach w WSB, ponad miesiąc temu, gdy zaczynaliśmy kombinować w PHP z bazą danych (SQL Serverem 2005 właśnie) nadarzyła się okazja do połączenia obu technologii. Szczęśliwie nasz wykładowca już kiedyś bawił się w te klocki i teraz przekazał nam swoją tajemną wiedzę :) Wszyscy zassali EasyPHP i ruszyliśmy do boju. Więc, jak to było?

Konfiguracja PHP pod Windows XP

Najpierw musimy dobrać się do pliku php.ini. W tym celu przy uruchomionym serwerze, w okolicach zegara odszukujemy ikonę EasyPHP. Klikamy na niej prawym przyciskiem myszy, wybieramy Configuration, a następnie PHP.


Plik konfiguracyjny otwiera się w nowym oknie Notatnika. Odszukujemy linię:

;extension=php_mssql.dll

i usuwamy z jej początku średnik. Na koniec oczywiście musimy zapisać zmiany oraz uruchomić ponownie Apache'a (prawoklik na ikonie w trayu i Restart lub Stop, a po chwili Start :)). Po tym PHP powinno być gotowe do współpracy.

Konfiguracja PHP pod Fedorą 7

Pod Fedorą sprawa wygląda zgoła inaczej. Tutaj nie wystarczy odkomentować linii w pliku konfiguracyjnym, a trzeba wzbogacić system o niezbędne pakiety - FreeTDS oraz php-mssql. Na szczęście tak się składa, że roboty nie ma wiele. Logujemy się na roota i z pomocą starego dobrego yuma instalujemy co konieczne:

yum install freetds php-mssql

Po zakończonej instalce upewniamy się, że nowe rozszerzenie zostało pomyślnie dodane do PHP. Wklepujemy w konsoli:

ls -la /usr/lib/php/modules/

i szukamy na liście mssql.so. Jeśli go tam brakuje to mamy problem, ale jeśli się pojawiło to znaczy, że PHP jest gotowe i można ponownie uruchomić Apache'a :)

Konfiguracja SQL Servera 2005

Teraz czeka nas trochę klikania - jak to na Windowsie ;p Uruchamiamy SQL Server Surface Area Configuration i klikamy Surface Area Configuration for Services and Connections. W nowym oknie rozwijamy drzewko po lewej i zaznaczamy Remote Connections. Teraz po prawej zaznaczamy Local and remote connections, poniżej upewniamy się, że aktywna jest opcja pierwsza (Using TCP/IP only) lub ewentualnie trzecia i zatwierdzamy zmiany przyciskiem OK. Zostaniemy poinformowani o konieczności ponownego uruchomienia serwera w celu wprowadzenia zmian. Oczywiście dajemy OK, ale jeszcze nie restartujemy niczego.

Zamykamy wszystkie okienka, odpalamy SQL Server Management Studio i logujemy się. W oknie Object Explorer klikamy prawym przyciskiem myszy główną gałąź (tak, to ta z nazwą naszego hosta ;>), a następnie z menu kontekstowego wybieramy Properties. Otwiera się okno ustawień. Po lewej na liście Select a page zaznaczamy Security. Po prawej stronie widnieją teraz w czterech grupach ustawienia zabezpieczeń. W grupie Server authentication wybieramy SQL Server and Windows Authentication mode. Zatwierdzamy przez OK. Kolejny raz pojawi się komunikat dotyczący konieczności restartu. Wbijamy OK i lecimy dalej.

Wracamy do naszego drzewka. Rozwijamy teraz gałąź Security i klikamy prawym przyciskiem myszy na Logins. Z menu kontekstowego wybieramy New Login.... Przechodzimy do utworzenia nowego użytkownika dla PHP. Z sekcji Select a page wybieramy General. Po prawej podajemy nazwę usera, zaznaczamy opcję SQL Server authentication, ustalamy oraz potwierdzamy hasło dostępu i usuwamy zaznaczenie z checkboksa przy Enforce password policy. Przechodzimy do Server Roles (lewe menu). Na liście dostępnych ról zaznaczamy sysadmin i zatwierdzamy wszystko przez OK. Oczywiście można utworzyć i przypisać PHP osobną rolę, choćby ze względów bezpieczeństwa, jednak do zastosowań domowych przedstawiona konfiguracja powinna w zupełności wystarczyć.

Na koniec, wieńcząc nasze karkołomne zmagania z konfiguracją SQL Servera, uroczyście dokonujemy jego ponownego uruchomienia (eee... zrymowało się? ;p). Powtórnie popełniając prawoklik na najwyższej gałęzi drzewa Object Explorera wybieramy tym razem opcję Restart. Serwer zapyta jeszcze tylko czy aby na pewno chcemy mu to uczynić, na co odpowiemy soczystym Yessss.

I tak nie może być idealnie ;)

Mimo, że da się już w miarę normalnie korzystać z baz SQL Servera, PHP zwraca czasami podejrzane komunikaty typu:

Unicode data in Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier

Dotyczą one problemów z kodowaniem znaków w Unicode i najczęściej pojawiają się podczas wykonywania selectów z pól typu ntext w tradycyjny sposób:

mssql_connect('.', 'user', 'pass');
mssql_select_db('Northwind');

$q = mssql_query('select CategoryID, CategoryName, Description
from Categories');

while ($r = mssql_fetch_assoc($q)) {
echo $r['CategoryID'] . '. <strong>' . $r['CategoryName'] . '</strong> <em>' . $r['Description'] . '</em><br />';
}

mssql_close();

Rozwiązaniem może być tu np. wykorzystanie klasy COM zaproponowane w jednej z notek do manuala PHP:

$db = new COM('ADODB.Connection');
$dsn = 'DRIVER={SQL Server}; SERVER={localhost}; UID={user}; PWD={pass}; DATABASE={Northwind}';
$db->Open($dsn);
$rs = $db->Execute('select CategoryID, CategoryName, Description
from Categories');

while (!$rs->EOF) {
echo $rs->Fields['CategoryID'] . '. <strong>' . $rs->Fields['CategoryName'] . '</strong> <em>' . $rs->Fields['Description'] . '</em><br />';
$rs->MoveNext();
}


W kolejnym poście, jak wspomniałem ostatnio, wrócimy do grzebania przy domenach i zbratamy nasz adresik z wielkim Google oraz jego aplikacjami webowymi. Roboty z tym nie ma za wiele, jednak czasu też brak i pewnie nie uda mi się opublikować tekstu tak szybko jak teraz. Postaram się jednak żeby przerwa nie trwała zbyt długo. Pozdrawiam serdecznie i przypominam o ankiecie z lewej :)

Zauważyłeś błąd w artykule? Coś nie działa? Zostaw swoje uwagi w komentarzach.

niedziela, 11 maja 2008

100% z domeny - #1 rejestracja i parking

Witam po... ekhmm, krótkiej przerwie i zapraszam na ostatnio zapowiedziany pierwszy artykuł z cyklu poświęconego domenom. Chciałbym żeby tekst wyszedł krótki, treściwy i lekki, ale pewnie będzie jak zwykle :/ Dobra, więc do roboty.

To nie jest blog klasy żłobek administratora, więc daruję sobie tłumaczenie tak fundamentalnych podstaw jak "co to jest domena?" :) Na temat zalet posiadania własnej domeny również nie będę się zanadto rozwijał - tym z Was, którzy ich nie dostrzegają na pewno wzrok się poprawi o ile tylko dobrną do ostatniego odcinka mojego wywodu. Może nie przedstawię tu wszystkich plusów, bo pewnie sam ich wszystkich jeszcze nie znam, ale zgodnie z tytułem cyklu na pewno poznacie kilka nowych sposobów na wykorzystanie swoich domenek.

Dawno minęły już czasy, gdy posiadanie domeny było atrybutem tylko wielkich korporacji i portali internetowych. Teraz są tak tanie (no, może nie wszystkie), że mogliby je w Biedronce sprzedawać i to w sześciopakach ;p Pamiętam, jak jeszcze kilka lat temu, gdy dopiero wczołgiwałem się w tę branżę, popularne były wszelkiej maści subdomeny, aliasiki, czym krótsze tym lepsze. Pamiętam, bo sam z nich aktywnie korzystałem :) To były czasy, ehh... A teraz? Teraz byle leszcz może kupić własnego coma czy peelkę. I nie jest to wcale zasługa wyższego kieszonkowego. Codziennie widzę, jak grzyby po deszczu wyrastają nowe sajty, które po roku tracą swój szpanerski adres, bo admin regulaminu nie doczytał. Ahh! Teraz już wiem skąd ten milion ^_^ No ale dobra, wystarczy bajeczek. Przejdźmy do konkretów.

To od czego zacząć? Od rejestracji oczywiście. Obiecałem pokazać jak wyrwać tani adresik, więc ze względów oczywistych pod nóż pójdą domeny globalne - nie polskie, które wciąż kosztują więcej aniżeli powinny. I nie mam tu na myśli pierwszego okresu abonamentowego w promocyjnej cenie, na którą... niektórzy się nabierają :> Na zakupy wybierzemy się za ocean, do prawdopodobnie największego na świecie akredytowanego przez ICANN rejestratora domen globalnych - GoDaddy.


Od razu muszę zaznaczyć, że aby dokonać płatności za usługi GoDaddy powinniście się zaopatrzyć albo w kartę kredytową (lub też wirtualną kartę kredytową do płatności internetowych oferowaną m.in. przez Inteligo, mBank czy Lukas Bank) albo w konto PayPal, oczywiście doładowane, do czego i tak potrzebna będzie karta ;p Jak więc widać, nie ma mocnych i plastik to tutaj konieczność.

Tip: Rekomendowanym sposobem płatności jest PayPal - numer naszej karty przekazujemy tylko jednej firmie i w razie opróżnienia konta wiadomo od razu kogo pozwać ;) Nie oznacza to jednak, że GoDaddy nie jest godzien zaufania.

Rejestracja

Zacznijmy od założenia nowego konta. Na stronie głównej znajduje formularz logowania, a pod nim link Create a New Account, klikamy. Wypełniamy wszystkie pola, np według wzoru (w pole Call-in PIN wpisujemy dowolne 4 cyfry, prawdopodobnie ta opcja nigdy się nie przyda; adres e-mail podajemy prawdziwy, GoDaddy nie rozsyła niezamówionej poczty - patrz sekcja Stay Informed! - a jedynie informacje na temat naszych zamówień) i klikamy button CREATE A NEW ACCOUNT. Jeśli wszystko poszło dobrze, zostajemy automatycznie zalogowani. Na stronie głównej, w specjalnym polu wpisujemy nazwę pożądanej domeny, z długiej listy rozwijanej wybieramy interesujące nas rozszerzenie i klikamy GO!. Jeśli wybrana domena okaże się wolna ujrzymy stosowny komunikat oraz jej aktualną cenę. GoDaddy często organizuje promocje, w których różne domeny można nabyć praktycznie za grosze, mimo że zwykle i tak są bardzo tanie. Klikamy Proceed to Checkout. O ile dostępne są jeszcze inne rozszerzenia dla naszej domeny GoDaddy nie omieszka nas o tym poinformować na kolejnej stronie. Zakładam, że na razie nie jesteśmy zainteresowani, więc klikamy Continue to checkout.... Docieramy wreszcie do strony, na której wybieramy okres na jaki chcemy zarejestrować naszą domenę (Registration Length), czy domena ma być automatycznie odnawiana przed wygaśnięciem (Auto-Renew Protection - Manual jeśli nie chcemy, aby GD sam pobierał sobie kasę z naszego konta), czy chcemy do niej dodatkowo płatny certyfikat poświadczający własność (Certified Domain) oraz możemy od razu ustawić własne rekordy NS, by wydelegować domenę na serwery, na których będziemy nią zarządzać. Oczywiście możemy pozostawić tutaj domyślne serwery GD, które również umożliwią nam zaawansowaną obsługę domeny, jednak proponuję ustawić własne. Dzięki temu wydelegujemy naszą domenę do serwerów MyDomain, o których opowiem nieco później. Klikamy więc link click here to set nameservers i na kolejnej stronie wypełniamy odsłonięte pola tak jak na załączonym obrazku.

ns1.mydomain.com
ns2.mydomain.com
ns3.mydomain.com
ns4.mydomain.com

Przewijamy stronę do dołu, zaznaczamy No thanks. I'm ready to checkout i klikamy przycisk CONTINUE.

Trafiamy ostatecznie do kasy. Tutaj warto sprawdzić czy wszystko zgadza się z naszymi ustawieniami. Można, a nawet trzeba również wprowadzić specjalny kod promocyjny, dzięki któremu dodatkowo obniżymy cenę domeny. Skąd wziąć kod? Z pomocą przychodzi Google i magiczne zapytanie :) Można wykorzystać pierwszy lepszy, atrakcyjnie wyglądający kodzik (np. OYH1), ale czasem warto chwilę pomyśleć czy jakiś inny obniżający cenę konkretnego rozszerzenia do określonego poziomu nie da nam więcej. Finalnie wybrany kod wpisujemy w pole If you have a promo or source code enter it here oraz zatwierdzamy klikając button Apply Code. Po przeładowniu strony od razu widać o ile obniżyła się należność. Teraz pora na jej uregulowanie. W punkcie Select Your Payment Method zaznaczamy PayPal, poniżej w punkcie trzecim oba checkboksy i klikamy Checkout Now. Zostajemy przeniesieni na stronę PayPal, gdzie po prawej stronie logujemy się na swoje konto. O ile dobrze pamiętam (nie mam ilustracji), po zalogowaniu zostaniemy poproszeni jeszcze o potwierdzenie dodania GoDaddy do listy zaufanych kontrahentów. Na koniec wracamy do strony GD, gdzie weryfikujemy swoje dane do billingu i ponownie klikamy Checkout Now. Z naszego konta PayPal ściągana jest należność i zostaje wyświetlony komunikat potwierdzający pomyślne zakończenie operacji. Klikamy Back to My Account i wracamy na stronę główną swojego konta. To tyle jeśli chodzi o rejestrację.

Teraz słówko na temat panelu zarządzania domenami w GoDaddy. W lewym menu odszukujemy sekcję My Products, a pod nią link Manage Domains. Klikamy. Po chwili widzimy listę posiadanych domen, zaś nad nią szereg opcji. Zaznaczamy checkbox przy naszej domenie, a następnie klikamy opcję Contact. Naszym oczom ukazuje się kilka zakładek z formularzami umożliwiającymi zmianę danych wyświetlanych w bazie WHOIS. Aby nie bawić się w żmudne wypełnianie każdego z nich, zaznaczamy opcję Update all contact types with this contact information :) To oszczędzi sporo pracy. Po zmianie danych klikamy OK, a w panelu pokazuje się komunikat o konieczności odczekania chwili zanim zmiany zostaną wprowadzone. W taki sam sposób zmienia się adresy nameserwerów, przedłuża okres abonamentowy czy przenosi domenę do innego konta w GD.

W międzyczasie GoDaddy wysyła do nas kilka maili: potwierdzenie zamówienia, potwierdzenie rejestracji i informację o zmianie danych WHOIS. No właśnie. Poza niskimi cenami GD ma jeszcze jednego wielkiego plusa - rejestracja jest natychmiastowa, a nowe domenki właściwie już po kilku godzinach są widoczne globalnie. Sugeruję dokonywanie rejestracji wieczorem. W nocy DNSy polskich providerów się odświeżą i kiedy rano wstaniecie wszystko będzie już działało :) A wracając do powiadomień, otrzymujemy również list od PayPal z potwierdzeniem zapłaty. W tym miejscu kończy się proces rejestracji. Może opis zajmuje trochę miejsca, jednak to tylko przez jego poziom szczegółowości - krok po kroku. W rzeczywistości wszystko trwa mniej niż kwadrans.

Parking

Czas na podpięcie domeny do nowych nameserwerów i wstępną konfigurację rekordów DNS. Naszą domenę w czasie rejestracji wydelegowaliśmy na zewnętrzne serwery firmy MyDomain. Teraz musimy jeszcze ją tam zaparkować. W tym celu przechodzimy na stronę MyDomain i celem założenia nowego, bezpłatnego konta klikamy banner z napisem Open an account today. Naszym oczom ukazuje się wielki, paskudny formularz rejestracyjny ;p Nie ma się jednak co zrażać, gdyż naprawdę warto mieć tutaj konto. Wypełniamy wszystkie pola, zaznaczamy na dole checkbox i klikamy Create an Account (należy pamiętać o podaniu poprawnych danych; jeśli wprowadzone dane okażą się nieprawidłowe, nasze konto zostanie usunięte, a wraz z nim wszystkie zaparkowane domeny - tego chyba nie chcemy?). Zostaje utworzone nasze konto i lądujemy w swoim panelu zarządzania. Odszukujemy wytłuszczone zdanie To manage domains not registered with us i klikamy w znajdujący się tuż obok link click here. Na kolejnej stronie klikamy button Add Domains. Następnie w polu tekstowym wpisujemy nazwy domen, które chcemy dodać do swojego konta (jedna na linię). Wszystkie domeny powinny mieć wcześniej ustawione rekordy DNS zgodne z serwerami MyDomain. Klikamy Add. Domeny zostają dopisane do DNSów MD. Klikamy link Add Services, aby aktywować pakiet narzędzi do obsługi domeny. Na kolejnej stronie klikamy CHECK OUT, a następnie zaznaczamy pole Registration Agreement po lewej stronie i ponownie klikamy przycisk COMPLETE ORDER. Nasze zamówienie jest przetwarzane. Może dziwnie to wygląda, bo przy zamówieniu pisze, że pakiet narzędzi jest wykupywany na rok, ale w rzeczywistości jest on ważny w całym okresie obsługi danej domeny przez serwis MyDomain. Wszystko to oczywiście bezpłatnie. Po przetworzeniu zamówienia otrzymujemy indywidualny jego numer, który raczej do niczego się nam nie przyda. Klikamy CONTINUE. Widzimy podsumowanie zakupów, klikamy Goto My Account. Znowu trafiamy na stronę główną naszego panelu. Tak jak poprzednio klikamy link click here, a następnie Refresh Display, aby zobaczyć świeżo dodaną do konta domenę. W międzyczasie otrzymujemy maile z potwierdzeniem dodania domeny oraz zamówienia pakietu narzędzi do jej obsługi. Domena została zaparkowana.

Wstępna konfiguracja

Pozostając na stronie zawierającej wykaz naszych domen, klikamy link Forwarding/DNS Management obok domeny do skonfigurowania. Przenosimy się na stronę konfiguracji domeny. Jest ona podzielona na kilka sekcji. U samej góry wyświetlany jest stan rekordów NS. MyDomain okresowo sprawdza czy rekordy te wskazują prawidłowe serwery nazw. Niżej widzimy ramkę URL Forwarding. Tutaj możemy ustawić na jaki adres mają zostać przekierowane wszystkie wywołania naszej domeny jeżeli chcemy by działała tylko jako zwykły alias. Nam się ta opcja jednak nie przyda, dlatego zaznaczamy checkbox Disable Forwarding i klikamy przycisk Update. Widzimy komunikat o pomyślnej zmianie ustawień, klikamy Continue.

Po powrocie na stronę konfiguracji przechodzimy do ustawień Email Forwarding. To akurat bardzo fajna opcja dla osób, które chciałyby mieć aliasy pocztowe we własnej domenie, ale nie posiadają konta hostingowego. Tutaj możemy ustawić sobie na sztywno wszystkie aliasy lub od razu aktywować funkcję catch-all, która przekaże całą pocztę dla domeny na jeden wskazany adres. Należy pamiętać, że każdą zmianę na liście adresów potwierdzamy przez kliknięcie buttona Update.

Zdecydowanie najważniejszą częścią strony konfiguracyjnej jest jednak ramka DNS Management. To właśnie tutaj możemy bawić się rekordami DNS naszej domeny. Na razie zajmiemy się tylko jednym rodzajem rekordów - typu A - zaś inne omówię przy okazji kolejnych odcinków. Rekord typu A pozwala nam na przypisanie domeny do konkretnego adresu IP (tylko i wyłącznie IP). Dzięki niemu możemy np. na MyDomain zarządzać pocztą, a ruch WWW przekazywać dalej do innego serwera. I tak właśnie teraz zrobimy. Najpierw trzeba wydobyć adres IP naszego serwera WWW. Jeśli posiadamy konto z dedykowanym IP (np. konto w nazwa.pl) to używamy właśnie tego adresu. Natomiast jeżeli nasze konto współdzieli IP z innymi użytkownikami na serwerze, będziemy musieli trochę pokombinować. Najprościej jest jeśli nasze konto WWW obsługujemy przez cPanel. Domyślnie wyświetla on na stronie głównej Shared Ip Address (lub po prostu IP), z którego korzystamy. Kopiujemy ten adres i wklejamy na MyDomain do pola IP Address rekordu A. Klikamy Update. Rekord zostaje ustawiony.

Teraz tylko trzeba w panelu konta WWW podpiąć domenę. Pokażę to znowu na przykładzie cPanelu. Na stronie głównej wybieramy ikonę Parked Domains (można też wybrać Addon Domains jeśli chcemy podpiąć domenę pod konkretny katalog na serwerze). W polu New Domain Name wpisujemy nazwę naszej domeny i klikamy Add Domain!. Domena zostaje zaparkowana i od tej pory prowadzi do naszego konta WWW :)

Tip: Jeżeli chcesz otrzymywać pocztę ze swojej domeny na skrzynki skonfigurowane w panelu konta hostingowego, musisz na stronie konfiguracji MyDomain w sekcji Email Forwarding wyłączyć aliasy pocztowe (zaznaczyć pole Disable forwarding i zatwierdzić przyciskiem Update)! W przeciwnym wypadku MyDomain będzie przechwytywało całą pocztę i nie dotrze ona do Twojego serwera. To samo tyczy się opcji URL Forwarding. Powinna ona zostać wyłączona jeśli ustawione są rekordy A, CNAME lub NS.

Na stronie konfiguracji MyDomain dostępne są jeszcze dwie opcje: New Subdomain oraz Wildcard DNS Records. Pierwsza z nich umożliwia dodanie subdomeny, a następnie zarządzanie nią w taki sam sposób jak domeną główną. Druga zaś ustala w jaki sposób traktować wywołania nieistniejących subdomen. O tym jednak powiemy sobie kiedy indziej ;)

Kolejny artykuł poświęcę problemowi współpracy PHP z... ekhmm, MS SQL Server 2005, a po tym zapraszam na drugi odcinek cyklu 100% z domeny. Zintegrujemy w nim nasz adresik z usługami Google Apps. W najbliższym czasie chciałbym też może przeprowadzić jakiś mały kursik, więc zapraszam do głosowania w ankiecie na tematykę takowego. Dajcie znać co Was interesuje :)

Zauważyłeś błąd w artykule? Coś nie działa? Zostaw swoje uwagi w komentarzach.