Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM    Subskrybuj kanał ATOM dla tagu php Kanał ATOM (tag: php)

Autor wpisu: widmogrod, dodany: 23.01.2011 20:06, tagi: php, mysql

Nie opiszę całości instalacji gdyż już w wielu źródłach jest opisana szczegółowo. Przedstawię tylko szybkie rozwiązanie problemu, który mnie nawiedził już po procesie instalacji.

Po zainstalowaniu MySQL, utworzeniu bazy danych, przypisaniu uprawnień i skonfigurowaniu pierwszego połączenia w PHP – może Cię spotkać ot taki komunikat:

Warning: PDO::__construct() [pdo.--construct]: 
[2002] No such file or directory (trying to connect via unix:///tmp/mysql.sock) in

Rozwiązaniem jest uzupełnienie odpowiedniej sekcji w php.ini. MacPort’s zapisują php.ini w katalogu: /opt/local/etc/php5/php.ini Otwieramy go dowolnym edytorem i odszukujemy sekcję pdo_mysql.default_socket

W moim przypadku ta sekcja była pusta. Teraz wystarczy wskazać socket zainstalowanej lokalnie BD. W moim przypadku:

pdo_mysql.default_socket=/opt/local/var/run/mysql5/mysqld.sock

Można sprawdzić jaka jest lokalizacja soketu, wykonując polecenie w termianlu:

mysql5 -u root -p test

… i odszukaniu fragmentu zaczynającego się od UNIX socket.

Teraz tylko – zapisz plik, zrestartuj serwer i gotowe ;)

Jeden błąd mniej! można iść dalej :)

Autor wpisu: Zyx, dodany: 23.01.2011 19:05, tagi: php

Większość programistów PHP albo nie miała do czynienia z innymi językami programowania, albo nie poznała ich na tyle dobrze, by spotkać się z pojęciem systemów budowania. Są to specjalne narzędzia, które wiedzą, w jaki sposób złożyć z kodu źródłowego gotową do uruchomienia aplikację i zainstalować ją w systemie. Oczywiście ze względu na swą naturę, aplikacje PHP nie potrzebują ich aż tak bardzo, ale jeśli chcemy ułatwić sobie życie, warto je poznać, tym bardziej że istnieje projekt dedykowanego systemu budowania dla tego języka, zwący się Phing. W tym wpisie zamierzam go bliżej omówić.

Autor wpisu: batman, dodany: 23.01.2011 08:00, tagi: php

Programiści PHP mają do dyspozycji dwa kombajny od brudnej roboty. Są to Eclipse oraz NetBeans (kolejność alfabetyczna). Oba narzędzia oferują zbliżone możliwości, więc wybór tego właściwego zależy głównie od aktualnego stanu umysłu, estetyki oraz widzi-mi-się osoby wybierającej. W moim przypadku padło na Eclipse. I wszystko byłoby w należytym porządku, gdyby nie drobny szkopuł – mój Eclipse mnie nie lubi. Nie ważne skąd go ściągnę, gdzie rozpakuję, jak skonfiguruję i tak za kilka dni (maksymalnie kilka tygodni) odmówi posłuszeństwa.

Nie inaczej było tym razem. Związki zawodowe skupione wokół DLTK stwierdziły, że za dużo pracują i ogłosiły strajk. Pół biedy gdyby ogłosiły strajk włoski. Przynajmniej Eclipse działałby jak powinien. Ale nie. Zabarykadowali się w swoim workspace i ani myślały wracać do pracy. Z drobnymi poprawkami jakoś sobie radziłem (ale żeby zabrać nawet podpowiadanie składni klas z tego samego pliku? skandal!), jednak większe zmiany powodowały iż poczułem się jak 5 lat temu – kolorowanie składni, manual i jedziemy.

Oburzony takim obrotem spraw, zakasałem rękawy i zacząłem szukać rozwiązania. Negocjacje ze strajkującymi zacząłem standardowo (jeszcze nie wiedziałem, że chodzi o DLTK) od sprawdzenia co się dzieje w pliku .project. Zawiera on podstawowe informacje o typie projektu oraz uruchamianych builderach. Typowy plik powinien wyglądać podobnie do tego.

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
	<name>Projekt</name>
	<comment></comment>
	<projects>
	</projects>
	<buildSpec>
		<buildCommand>
			<name>org.eclipse.wst.validation.validationbuilder</name>
			<arguments>
			</arguments>
		</buildCommand>
		<buildCommand>
			<name>org.eclipse.dltk.core.scriptbuilder</name>
			<arguments>
			</arguments>
		</buildCommand>
	</buildSpec>
	<natures>
		<nature>org.eclipse.php.core.PHPNature</nature>
	</natures>
</projectDescription>

I tak też wyglądał. Czyżby strajk był poważniejszy niż to początkowo zakładałem? Nic to, szukam dalej. Pora na plik .buildpath.

