php - 2006 - 10 megfelelő bejegyzés.

Mutass mindent

Jelöld be, hogy főbb mely kategóriákat akarod olvasni, vagy ha csak egyet: kattints a nevére.


mindet
jan
feb
már
ápr
máj
jún
júl
aug
sze
okt
nov
dec
2019
-
-
-
-
-
-
-
-
-
-
-
2018
-
-
-
-
-
-
-
-
-
-
-
2017
-
-
-
-
-
-
-
-
2016
-
-
-
-
-
-
-
-
-
-
-
2015
-
-
-
-
-
-
-
-
-
-
2014
-
-
-
-
-
-
-
-
2013
-
-
-
-
-
-
-
-
-
-
-
2012
-
-
-
-
-
-
-
-
-
-
2010
-
-
-
-
-
-
-
-
-
2009
-
-
-
-
-
-
-
-
-
-
-
2008
-
-
-
-
-
-
-
-
-
-
-
2006
-
-
-
-
-
-
-
-
2004
-
-
-
-
-
-
-
-
-
-
-
Haszprus

Spamlog

©   Haszprus   |   fejlesztés php reklám

Spamlog

A cucc naponként egy text/xml adatbázist dolgoz fel, amiben el vannak mentve a spamküldés részletes körülményei. Ebből a logolásból egyébként sok érdekes tapasztalatra tehetünk szert, így pl. az alábbiakra:

  • A kommenteket (egy részüket legalábbis) egyértelműen valami spambot (szoftver) hagyja, mivel előfordulnak a kitöltött mezők között olyanok is, amik már rég más névre hallgatnak (így pl. az anon_nick neve régóta vendeg_nev, mégis jönnek spamek kitöltött anon_nick mezővel - érdemes hát betenni a szűrési feltételek közé azt, hogy amennyiben van anon_nick a $_REQUEST-ben, akkor nyilvánvalóan spammel van dolgunk).

  • Javascriptet a legritkább esetben futtatják le, ez egyrészt következik a fentiből, másrészt a logban látható, hogy a javascript által létrehozott mezők nincsenek kitöltve.
  • Értelmi képességekkel nem rendelkeznek, a noscript esetén megjelenő szorzást nem végzik el, az eredmény helyére gyakorta egyéb szöveget vagy reklámurl-t pakolnak.
  • Gyakran üres kommentet próbálnak meg beküldeni.
  • Vannak annyira primitív botok akik a pw nevű input mezőbe is url-t próbálnak beírni aztán csodálkoznak hogy nem jelenik meg a hozzászólásuk…
Haszprus

Überlogger

©   Haszprus   |   fejlesztés php

Na szóval itten gondolkodtam hogy miként lehetne backupolni a bejegyzéseket, de csak szépen finoman, abban bízva, hogy remélhetőleg sosem lesz a backupra szükség.

Először arra gondoltam, egy fájlba szépen kiírom a bejegyzések szöveg mezőjét beküldéskor, oszt jóvan.

Második nekifutásra azonban készítettem egy functiont ami xml-be kiírja a bejegyzéshez kapcsolódó összes adatot, de nemcsak itt használható, hanem bárhol, rekurzívan egy akár többszíntü arrayt kinyom egy gyönyörüen formázott plain text alapú xml fájlba.

/**
 * rekurzívan xml-be fejt egy akár többszíntü array-t
 */
function arrayToXML($array, $level = 0) {
   $return = "";
   $indent = "";
   for ($l = 0; $l < $level; $l++)
      $indent .= "\t";
   
   foreach ($array as $key => $val) {
      $return .= "\r\n";
      $return .= $indent;
      if (is_array($val))
         $val = arrayToXML($val, $level+1) . "\r\n" . $indent;
      $return .= "<$key>$val</$key>";
   }
   
   return $return;
}

Majd pedig egy elegáns húzással:

   $backupfile = new File(....);
   $content = arrayToXML($_POST, 1);
   $content = "\r\n<post>$content\r\n</post>";
   $backupfile->appendContent($content);

