.    

POZOR! Tento článek byl naposledy aktualizován před více než dvěma lety!

Je možné, že následující­ stránka obsahuje odkazy, které dnes již nejsou funkční, nebo že některé informace uvedené v tomto článku se v průběhu času ukázaly jako prokazatelně chybné. Pokud jakoukoliv podobnou závadu zjistíte, tak neváhejte napsat co nejpřesnější popis závady do veřejného komentáře pod článkem: redakce TečkyCZ nové komentáře neustále sleduje, a to i pod těmi nejstaršími články. V celé řadě případů lze chyby snadno opravit - např. se stává, že video na YouTube bylo smazáno a znovu nahráno pod jiným id. V jiných případech někdo zase zakáže embedovaní videa, která přitom existuje ve více kopiích, nebo se z webu ztratí stránka umístěná na negarantovaném freehostingu, zatímco původní autor stránek si mezitím zaregistruje vlastní doménu, atd.

Děkujeme všem, kteří pomáhají opravovat chyby ve starších webových stránkách a udržují tak Internet naživu - redakce TečkyCZ.


Zamykání souborů v unixových systémech podruhé

xChaos 19. března 2006 [6779 znaků] [HowKnow]
★★ [ + ] 3 [5x] [ - ]
Zobrazení 12083 ← Facebook 6 Twitter 17 Google 15
Buďte první, kdo napíše kvalitní komentář k tomuto článku...

Když už teda mám open source pokládat za náboženství dneška, tak jsem se rozhodl zkusit svoje fragmenty zdrojového kódu publikovat zásadně v neděli :-)
Když už jsem už posledně otázku zamykání souborů v PHP jednou nakousl, tak by asi bylo korektní přidat ještě kapitolu dvě. Jde o to, že samozřejmě ne vždycky je možné zamknout přímo ten soubor, do kterého zapisujeme. Existují příklady, jako například tenhle jednoduchý FIFO (first in, first out) guestbook, u kterého je vhodné jako zámek použít speciální jednoúčelový soubor - a to proto, že soubor, do kterého zapisujeme, může během činnosti skriptu třeba i na chvíli úplně přestat existovat.

Co se týče vytvoření podadresáře data/ a nastavení přístupových práv k němu platí to samé, jako v minulém příspěvku. No, před přidáním prvního vzkazu přes webové rozhraní to pravda bude házet nějaké menší chyby - ale počítám, že žádný pořádný blogger nebude mít problém si první příspěvek do guestbooku napsat sám :-) a minimalismus je minimalismus. Následující příklad funguje bez ohledu na název PHP skriptu - a funguje i v případě, že je v php.ini nastavené RegisterGlobals off.

Pro pokročilé programátory ještě jednou zopakuji: následující kód je fakt naprosto banální, a jediné co je na něm zajímavé, je právě demonstrace volání funkce flock(). Přijde mi, že zrovna tohle je něco, s čím by samorostlí PHPkáři debující weby u sebe doma ve Woknech (nebo i na domácím Linuxu) mohli mít možná potenciálně problém.


<?
  /* xChaos PHP fragment collection - begin  */
  /* the simplest correctly working guestbook, 20060319 */

  $nick=$_REQUEST["nick"];
  $vzkaz=$_REQUEST["vzkaz"];
  $preview=$_REQUEST["preview"];

  echo '<form action="'.$PHP_SELF.'" method="post">';
  echo '<table><tr>';
  echo '<td align="right">od<td><input type="text" name="nick" value="'.$nick.'" size="20"></td>';
  echo '</tr><tr>';
  echo '<td align="right" valign="top">vzkaz<td><textarea name="vzkaz" rows="3" cols="50">';
  if($preview) echo $vzkaz;
  echo '</textarea></td>';
  echo '</tr><tr><td></td><td>';
  echo '<input type="submit" name="preview" value="Náhled">';
  echo '<input type="submit" name="done" value="Odešli">';
  echo '</td></tr></table>';
  echo '</form>';

  if(!$nick) $nick='<i>anonym</i>';

  if($vzkaz)
  {
   $vzkaz=str_replace("\n","<br>\n",htmlspecialchars($vzkaz));
   $vzkaz='<p>'.date('d.m.Y H:i:s').' ... '.$nick.'<br>'.$vzkaz."\n";

   if($preview)
    echo $vzkaz;
   else
   {
    $e=fopen('data/vzkazy.lock','w');
    if(flock($e, LOCK_EX))
    {
     $f=fopen('data/vzkazy.tmp','w');
     if($f)
     {
      fputs($f,$vzkaz);
      $g=fopen('data/vzkazy.html','r');
      if($g)
      {
       while(!feof($g)) fputs($f,fgets($g,16000));
       fclose($g);
      }
      fclose($f);
      unlink('data/vzkazy.html');
      rename('data/vzkazy.tmp','data/vzkazy.html');
      fclose($e);
     }
     else
      echo ('chyba při zápisu do souboru, prosím kontaktujte webmastera ...');
    }    
    else
     echo ('chyba při zamykání souboru, prosím kontaktujte webmastera ...');
    
   }
  }
  
  if(!$preview) 
   include('data/vzkazy.html');

