Archívum

A(z) ‘PHP’ kategória archívuma

Symfony – Telepítés

2011. okt. 23. 17:03 Nincsenek hozzászólások

Elkezdem megtanulni a Symfony keretrendszer használatát. A tanulás folyamatát itt a blogon fogom rögzíteni, részben azért, ha más is belefog, akkor egyszerűbb dolga legyen, másrészt nekem is jó a könnyebb visszakereshetőség miatt, ha szükségem lenne valami információra később.

Nézzük akkor magát a telepítést és azt azt követő konfigurációt.

Először létrehozunk egy vhostot a szerverünkön, illetve Windows alatt beírjuk a hosts fájlba, nos nekem így néz ki:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<VirtualHost 127.0.0.1>
    ServerName www.starfw2.lh
    ServerAlias starfw2.lh
 
    ServerAdmin root@localhost
    DocumentRoot D:/web/siteskeleton/starfw2
 
    <Directory D:/web/siteskeleton/starfw2>
	AllowOverride All
	Order allow,deny
	Allow from all
    </Directory>
 
	ErrorLog "logs/www.starfw2.lh-error.log"
    CustomLog "logs/www.starfw2.lh-access.log" combined
 
</VirtualHost>

Azért starfw2, mert úgy tervezem, hogy ez lesz a második keretrendszer, amit mélységeiben megismerek és hosszútávon fogom használni, az első egy Kohana volt, amit elég szépen sikerült megérteni és a saját igényeimnek megfelelően alakítani, illetve modulokkal bővíteni, így az általam módosított verziót starfw-nek hívtam.

No, ha megvan a hosts fájl bejegyzés is, akkor nincs más dolgunk, mint a projekt honlapjáról letölteni a csomagot. Letöltés után csomagoljuk ki a vhostunk gyökérkönyvtárába.

Meg is jelenik a Symfony üdvözlő oldala, mely felsorolja a javasolt beállításokat. Lássuk, hogy mit találunk itt.

  1. “Set short_open_tag to off in php.ini.” – ezt nem fogju
  2. “Install and enable the intl extension.”
    Ezt engedélyezhetjük a következőképpen:
    A d:\xampp\php\ könyvtárban lévő ICU .dll fájlkat másoljuk be a Windows könyvtárba. Ezek azok:
    icudt*.dll
    icuin*.dll
    icuio*.dll
    icule*.dll
    iculx*.dll
    icutu*.dll
    icuuc*.dll
    Ha ez megvan, akkor egészítsük ki a php.ini azon részét, ahol betölti a bővítményeket:
    extension=php_intl.dll (persze az ext könyvtárban legyen ott a dll)
    Apache restart és máris megy.
  3. “Install and enable a PHP accelerator like APC (highly recommended).” – ha nagyon ajánlott, akkor tegyük fel ezt is:
    Töltsük le innen a megfelelő csomagot.
    Nálam ez a php_apc-3.1-5.3-svn20101116-vc9-x86.zip. Ezt töltsük le és csomagoljuk ki a php ext könyvtárába a dll-t. Majd a php.ini-hez adjuk hozzá:
    extension=php_apc.dll
    Apache restart és máris megy.

Ha mindezzel megvagyunk, akkor a kezdőképernyőn nyomjunk a Configure your Symfony Application online linkre. A következő képernyőn adjuk meg a mysql kapcsolat adatait, de előtte hozzunk létre egy adatbázist, nálam ez starfw2_lh lett. Ha nyomunk egy “Next Step”-et, majd mégegyet, akkor meg is vagyunk és van egy telepített és beállított Symfony 2.0.4-ünk!

Categories: PHP Tags: , ,

HTTP auth PHP-val CGI módban

2011. okt. 20. 18:39 Nincsenek hozzászólások

Ha olyan szerveren szeretnénk HTTP autentikációt, amin cgi módban fut a PHP, ott a következőkkel kell kiegészíteni a .htaccess fájlunkat:

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]

Majd a PHP fájlunk elejére:

$config['admin_username'] = "root";
$config['admin_password'] = "root";
 
list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
 
if (!($_SERVER['PHP_AUTH_USER'] == $config['admin_username'] &amp;&amp; $_SERVER['PHP_AUTH_PW'] == $config['admin_password'])) {
    header("WWW-Authenticate: Basic realm=\"domain.tld admin\"");
    header("HTTP/1.0 401 Unauthorized");
	header('Content-Type: text/html; charset=utf-8');
    echo 'Hozzáférés megtagadva.';
    exit;
}

Sok sikert!

Categories: PHP Tags: , , ,

PHP DoS probléma

2011. feb. 2. 20:40 Nincsenek hozzászólások

Ismert hogy az alábbi kóddal végtelen ciklusba lehet hajtani a processzort, melynek következtében összeomlik a kiszolgáló. Az alábbi szkripttel tesztelhetjük rendszerünket:

phpbug.txt

A scriptet Johannes Schlueter készítette.