<?xml version="1.0" encoding="UTF-8"?>
<buildpath>
	<buildpathentry kind="src" path=""/>
	<buildpathentry kind="con" path="org.eclipse.php.core.LANGUAGE"/>
</buildpath>

Jednak i tym razem wszystko wygląda poprawnie.

Zaniepokoiłem się nie na żarty i zacząłem układać czarne scenariusze od konieczności ponownej instalacji i konfiguracji wtyczek, na wywaleniu wszystkiego w diabły i zainstalowania NetBeansa. Wtem spowiło mnie ciepłe białe światło i szara istota z dużą głową z wielkimi czarnymi oczami wyszeptała mi do ucha – “sprawdź logi Eclipse’a”.

To było to. W katalogu workspace znajdują się metadane Eclipse’a, a między nimi plik .log, będący niemym świadkiem wszystkich Eclipsowych świństw. Wyczyściłem jego zawartość (uprzednio przygotowując kopię zapasową), a następnie zacząłem podglądać na żywo co się w nim dzieje. Uruchomiłem Eclipse i udawałem, że pracuję. Strajkujący od razu naprostowali łamistrajków. Na szczęście pozostał po tym haniebnym zdarzeniu ślad w postaci wyjątku zgłoszonego przez Javę. Winowajcą był plik model.index.db chowający się w katalogu C:\Users\batman\workspace\.metadata\.plugins\org.eclipse.dltk.core.index.sql.h2. Wykonałem kopię zapasową, usunąłem winowajcę i ponownie zbudowałem projekt. Bingo! Eclipse znowu podpowiada składnię! Kolejny raz korporacja pokonała pracujący w pocie czoła lud.

Autor wpisu: batman, dodany: 21.01.2011 08:00, tagi: php

Piąta odsłona PHP została zaprezentowana światu w roku 2004. Zmiany wprowadzone do języka były wręcz rewolucyjne. Programowanie obiektowe w PHP przestało budzić uśmiech politowania, a szereg usprawnień i nowych funkcjonalności robił ogromne wrażenie. Mimo iż od premiery “obiektowego PHP” minęło ponad sześć lat, nadal niektóre – nawet te podstawowe – funkcjonalności pozostają niezrozumiałe i albo kurzą się w zaciszu manuala albo są wykorzystywane w sposób wołający o pomstę do nieba. Taki właśnie los spotkał wyjątki.

Zanim zaczniemy poznawać wyjątki dostępne w ramach SPL, warto wiedzieć po co w ogóle one powstały. Ich powstaniu przyświecał jeden cel – możliwość sterowania przepływem aplikacji w obliczu błędu. A po naszemu – nawet jeśli coś nie zadziała, aplikacja nie wyłoży się koncertowo, tylko będzie próbowała działać w ograniczonym zakresie.

Poza standardową klasą Exception, będącą nadrzędną klasą dla wyjątków, w PHP (a dokładniej w SPL) mamy dostępnych kolejnych trzynaście klas wyjątków. Każda z nich powstała w innym celu.

BadFunctionCallException

Wyjątek BadFunctionCallException powstał w celu zasygnalizowania niepopranego wywołania funkcji. Co należy przez to rozumieć? Najprościej będzie to wytłumaczyć na przykładzie.

try {

	callMe();

} catch(BadFunctionCallException $e) {
	echo $e;
}

function callMe()
{
	$args = func_num_args();
	if($args < 2) {
		throw new BadFunctionCallException('Za mało argumentów');
	}
}

BadFunctionCallException można również rzucać w przypadku braku niepoprawnej nazwy funkcji do wywołania.

BadMethodCallException

Obiektowy odpowiednik poprzedniej klasy.

try {

	$foo = new Foo();
	$foo->niesitniejacaMetoda();

} catch(BadMethodCallException $e) {
	echo $e;
}

class Foo
{
	public function __call($method, $args)
	{
		switch($method) {
			case 'foo':
				/* do magic */
				break;
			default:
				throw new BadMethodCallException('Nie ma takiej metody');
		}
	}
}

DomainException

Najmniej zrozumiały i najmniej potrzebny (póki co) wyjątek dostępny w PHP. Wyjątek DomainException powinien zostać zgłoszony w momencie próby skorzystania z danych nienależących do bieżącej domeny. Jak na razie na temat tego wyjątku toczą się akademickie dyskusje, z których można dowiedzieć się, że np. obiekt Foo nie znajduje się w domenie dni tygodnia. W przypadku PHP nie spotkałem się jeszcze z praktycznym zastosowaniem tej klasy.

InvalidArgumentException

Wyjątek zgłaszany w momencie otrzymania niespodziewanego/niepoprawnego argumentu.

try {

	$foo = new Foo();
	$foo->bar('abc');

} catch(InvalidArgumentException $e) {
	echo $e;
}