Az eredmény egy konkrét példája:

<post>
   <b_id>2439</b_id>
   <szoveg><p>Müködése a kommentben.</p></szoveg>
   <b_cim>Quoter function</b_cim>
   <submit>Ment publikusan</submit>
   <gall_categ>0</gall_categ>
   <gall_entry_title></gall_entry_title>
   <b_commentable>on</b_commentable>
   <categ>
      <1>on</1>
   </categ>
   <b_privszoveg></b_privszoveg>
</post>
Haszprus

Szép URL-ek - 3 - kompatibilitás

©   Haszprus   |   fejlesztés php

Nos, 404-es errordoc esetén az apache nem adja át az url-paramétereket a php scriptnek (azaz nem jön létre se a $_REQUEST, se a $_POST, se a $_GET tömb), ez értelemszerüen problémákat okoz a meglévő scriptekben.

A $_GET pótlása nem túl körülményes. (Illetve én a $_REQUEST-be írom, mert azt használom.)

$tmp_request_parameters = explode('&amp;', $URI);
foreach ($tmp_request_parameters as $trp) {
   $t = explode('=', $trp, 2);
   $_REQUEST[$t[0]] = $t[1];
}

A $_POST-ra egyelőre nincs ötletem.

Ami pedig még jó lenne, hogy pl. egy form az elküldendő adatait az url-hez szépen /.../ formában írogassa hozzá. Valszeg előbb-utóbb erre is sort kerítek, a megoldás gondolom valami script lesz, ami a form adataiból egy window.location változtatást visz véghez submit helyett.

Haszprus

Különösen spamelt bejegyzések

©   Haszprus   |   fejlesztés php

Jó, persze, a wiw meghívókérés az nem spam valójában, de ez most tökmindegy.

Tekintve, hogy a blogon pillanatnyilag összesen csak egy különösen spamelt bejegyzés van (mégpedig az iwiwről szóló), ezért nem építek semmi adatbázis-cuccot a dolog mögé, egyszerüen forráskódba belegányolom. Lehet hogy gány, de így gyors, így egyszerü, és tekintve hogy ez a lista évente bővül egy bejegyzéssel, ezért könnyen karbantartható is.