Categories: PHP Tags:

Karakterkészlet beállítás .htaccess-ből

2010. szept. 15. 18:39 1 hozzászólás

Előfordulhat, hogy a szerverbeállítástól függetlenül át szeretnénk átállítani egy könyvtárban lévő fájlok karakterkódolását. htaccess-re azért lehet szükség, mert eltérő szerverbeállítás esetén nem elégséges, ha a szokásos párost átállítjuk:

  1. Fájlok kódolása UTF-8.
  2. A <head>-ben ott a <meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />

Szóval beteszünk az adott könyvtárba egy .htaccess-t, melynek tartalma legyen az alábbi:

1
AddCharset UTF-8 .html

Mondjuk mivel az UTF-8 az elfogadottabb, használtabb kódolás, ezért így erre valószínűleg nem lesz szükségünk, de ha latin2-es kódolásra lesz szükségünk, akkor is működik a fenti.

Categories: PHP Tags: , ,

PHP scriptek időzítése Cronnal

2010. szept. 12. 17:13 1 hozzászólás

Ha szükségünk van scriptek időzített futtatására, akkor a cront tudjuk segítségül hívni Linux alatt, mely lehetőséget ad rendszeresen elvégzendő feladatok ütemezésére.

Helyileg az etc/cron.d helyre tehetjük a scriptet, melyben beállítjuk, milyen időközönként fusson le a PHP script. Egy sora a következőképp néz ki:

1
*/5 * * * *   root    /usr/bin/wget -q -O - http://domain.tld/cron/meghivando_script.php >/dev/null

Itt balról jobbra haladva a végrehajtás idejének a következő egységeket adhatjuk meg: perc, óra, nap, majd a hónap és a hét egy napja (0=Vasárnap).

Tehát a fenti esetben a script minden 5 percben lefut.

Egy képpel szemléltetve:

Ha nem szeretnénk megadni egy értéket, akkor annak oszlopába “*”-ot írunk. Amennyiben szükséges több adatot megadni egy oszlopban, úgy vesszővel választjuk el az értékeket. Ha intervallumot adunk meg, akkor azt kötőjellel választjuk el. Se a kötőjel két oldalára, se a vesszők után nem rakhatunk szóközt.

Még egy példa: Ha minden nap reggel 8kor szeretnénk futtatni a scriptet, akkor írjuk ezt:

1
0 8 * * *   root    /usr/bin/wget -q -O - http://domain.tld/cron/meghivando_script.php >/dev/null

Elég egyértelmű. Két fontos dologra hívnám még fel a figyelmet:

1. A sorok végén a kimentek a dev/null-ra vannak irányítva, ami azt jeleni, hogy a sima output (a level 1-es) üzenetek nem jelennek meg, azonban a level 2 uzenetekrol (hibauzenetek) jelentest kapunk. Ha minden üzenetet el szeretnénk nyomni, akkor használjuk a “&>/dev/null” formát. Ha egy fájlba szeretnénk küldeni a kimentet, akkor azt így tehetjük meg:

1
0 12 * * *   root    /usr/bin/wget -q -O - http://domain.tld/cron/meghivando_script.php >/home/starz3r0/cron_tmp.log

2. Az fájl végére tegyünk pár soremelést a nem kívánt mellékhatások (pl. hogy biztosan figyelembe vegye az utolsó definíciót is) elkerülése céljából.

Categories: Linux, PHP Tags: , , ,

URL-kódolás

2010. júl. 12. 20:27 Nincsenek hozzászólások

