Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM

Autor wpisu: JoShiMa, dodany: 23.01.2011 22:55, tagi: skrypty

Po przeanalizowaniu kodu standardowego nagłówka i standardowego headera skórki o nazwie “Classic” pora zająć się strukturą głównego pliku czyli index.php. Jak widać na schemacie pokazanym w artykule o strukturze szablonu WordPress jest to w zasadzie najważniejszy (w połączeniu z nagłówkiem i stopką) plik tej struktury. Zawarty w nim skrypt jest wywoływany zawsze, gdy nie [...]

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 [...]
Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.