Archive for the 'php' Category

PHP fájlok védelme .htaccess-szel

Adott az alábbi felállás:

#apache rewriteunk a következő:

/minta => /modules/mod_minta.php
/minta/1 => /modules/mod_minta.php?q=1

## ki hogy vitelezi ki, teljesen lényegtelen, nézzen ki pl így:
RewriteRule ^minta(/.*)?$ /modules/mod_minta.php?q=$1 [QSA,L]

## $_GET['q'] feldolgozása phpban történik

Tehát a http://example.com/minta url hívásakor valójában a http://example.com/modules/mod_minta.php hívódik meg és hasonlóan a http://example.com/minta/1 esetén a http://example.com/modules/mod_minta.php?q=1

Tiltsuk le a következő linket: http://example.com/modules/mod_minta.php?q=1. Tehát a címsorba közvetlenül írva adjon valami hibát, de semmiképpen se futtassa le a mod_minta.php-t.

Több lehetőség van:

A modul(ok) elejére beírkáljuk:

 if(eregi('mod_minta.php', $_SERVER['REQUEST_URI'])) {
	header('HTTP/1.0 403 Forbidden');
	exit;
}

Egyszerű, és ronda megoldás. Minden mod_minta.php meghíváskor lefut, az esetek 99.9999%-ában feleslegesen.

Sokkal szebb megoldás a következő kettő…

  • Adjunk rá 404-es hibát:
    RewriteCond %{THE_REQUEST}      ^(GET|HEAD|POST)\ /modules/mod_minta\.php
    ## a mod_404.php kezeli a 404-et, ki hitte volna, ezt korábban már rewriteoltuk
    RewriteCond %{REQUEST_URI}  !^/modules/mod_404\.php$
    RewriteRule $ /404 [L]
    

    Ebben az esetben csak a mod_404.php-t tudja elérni közvetlenül, más nem. Ezt az egyet engedni kell, mert különben végtelen rekurzióba fut az apache. Ilyenkor a címsor nem változik, nincs redirect.

  • Dobjuk rá a 404-es oldalra
            RewriteCond %{THE_REQUEST}      ^(GET|HEAD|POST)\ /modules/mod_minta\.php
            RewriteRule $ /404 [R=301,L]
    

    Itt redirect lesz, ebben az esetben semmilyen file nem érhető el közvetlenül.

A kiprobált környezetben minden url rewriteolva van, tehát közvetlenül egy php file sincs meghívva. Ebben az esetben a két megoldás valamelyikét javasolt a rule-ok legvégére tenni, mert csak akkor jut el idáig a feldolgozás, ha korábban egy szabály sem illeszkedett. Ha ez sem illeszkedik akkor sima 404 a végeredmény.
A 404 megfejtése nagyon egyszerű:

ErrorDocument 404 /404
######
######
######
RewriteRule ^404$  /modules/mod_404.php [QSA,L]

Kiegészítve a RewriteCond-ot:

RewriteCond %{THE_REQUEST}      ^(GET|HEAD|POST)\ /modules/mod_.+\.php

Tehát az összes mod_-dal kezdődő php file közvetlen elérésének a tiltása ilyen. :)

Hány hétből áll egy év?

Egy kérdéses évben lelendő hetek számát megkapjuk, ha az adott évet áthajtjuk a következő függvényen:

function getweeksnumber($year){
    return max(date('W', mktime(0,0,0,12,25,$year)), date('W', mktime(0,0,0,12,31,$year)));
}

Ötletes, nemde?

PHP: session_id() nem működik

Egy napja fennálló probléma, megoldást nem találtam még rá, segítsetek. A következő van:
A session_id(’1234566′); beállítja a sid-et a megadottra, ezután session_start-tal ergo “felkaphatunk” egy már meglévő sessiont. Lássunk rá egy tesztkódot:

      if (isset($_GET['destroy'])) { ## csak a játszásiból
            session_start();
            setcookie(session_name(), '', time()-42000, '/');
            session_destroy();
            exit;
      }
      if (isset($_GET['setsid'])) {
            session_id($_GET['setsid']);
            session_start();
            echo (session_id()==$_GET['setsid'] ? 'ugyanaz':'nem ugyanaz').'';
            if (!empty($_SESSION['test'])) {
                echo $_SESSION['test'];
            } else {
                echo 'nem mukodik.';
            }
            exit;
      }
      session_start();
      $_SESSION['test'] = 'test';
      echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?setsid='.session_id().'';
      echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?destroy';

Tehát indítok egy sessiont, test változóba test érték, majd kiíratom a linket, amit egy másik böngészőbe betéve “test” feliratnak kéne megjelenni. Ehelyett az jelenik meg, hogy ‘nem mukodik.’ A session id-t megkapja, az lesz, aminek kell lenni, de a $_SESSION mégis üres. A fenti script működik PHP 5.2.6 alatt (átkapja a sessiont a másik böngésző), de 5.2.10 alatt nem(üres a $_SESSION). A php.ini elvben egyezik a két verzióban.

Ötlet?

E-mail ellenőrzés php-ben

Korábban beszéltünk az adatvalidálásról, de sosem lehet elég a jóból. Még mindig akad olyan felhasználó, aki képes kijátszani az emberi értelem határait, és elköveti azt a galádságot, hogy helytelen e-mail címet ír be. Különösképp arra az esetre gondolunk, mikor (kimondva) halvány fingja nincs az e-mail címéről, stbstb. fremail.com, hotmail.hu, citrommail.com és sorolhatnánk. Read more »