/* spamszavak száma: spamfactor */
$spamwords = array(<q>http://</q>, <q>great</q>, [...]);
$spamfactor = 0;
foreach ($spamwords as $spamword)
   if (strpos($rq['szoveg'], $spamword) !== false)
      $spamfactor++;

/**
 * különösen spamelt bejegyzések esetén nagyobb a valószínüsége, 
 * hogy spammel van dolgunk... */
$spammed_posts = array(2226);

if ($spamfactor > 0 &amp;&amp; in_array($rq['bejegyzes_id'], $spammed_posts))
   $spamfactor++;

Majd ha marha sok időm lesz, lehet, hogy átültetem db alapúra ezt a spam, meg badword, meg spammed_posts témát, de ugye akkor kell hozzájuk kezelőfelületet írni és az rögtön rengeteg vesződséggel jár, és a karbantartás sem egyszerübb végülis mint forráskódba néhanapján belehegeszteni egy-egy új szürt szót vagy id-t.

Haszprus

PHP maxpont

©   Haszprus   |   bme php történelem

Na nyilván lehetett erre számítani, de azért említsük meg, hogy a php laborházim 14+45 = 59 pont lett, ez a maximum amit el lehet érni, és egyébként 32-től már amúgy is ötös (Igen, 32-től!) Mondjuk azt nem vágom, hogy hova tűnt a valid xhtml-ért, error_reporting e_all-ért és register_globals off-ért járó +4 (vagy +6?) pontom, valszeg a javító úgy volt vele hogy nincs rá nagy szükségem

Gratulálok. Talán a legprofibb megoldás, amit eddig láttam. Látszik, hogy volt már tapasztalatod a témában. [...]

Na jó, mit verjem magam, tényleg elég sokat foglalkozom a témával. Akik esetleg ezt szeretnék az orrom alá dörgölni egy hozzászólás formájában, hagyják ki, tisztában vagyok vele.

Meg kell mondjam, nagyon emberségesnek tartom az Adatb laborházik javítását, nem volt még olyan házi amihez ne gratulált volna a javító. Persze lehet hogy ez az ő egyéni érdeme. Mindenesetre respect & thx, jólesik.

Haszprus

Mennyi ideig generálja a szerver a lapodat?

©   Haszprus   |   fejlesztés howto php

Ha le akarod mérni, tedd be a lapod elejére ezt:

ob_start();

function microtime_float() {
   list($usec, $sec) = explode(' ', microtime());
   return ((float)$usec + (float)$sec);
}

$time_start = microtime_float();

A végére pedig ezt:

$time_end = microtime_float();
$time = $time_end - $time_start;

echo 'Lapgenerálás: ' . $time . 'mp';

ob_end_flush();

Ez a kód azért jó, mert az ob_startnak köszönhetően nem számítja bele az időbe a lap letöltődését. Enélkül amit kapnál, az függne a szabad sávszélességedtől. És az nem lenne jó.

(A kód nagyrészt innen származik, de a dolog értelmét szerintem az ob_start - ob_end_flush kiegészítés adja, anélkül a script helyett szinte a saját sávszélességedet méred.)

Haszprus

Hozzászólások, és ami mögöttük van

©   Haszprus   |   fejlesztés howto php
A komment.php-ben a kommenteket immáron OO módon szolgálja ki a blog. Ami emögött van:
class Container {
   var $elements
   var $pointer
   var $length
   function Container()
   function addElement($element)
   function length()
   function getElement($i)
   function getLastElement()
   function getFirstElement()
   function getNextElement()
   function removeElement()
   function setPointer($i)
   function forAll($function)
}

class Comments extends Container {
   var $picOfUser
   function Comments()
   function getCommentsByPostId($post_id, $order, $from, $to)
   function showHTML()
}

class Comment {
   var $row
   function Comment($row)
   function showHTML()
}

A hajnal óta elkövetett változtatásokat jelöltem. Logikusan a showHTML mellé kerülni fog egy-egy showRSS function.

Haszprus

Generikus konténer, objektumorientált hozzászólások

©   Haszprus   |   fejlesztés howto php
ha igazán OO akarsz lenni, akkor egy komment egy class, aztán csinálsz egy generikus container vagy lista class-t, és származtatsz belőle egy olyan class-t, amely csak kommenteket tartalmazhat
Tamás - Obi kérdés

Megvalósítva mindhárom (Preview Release 1) A megjelenítést még nem írtam meg szépre, de ott már csak néhány változót kell lecserélni. Ami eddig kész:

class Container {
   var $elements
   var $pointer
   var $length
   function Container()
   function addElement($element)
   function length()
   function getElement($i)
   function getNextElement()
   function removeElement()
   function setPointer($i)
}

class Comments extends Container {
   function Comments()
   function getCommentsByPostId($post_id)
   function show()
}

class Comment {
   var $row
   function Comment($row)
   function show()
}

Ez utóbbi show() még tiszta bug, értelemszerűen.

Haszprus

Komment-navigációs feature

©   Haszprus   |   fejlesztés javascript php

Ha a kommentbe írtok egy olyat, hogy pl.

#10: hogy érted ezt?

Akkor, a #10-et automatikusan linkelni fogja a 10-es kommentre. Sőt, onnan egy újabb linkkel pedig visszatérhettek oda, amelyik kommenttől jöttetek. További részletek a képre kattintva, vagy a hozzászólások során megtapasztalva. (A dolog visszamenőlegesen is műxik a blog kezdete óta érkezett összes kommentre.)

A dolog műxik IE6, Firefox 1.5, Opera 8.5 alatt, többit nemtom, de talán nem is érdekes.