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>

RSS: hozzászólások ehhez a bejegyzéshez 11 hozzászólás

Szólj hozzá Te is!

ami ebben para, hogy ez nem mindig lesz valid XML. például ha a szövegben < vagy > jelek fordulnak elő úgy, hogy azok nem tag-ek részei.
ami ebben a másik para, hogy erre semmilyen DTD séma nem fog illeszkedni, mert bármilyen taget megengedsz pl a szoveg-en belül.
kellene még az elejére minimum egy XML verziószám és encoding specifikáció (ez utóbbi kettő persze csak szépészkedés)
amit viszont én a helyedben mindenképp megcsinálnék: <![CDATA[ ... ]]> szekcióba zárnám a szöveges kontenteket. ekkor már csak arra kell figyelni, hogy a CDATA-n belül ne forduljon elő a ]]> sztring, de ez megoldható azzal, hogy ha előfordul, akkor kijössz a CDATA-ból, leírod, hogy ]]>, és visszamész a CDATA-ba. ez az abszolút hülyebiztos megoldás, asszem.
(pl ennek a kommentnek a szövegét XML-be írva a fenti módszer szerint tuti nem kapnál valid parsolható XML-t)

Jaj jaj micsoda gondok
Teljesen igazad van de mint írtam eredetileg az is elég lett volna nekem ha a szöveg mezőt minden mentésnél kinyomja egy textfájlba oszt csókolom.

De igazad van, majd megcsinálom.

maskent nem tudsz backupolni, vagy csak maganszorgalom?

mérnem futtatsz cronból óránként egy sqldumpot?
szerintem az ilyennnel tök fölös phpval szopni, lefut a dump, aztán küldi mailbe, scpzi/ftpzi mási helyre, csak egy kis sh script kell, akár még be is tgzheti a htdocst, as you wish

multkor mintha azt emlitette volna, hogy nincs shellje, en is azert kerdeztem, hogy van-e alternativ backupolasi lehetosege (phpmyadmin pl)

és php is olyan secure módban fut, hog ynemtud execelni?

erre vonatkozolag nincsenek informacioim

A bejegyzéseket nem hosszútávra mentem ilyen formába hanem rövidtávra, a napokban sokminden szövegkezelő functiont átírtam és előfordult párszor hogy egy-egy mentés után a bejegyzés szövegének csak hült helye várt az admin felületen egy elrontott preg_replace miatt vagy mert egy functionből kifelejtettem a return-t

Szóval az ilyen malőrök ellen csináltam ezt. Phpmyadminból tudok dumpolni egyébként.

És asszem a fejlesztést átteszem inkább a saját gépemre az ehhez hasonlók miatt. Remélhetőleg így kevesebb időmet is fogja elvinni, mert pillanatnyilag nemtom félbehagyni semminek a fejlesztését mer a nemmüködő blog az nem nyerő

ha mod_rewrite-t se használhat, akkor azért elég kevés lehetősége lehet ..


Elvégre überlogger vagy!
Hozzászólásod:


Nem vagy bejelentkezve, de...

A)
hozzászólhatsz regisztrálatlanul...

B)
ha regisztrálva vagy, bejelentkezhetsz...