?>
Jaká jsou výhody tohohle jednoduchoučkého guestbooku ? Převším jde o to, že textový soubor data/vzkazy.html je ehm... textový. K jeho editaci (v krajním případě takové, že ho zkrátka downloadnete a po editaci zase uploadnete přes FTP nebo SCP) nepotřebujete žádného SQL klienta. Je to prostě text, který můžete vytisknout, překopírovat do nějaké statické HTML stránky, nebo jakkoliv jinak libovolně zrecyklovat nebo vyzálohovat. Kompatibilita s psacími stroji i s nápisy vytesanými do kamene je zajištěna.

Pokud zapisujete data do textových souborů, tak nejste závsilí na žádném konkrétním balíčku (tedy kromě toho PHP) žádné konkrétní linuxové distribuce, nemusíte se obávat pádu databáze, nemusíte dumat nad přenositelností na jiný operační systém.

Je pravda, že TečkaCZ je v současné době napsaná nad MySQL - ale je taky pravda, že jsem SQL vždycky částečně pokládal za cestu do pekel. V podstatě nevím, proč by některé opravdu jednoduché aplikace měly záviset na SQL, a proč by se měly zhroutit, pokud náhodou civilizační infrastruktura - tedy v tomto případě třeba SQL engine - vypoví službu. Tedy - proč by například webové stránky mojí kapely měly záviset na tom, že kromě webhostingu budou potřebovat taky třeba MySQL server. O SQL má podle mě cenu přemyšlet v případě firem, které mají víc než tisíc klientů - a i v takovém případě je to cesta do pekel (ale to spíš z toho důvodu, že velké firmy jsou nejspíš obecně cesta do pekel...).

Co se týče oddělení kódu a designu stránky, tak to také nutně nepokládám za zcela špatné. Procházet všechny includované PHP knihovny a hledat v nich implementaci nějaké jedné konkrétní funkce nemusí být vždycky příjemné. Kopírování předem připravených fragmentů kódu na vhodná místa ve webových stránkách může být v některých konkrétních případech docela užitečné...

Zatím ještě nevím, jestli budoucí redakční systém TečkyCZ bude podstavený nad SQL, nebo ne; pravděpodobně tedy ano - ale fakt je, že na Tečce se počítá s tisícovkami čtenářů a článků, a se stovkami diskutérů a příspěvků pod každým z článků.

Možná čtou TečkuCZ samí programátorští experti, kterým moje rozpitvávání zdánlivých samozřejmostí přijde banální - ale já se snažím najít nějakou hranici, u které končí lidi, kteří v zásadě "umějí programovat" - tak, jako jsem se to já kdysi naučil na 8bitových systémech, tzn. poslepovat nějakou v podstatně samodokumentující se sekvenci příkazů za sebe, a občas ji doplnit nějakým tím if() či while() - a kde začínají lidi, kteří jsou schopni napsat kód, který už skutečně nebude nikdy potřeba psát znova... trochu je to ale také o tom, jestli rádi děláte složitě i ty věci, které jde dělat jednoduše, nebo ne...

Faktem je, že většina provozovatelů malých webových stránek dnes spíše řeší který volně dostupný online guestbook na svoje stránky přilepí - místo aby přemýšleli nad tím, jestli svůj guestbook postavit nad filesystémem nebo nad SQL. Což v případě guestbooku asi opravdu nevadí - ale otázka je, jestli se se třeba v téhle době tímhle způsobem nezačíná přemýšlet už úplně o všem... kde je hranice mezi závislostí na externím guestbooku, a mezi závislostí na mechanickém přísunu balíčků z nějaké linuxové distribuce ? (o updatech Windows nemá cenu vůbec začínat...)