A 1738-as RFC leirja, hogy az URL-ekben csak alfanumerikus karakterek (0-9a-zA-Z), speciális karakterek (–_.~) és fenntartott karakterek (!*’();:@&=+$,/?%#[]) szerepelhetnek. Ergo szükségünk van arra, hogy az ékezetes karaktereket kódoljuk, ha weben át szeretnénk letölteni olyan fájlokat, melyeknek a neve UTF-8 karaktereket tartalmaz.  Erre a PHP urlencode függvényét tudjuk használni vagy az alábbi oldalon szereplő URL encodert. Nem mellesleg ez utóbbi részletes leírást is találunk a témáról.

Categories: PHP, Web Tags: ,

Bankkártyás fizetés és Apache

2010. júl. 1. 17:54 Nincsenek hozzászólások

Ma olyan történt, ami elég rafinált ahhoz, hogy könnyen elfelejtse az ember. Szóval munkahelyen történt, hogy az eddig teljesen megfelelően működő OTP-s bankkártyás fizetés elkezdett rendetlenkedni, egészen odáig, hogy Operán és Chrome-on kívül nem volt hajlandó más böngésző alól működni. Végül a banki rendszert fejlesztőktől érkezett a megoldás, miszerint IE 6-7-8-ban csak akkor működik, ha az apache mod_deflate modulja ki van kapcsolva. Kikapcsoltuk és ugyanez oldotta meg Firefoxban is a problémát (3.6.6 verzió alatt).

Categories: PHP Tags: ,

PHP 5.2.9 és PHP 5.3 egyszerre

2010. jan. 10. 16:36 3 hozzászólás

A probléma hasonló egy régebbi gondhoz, amikor még sok PHP 4 alatt fejlesztett alkalmazás volt. Ezt a XAMPP egy PHP switcherrel küszöbölte ki, azonban mivel már régóta (2007. december 31.) megszűnt a PHP 4 támogatása, úgy a XAMPPból is már jó ideje eltűnt ez a lehetőség. Az új gond számomra a XAMPP 1.7.2 verziója jelentette, melyben már PHP 5.3 volt, amiben azonban már néhány függvény nem támogatott, mint pl. az eregi függvények. Néhány régebben írt alkalmazásomnál viszont szükség van még ezekre (pl. ahol a phpThumbot használom…), így került elő az igény arra, hogy egymás mellett futattható legyen mindkét verzió. A megvalósítás nem a legszebb, de egyszerű és müködőképes.

  1. Telepítjük a legfrissebb XAMPP-ot (1.7.3) a “D:\xampp” könyvtárba.
  2. Telepítjük az 1.7.1-es XAMPP-ot a “D:\xamp171″ könyvtárba. Ez az utolsó verzió, amelyben a PHP 5.2-es szériája van.
  3. Az 1.7.1-es verzió könyvtárában a httpd.conf fájban átírjuk a DocumentRoot sort, hogy az 1.7.2-es htdocs könyvtárára mutasson. (Illetve opcionálisan ha van beállítva mysql jelszó, akkor a phpmyadmin konfigjából a control user passwordot bemásoljuk az újabban telepített XAMPP verzió vonatkozó helyére és a phpmyadmin felületén a Privilégiumok fülön a pma felhasználóhoz beírjuk még egyszer a kimásolt jelszót.)
  4. A futattatás ezek után egyszerű. Elindítjuk az 1.7.2 control paneljét, ott elindítjuk a MySQL kiszolgálót és minden mást, amire szükségünk van. A control panelből kilépünk, majd az 1.7.1 control paneljéből pedig futattjuk az Apache-ot.
Categories: PHP Tags: ,

XAMPP, mail függvény és a T-Home

2010. jan. 5. 00:25 8 hozzászólás

Ma szembesültem vele, hogy nem is olyan egyszerű az élete annak, aki localhost-ról szeretné küldözgetné a maileket mindenféle SMTP beállítások nélkül. Pláne, hogy néhánynál már nem is elég megadni az SMTP szervert és portot, hanem még authentikálni is kell. Na jön a megoldás ennek elkerülésére.

  1. XAMPP 1.7.2-öt telepíteni.
  2. php.ini-ben “sendmail_from = postmaster@localhost” sor elől a kommentet kivenni.
  3. Mercury-t vagy valamilyen SMTP szervert a 25-ös porton elindítani.
  4. My T-Home felületen belépni és az SMTP portszűrést kikapcsolni.
  5. Modemet áramtalanítani, újraindítani.

Aki nem T-Home-os, annak az az utolsó két lépést kihagyhatja. És máris megy! Persze ezeken kivül még lehet jópár buktató, de ha van okosabb ötlet vagy ha nem megy valami, akkor a hozzászólások között szívesen segítek annak aki igényli.

Update: Ugyan minden szép és jó látszólag, de hogy a PHPMailer-t is tudjuk használni, a következőképp kell eljárni:

  1. A MercuryE End-to-end STMP Client beállításainál a Name Servers mezőbe írjuk be a szolgáltatónk által biztosított DNS szerver címét vagy ha router mögött vagyunk akkor a router IP-jét, esetemben a 192.168.1.254-et.
  2. Ezután a következő SMTP beállítással müködni is fog a mail küldés bármilyen hostra:
    1
    2
    3
    4
    5
    
    $mail->IsSMTP();
    $mail->SMTPDebug = 0;
    $mail->SMTPAuth = false;
    $mail->Host = "localhost";
    $mail->Port = 25;

Ergo a lényeg, hogy authentikáció már nem szükségeltetetik.

Sokan a MercuryC SMTP relaying kliens használatát javasolják, nekem azonban nem sikerült localhoston megfelelően müködésre bírni.

Categories: PHP, Web Tags: , ,

Feltöltött fájl kiterjesztése

2009. nov. 28. 19:36 Nincsenek hozzászólások

PHP-ban történő fájlfeltöltéskor ugyan a $_FILES['userfile']['type'] értéke a feltöltött fájl típusa, ami megfelelő nekünk érvényesség ellenőrzésre, azonban ha mégis szükségünk a fájl kiterjesztésére, akkor használhatjuk az alábbi kódot:

1
2
3
function getFileExtension($file_name) {
   return substr(strrchr($file_name,'.'),1);
}
Categories: PHP Tags: ,