class Foo
{
	public function bar($arg)
	{
		if(!is_numeric($arg)) {
			throw new InvalidArgumentException('Niepoprawny argument');
		}
	}
}

LengthException

Ten typ wyjątku zgłaszany jest w przypadku odebrania danych o niepoprawnej długości. Niepoprawna długość danych oznacza tutaj nieprawidłowy rozmiar odebranego pliku, błędną ilość danych przesłanych ze strumienia, czy też nieoczekiwaną wielkość tablicy.

try {
	$a = array(123, 234, 345);

	// z jakiegos powodu tablica musi zawierać dwa elementy
	if(count($a) != 2) {
		throw new LengthException('Niepoprawna wielkość tablicy');
	}

} catch(LengthException $e) {
	echo $e;
}

LogicException

Kolejny klasa wyjątku, z której nie będziemy zbyt często korzystać. Zgłaszany jest w momencie, gdy wyrażenie logiczne oznacza fałsz.

Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...

Autor wpisu: batman, dodany: 19.01.2011 08:00, tagi: php

Przed kilkoma dniami Microsoft powiadomił świat o wydaniu stabilnej wersji WebMatrixa. Premiera odbyła się w zaciszu bloga IIS i nie wywołała fali zachwytów ani krytyki. Twitter nie utonął w zalewie wiadomości, a blogi na spokojnie przyjęły pojawianie się… No właśnie. Co się pojawiło? Jeśli miałbym krótko opisać czym jest WebMatrix musiałbym sparafrazować akronim WAMP (LAMP) [...]

Autor wpisu: batman, dodany: 18.01.2011 08:00, tagi: php

W dzisiejszej części ASP.NET MVC dla programistów PHP ponownie zajmiemy się kontrolerami. Tym razem poznamy sposoby przekazywania danych do kontrolera. W przeciwieństwie do Zend Framerowka, w którym operujemy tylko na obiekcie request, ewentualnie na “gołych” danych pobranych z superglobalnych tablic, ASP.NET MVC oferuje kilka dodatkowych sposób odbierania danych. Konteksty Najprostszym sposobem odebrania przychodzących danych jest [...]

Autor wpisu: sokzzuka, dodany: 18.01.2011 00:13, tagi: php, doctrine

Ostatnio wiele mówi się o bazach danych NoSQL (NotOnlySQL). Jako, że nie zauważyłem nic w polskim światku PHP na ten temat, stwierdziłem, że pora wypełnić tę lukę i zagłębić się w temat.

Czym są bazy NoSQL ?

Jak podpowiada nam ciotka wikipedia. Bazy NoSQL są to bazy danych, które nie są klasycznymi relacyjnymi bazami danych jakie znamy (MySQL,PostgreSQL etc). Termin NoSQL nie odpowiada żadnym wspólnym cechom tych baz, a raczej temu, że na pewno nie są one RDBMS-ami.

Popularne bazy NoSQL są magazynami danych. W przeciwieństwie do klasycznych odpowiedników nie posiadają stałego schematu, a dane przechowują jako pary klucz – wartość.

Jako przykład dla naszych rozważań wybrałem bazę MongoDB. Dlaczego akurat tą? Istnieją dwa główne powody. Pierwszym z nich jest to, że twórcy projektu Doctrine, stworzyli również ORM w wersji dla tej bazy. Drugim natomiast to, że baza jest szczególnie przyjazna dla webdeveloperów.

Jej przyjazność objawia się tym, że baza żyje i oddycha Javascriptem. Shell przyjmuje komendy tylko w tym języku. Natomiast odpowiedź na zapytania zwracana jest w formacie JSON. Ciekawą rzeczą, może mniej dla webdeveloperów a bardziej dla zwolenników funkcyjnego podejścia do programowania, jest to, że baza wspiera rozproszony model obliczeń oparty na paradygmacie map-reduce. Na roztrząsanie tego tematu czas przyjdzie później. Natomiast teraz przejdźmy do części praktycznej.

Instalacja

  1. Na stronie projektu, wyszukujemy odpowiednią dla nas paczkę i ściągamy
  2. Rozpakowujemy ją w dowolnym katalogu
  3. W głównym katalogu dysku tworzymy folder data/db
  4. W katalogu gdzie rozpakowaliśmy paczkę z bazą odpalamy plik bin/mongod.exe
  5. Z sourceforge ściągamy driver do php w postaci rozszerzenia (w archiwum są dll-e dla odpowiednich wersji php)

W tej chwili mamy już działającą bazę MongoDB. Kolejnym krokiem będzie zaprzęgnięcie Doctrine’a do pracy.

Struktura projektu:

|--application
|---model
|----MailBox
|------Message.php
|-----User.php
|--lib
|---vendor
|----Doctrine
|--proxies
|--index.php

Do katalogu Doctrine ściągamy ODM (Object Document Mapper).

Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...

Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.