Myslím si, že jsem se svým způsobem také trochu dotkl tématiky softwarových patentů, a toho, jestli jsou dobré, nebo špatné...


Sloupcová sazba: pokud je okno prohlížeče dostatečně velké (na monitoru s dostatečným rozlišením), zobrazí se článek ve více sloupcích (w3.org). Testováno v browserech Firefox, Opera a Chrome. Není implementováno v Internet Exploreru. Tato feature může způsobovat problémy ve starších verzích prohlížečů s jádrem Webkit (Google Chrome, Safari, Konqueror). Pokud nevidíte článek celý, zkuste zmenšit okno prohlížeče nebo použít verzi pro tisk. [zpět na začátek sloupcové sazby]
Pokud se vám článek líbil, zkuste autora podpořit [zobrazit možnosti]
Sdílet v síti [Identi.ca - musíte být předem přihlášeni] [Twitter] [Facebook] [Jagg.cz]
Formátovat pro tisk [bez komentářů] [s komentáři]
Krátká forma URL (adresy) [http://teckacz.cz/386]
Všechny články [od autora xChaos] [v rubrice HowKnow] [nejnovější]

Hodnocení článku čtenáři [ + ] 3 [5x] [ - ]
Tip: Pro moderaci článků (kladné nebo záporné hodnocení) je nutné použít browser, který podporuje javascript a cookies.
Počet zobrazených komentářů: 0 [celkový čas potřebný k prohledání databáze a vytvoření stránky: 0.26 sekund]

Pozor, vložením komentáře souhlasíte s pravidly hry TečkyCZ! [zobrazit pravidla] →
Ochrana proti spambotům - tři-krát-tři je ... ? (napište číslicí - nemělo by byt potřeba při zapnutém JavaScriptu)
Sociální síť (přihlaste se předem, 1. řádek<=96 znaků=status, zbytek=odkaz)
Offtopic resolver (týká se odpověď původního tématu, nebo patří jinam?)
Přezdívka (povinně) - nepoužívejte speciální znaky, mezery=podtržítka
E-mail (volitelně) - nebude zobrazen, zobrazí se ikonka z [www.gravatar.com]

Nelze použít HTML [zobrazit mikrosyntax] →

Nápověda: ve vlastním zájmu uvádějte u komentářů pouze funkční a dostupnou e-mailovou adresu. Přezdívku, která je jednou spojená s konkrétní e-mailovou adresou, už nyní nelze bez zásahu administrátora serveru spojit s jinou adresou. Uvedením neplatné e-mailové adresy si v budoucnu znemožníte upload ikonky i možnost použít některé další chystané neanonymní funkce vázané na uvedení platné e-mailové adresy.


TečkaCZ [Nejnovější články] [Nejnovější komentáře] [Zeď vzkazů] [Zeď odkazů] [Začátek článku]

    TečkaCZ
  •  
  • Komentáře →
  • Nástěnky →
  • Debaty →
  • Články →
  • Ročníky →
  • Rubriky →
  • RSS kanály →
  • Vzhled →
  • Ostatní →
  •  
[] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] []
  •  
.

[Arachne Labs]

[SPOJE.NET]

[Právě dnes | Tech | Ostatní]

Yacy P2P web search jabber.arachne.cz
tiskové zprávy a otevřené dopisy přebíráme z nejrůznějších informačních kanálů (i bez výslovného souhlasu autorů)
licenční práva k použitým obrázkům a grafickým motivům nejsou definována (přebírejte pouze texty bez obrázků)
texty článků i komentáře bez uvedení copyrightu jsou chráněny GNU Free Documentation License
založeno na Quzo engine, (G)1999-2002 David Čermák, (G)2002-2012 Michael Polák
Quzo engine vyvíjejí Arachne Labs, webhosting sponzorují SPOJE.NET
seznam aktuálních článků je dostupný i ve formátu RSS (XML)
můžete také sledovat Twitter feed TečkyCZ.
test XHTML a CSS2 validity