Warning: file_get_contents(http://graph.facebook.com/http://youthcoders.net/index.php): failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden in /var/www/old-yc/plugins/content/addthis.php on line 38
Instalacja pakietu z repozytorium PEAR Drukuj
Ocena użytkowników: / 0
SłabyŚwietny 
Wpisany przez Patryk yarpo Jar   
piątek, 16 kwietnia 2010 17:11

W tym artykule mam zamiar pokazać, jak szybko instalować przydatne pakiety z repozytorium PEAR. Jeśli jeszcze nie posiadasz zainstalowanego repo, to zobacz jak zainstalować PEAR.

 

Przykładowe ropozytorium

Spróbujmy pobrać Math_Complex. Pakiet pozwalający operować na liczbach zespolonych. W wierszu poleceń:

pear install Math_Complex

W wyniku pokazuje się [u mnie, może u Ciebie będzie inaczej]:

Failed to download pear/Math_Complex within preferred  state "stable", latest release is version 0.8.5, stability
"beta", use "channel://pear.php.net/Math_Complex-0.8.5" to install
Cannot initialize 'channel://pear.php.net/Math_Complex', invalid or  missing package file
Package "channel://pear.php.net/Math_Complex" is not valid
install failed

No, jakby nie patrzeć, coś nie tak. Spokojnie, spróbujmy tak:

pear install Math_Complex-0.8.5

W wyniku otrzymuję:

D:\programy\wamp\bin\php\php5.2.9-2>pear install  Math_Complex-0.8.5
WARNING: channel "pear.php.net" has updated its protocols, use  "channel-update pear.php.net" to update
Did not download dependencies: pear/Math_TrigOp, use --alldeps or  --onlyreqdeps to download automatically
pear/Math_Complex requires package "pear/Math_TrigOp" (version >=  1.0)
No valid packages found
install failed

Znowu coś nie tak, ale już bliżej :). Idziemy za ciosem i robimy o co nas proszą:

D:\programy\wamp\bin\php\php5.2.9-2>pear  channel-update pear.php.net
Updating channel "pear.php.net"
Update of Channel "pear.php.net" succeeded

Może teraz się uda:

pear install Math_Complex-0.8.5
Did not download dependencies: pear/Math_TrigOp, use --alldeps or  --onlyreqdeps to download automatically
pear/Math_Complex requires package "pear/Math_TrigOp" (version >=  1.0)
No valid packages found
install failed

No, niestety nie. Ale jesteśmy blisko, bo już takie polecenie załatwi sprawę:

pear install --alldeps Math_Complex-0.8.5
downloading Math_Complex-0.8.5.tgz ...
Starting to download Math_Complex-0.8.5.tgz (40,930 bytes)
...........done: 40,930 bytes
downloading Math_TrigOp-1.0.tgz ...
Starting to download Math_TrigOp-1.0.tgz (1,613 bytes)
...done: 1,613 bytes
install ok: channel://pear.php.net/Math_TrigOp-1.0
install ok: channel://pear.php.net/Math_Complex-0.8.5

Łałałibi! Czas zatem wykorzystać nasz nowo zainstalowany pakiet.

 

Wykorzystanie pakietów z PEAR

Jak być może pamiętasz, zezwoliłeś na zmienę w pliku 'php.ini'. Dzięki temu instalowane pakiety PEAR będą dostępne na twoim lokalnym serwerze, tak jakbyś je miał w każdym katalogu. Nie musisz podawać żadnej ścieżki do nich. Oto przykład, umieść go w pliku index.php w katalogu głównym twojego serwera:

require_once '/Complex.php';

Po uruchomieniu serwera (jeśli podczas instalacji PEAR był włączony należy go zrestartować), i wpisaniu adresu "http://localhost/index.php" zobaczysz coś takiego:

Warning:  require_once(Complex.php) [function.require-once]:  failed to open stream: No such file or directory in F:\vhosts\mc\index.php  on line 2
Fatal error:  require_once() [function.require]: Failed  opening required 'Complex.php'  (include_path='.;c:\php\includes') in F:\vhosts\mc\index.php  on line2

Co znowu?!

 

Konwencja nazewnicza PEAR

W PHP do wersji 5.3 nie było przestrzeni nazw. W repozytorium PEAR wprowadzono coś co pozwalało na im naśladowanie. Otóż, klasa składała się z kilku członów. Jak np. "Math_Complex". Jednak tylko "Complex" odnosi się bezpośrednio do klasy, całość wcześniej pozwala na określenie położenia danej klasy w strukturze pakietów. Czyli Math/Complex. Zobaczmy tak:

require_once 'Math/Complex.php';

Dla Wampa (być może innych serwerów też)

W przypadku mojego Wampa nadal był błąd. Okazało się, że posiadam dwa pliki 'php.ini'. Jeden w katalogu PHP, drugi w katalogu Apache. W katalogu PHP zostało dodane:

;***** Added by go-pear
include_path=".;D:\programy\wamp\bin\php\php5.2.9-2\pear"
;*****

W pliku `.../Apache/Apache2.2.11/bin/php.ini' musiałem dodać taką linię ręcznie:

; Windows: "\path1;\path2"
;include_path = ".;c:\php\includes"
include_path=".;D:\programy\wamp\bin\php\php5.2.9-2\pear"

Po tej zmienie i restarcie serwera wszystko działało.

Działa. Jak miło :). Tzn, póki co nie ma błędów.

 

Działający przykład

Jeśli wykonałeś wszystkie wcześniejsze kroki, to już ten kod powienien się wykonać:

<?php
require_once 'Math/Complex.php';
 
$oMc = new Math_Complex(12.3, 1.0);
echo "Jestem liczbą zespoloną. Moja część rzeczywista to: " . $oMc->getReal() . ", a część urojona wynosi " . $oMc->getIm();

Powyższy kod powinien zwrócić:

Jestem liczbą zespoloną. Moja część rzeczywista to: 12.3, a część  urojona wynosi 1