CMS rendszer - 200 millió - Kell?

Piacra bocsátom hát az akár állami szerveket is kiszolgálni képes portálomat, tartalomkezelőmet nem kevesebb, mint 200 milló forintért. Állami szerveket csak 100 milló felárért képes mégiscsak, mert iszonyat indokoltan meg tudom indokolni, hogymárpedig erre szükség van. Az ár nem taralmazza a kiszolgáló szoftverek kifejlesztését (apache, php, mysql, linux ), továbbá a futtató hardverkörnyezet fejlesztését sem. Plusz milliárdokért lehetőség van Micro$oft operációs rendszerrel reszelt portálrendszer megvásárlására is, ez esetben az éves üzemeltés költségek várhatóan duplájára rugnak majd.

Read more »

TV Kommentár

Szerdán kezdtem el, esténként írtam, mára lett kész. Egy minimal alkalmazás a televízióba történek kommentálásához. Lehet anyázni, fikázni, szidni a bírót, Magdi anyust kiröhögni. Látjuk az aktuális műsorokat (balra), a következőket  (alatta) és azokat amikhez éppen hozzászóltak (jobbra). Csak rá kell kattintani a műsor nevére, és már lehet is írni a véleményt. Van mezei chat rész is.

Az oldalt egy db js hajtja, prototype és script.aculo.us alapokon. Az alkalmazás csak firefox alatt használható. Az adatokat 4 másodpercenként kérjük, a választ JSON-ban kapjuk, és dobáljuk szét az adatokat a megfelelő helyekre. RSS is lesz, majd.

Adatvalidálás

errorAz adatvalidálást az Úr találta ki azzal, hogy megadta nekünk a juzert, aki vagy nem akarja, vagy alapból nem tudja mit kell kitölteni a formon, vagy milyen formátumú adatot kell beírni. Bemutatunk ehhez egy könnyen kezelhető validátor classt, és egy eljárást, hogy is használjuk.

Példánkban kérjünk be:

  • e-mail címet: szükséges ($email)
  • webcímet: opcionális ($web)
  • születési dátum: opcionális ($bday) //2000-03-03
  • a user nevét: szükséges ($name)

A változókba bekerültek az értékek, döntsük el, hogy helyesek-e, vagy újra be kell kérni.
Read more »

CSS tömörítés

Mi másra lehetne alkalmas egy ilyen verőfényes vasárnap délután, mint a CSS-ek betömörítésére. Ebből az alkalomból összedrótoztam egy kis PHP scriptet, amit ideális esetben mindig akkor fogunk lefuttatni, amikor a dev környezetből kipakoljuk a művet élesbe.

<?php

$tplDir = '/var/www/site/';

// definiáljuk a css-eket
$fileArr = array(
	'scripts/validation/validation.css',
	'scripts/scriptaculous/autocomplete.css',
	'templates/common.css',
	'templates/content/module.css',
	'templates/pages/module.css',
);

foreach($fileArr AS $file) {

	// ez lesz az új fájlok kiterjesztése
	$compressedFile = str_replace('.css', '.compressed.css', $file);

	$bc = $env->getFileContent($tplDir.$file); // kiszedjük a $bc változóba a css-ek tartalmát (fopen, curl, akármi...)

	if($bc) {
		$bc = preg_replace('!/\\*[^*]*\\*+([^/][^*]*\\*+)*/!', '', $bc);
		$bc = preg_replace('![\\n\\r\\t]!', "", $bc);
		$bc = preg_replace('! *([\\{\\};,:]) *!', "$1", $bc);
		$bc = preg_replace('!\\}!', "}\\n", $bc);

		// sortörések + import css-ek fájlneveinek cserélése
		$bc = str_replace(array("\\r\\n", "\\r", "\\n", ".css"), array('', '', '', '.compressed.css'), $bc);

		touch($tplDir.$compressedFile);
		$f = fopen($tplDir.$compressedFile, "w");
		fwrite($f, $bc);
		fclose($f);
	}

}

?>

Beolvassa egyenként a fájlok tartalmát, szépen kiszedi a felesleges szóközöket, sortöréseket, meg minden egyebet, majd az így létrejött új fájlok kapnak egy .compressed.css kiterjesztést - ezekre hivatkozunk az éles site HTML kódjában, az eredetiek pedig megmaradnak a fejlesztéshez.

Házi feladat: ugyanezt JavaScriptre.

Így készült egy videomegosztó

Csináltam egy videomegosztót. Nem nagy szám. Van már n db. De ha azt vesszük, hogy egy “garázsba” készült, magam készítettem, egyedül (programozás, server háttér), meetingek, milliók nélkül, akkor igen is nagy szám. Nekem az. Az oldal szinte fogad minden manapság menő viccformátumot (swf, pps, video, szöveg, képek). Statisztikák, érdekességek a képtelenség.hu technikai hátteréről. Read more »

Google Maps a TinyMCE-ben

Néha elkerülhetetlen különböző webmédia tartalmak beillesztése a TinyMCE-be, vagy egyéb wysywig editorba. Lehet próbálkozni a google maps iframes megoldásával (első mentésig működik is), vagy a youtube embed-jével, vagy egyéb más “különleges” kódokkal. Youtube-ra létezik plugin (nem próbáltuk), mapsre nem találtunk megoldást. Erre eszünkbe jutott egy okos nagyszerű hülye ötlet, mely vélhetően nem a legszebb megoldás, de egyszerűsége miatt gyakorlatilag bármit megeszik.
Read more »

Következő oldal »