PHP problém s mail()
Tedy, on to možná není ani tak problém s PHP, jako takový zajímavý problém (či bug?) skriptu. Podívejte se na tento kód:
$to = 'info@hulan.info'; $subject = 'New password requested'; $message = 'Hello Radek Hulan,'."\n". 'You have requested to have a new password '."\n". 'assigned to your account in the '."\n". 'discussion forum at http://forum.blogcms.com/. '."\n". 'Your new password is: abcdefgh'; $headers = 'From: BLOG:CMS'."\n". 'Date: Sat, 13 Nov 2004 12:26:14 +0100'."\n". 'MIME-Version: 1.0'."\n". 'Content-transfer-encoding: 8bit'."\n". 'X-Mailer: PunBB Mailer'."\n". 'Content-Type: text/plain; charset=utf-8';
A nyní tento email pošleme:
mail($to, $subject, $message, $headers);
Vtip je v tom, že u mě na SUSE 9.1 s PHP 5.0.2 to email posílá, na xhost.cz s PHP 4.3.9 to email, rovněž posílá, ale na www.tojeono.cz s PHP 5.0.2 to email nepošle. Řešil jsem to s Ondřejem Svobodou asi hodinu, než nám to došlo, a přitom je to tak triviální…
A víte proč?
Fedora Core 3 - první zkušenosti
Používám linuxovou distribuci SUSE 9.1, nicméně, před pár dny jsem neodolal, a stáhnul si 2.4 GB DVD ISO obraz nové Fedora Core 3. Fedora Core 3 má jednu zásadní výhodu - obsahuje ty nejnovější komponenty. A jednu zásadní nevýhodu - obsahuje ty nejnovější, a často málo otestované, někdy doslova vývojové, komponenty.
Fedora Core 3 je prostě taková testovací základna pro RedHat samotný, který je samozřejmě v releasech konzervativnější.
Instalace Fedora Core 3 probíhala zcela tradičně, podobá se instalaci Mandrake
10, a byla podstatně rychlejší než u SUSE 9.1. Aby taky ne, ono rozbalit pár
stovek rpm
balíčků na harddisk, to moc času nezabere.
Fedora Core 3 obsahuje:
- kernel 2.6.9.1,
- KDE 3.3.0 (zde by mohla mít verzi 3.3.1),
- Gnome 2.8,
- a například také Firefox 1.0 Preview Release a OpenOffice.org 1.1.2.
Tedy skutečně "horké věci".
Eurotel CDMA má novou formu F.U.P.
Včera večer jsem stahoval 2.4 GB instalační DVD ISO obraz Linuxové distribuce Fedora Core 3, přes Eurotel CDMA.
Download běžel ze třech FTP naráz, sice mírně pomaleji (cca 50 KB/s), ale šlo to. Předpokládal jsem, že ráno bude vše hotové. Nicméně, není, CDMA spojení sice drží, modem funguje, ale staženo je jen cca 1.5 GB dat, a zbytek se ke mě dostává úžasnou rychlostí 10 KB/s.
Eurotel na svém CDMA zjevně nezavedl jen omezení P2P sítí, ale zavádí normální F.U.P., kdy Vám po stažení určitého množství dat sníží rychlost i http a ftp přenosů na desetinu rychlosti původní, takže Vám CDMA jede na rychlosti GPRS nebo dial-upu.
Pokud si chcete kupovat CDMA, hodně dobře si to rozmyslete. Možná bude lepší, než nejistých 50-80 KB/s u CDMA (vzhledem k F.U.P.), vcelku jistých 20-30 KB/s u EDGE, pokud tedy i T-Mobile nezavede F.U.P.
PS: nejsem s touto negativní zkušeností sám, a není to poprvé… P2P nepoužívám, a omezení http a ftp přenosů je od Eurotelu mimořádně sprostá věc…
Bůh žehnej Americe…
Byl jsem osobně v Turecku, “evropské” islámské zemi, projel jsem je celé, od západu, na východ, projel jsem autem celou Sýrii a Libanon, byl jsem v Saúdské Arábii a Kuvajtu.
A 95% lidí, které jsem tam potkal, jsou zcela normální lidé, žádní extremisté (tedy, pokud souhlasíte s tím, že totální diktatura islámu, v každém aspektu Vašeho života, je “normální”).
Přesto je mi jasné, že válka, kterou Bush / USA vedou proti terorismu, ať už je to v Afghánistánu, či Iráku, je nezbytně nutná.
V těchto zemích není problém těch 95% lidí, co chce klid a normální život, ale 5% příslušníků jihádu, kteří jsou od mladého věku trénováni k nenávisti ke komukoliv (včetně jiných, méně extrémních, zastánců islámu), s požadavkem na zničení, likvidaci, těchto lidí, co se s jihádem neztotožňují.
Podívejme se na pár arabských režimů blíže:
- Saúdská Arábie – matka současných teroristů a nenávisti, přes překryv bohaté společnosti, živené ropou, se dostávají ven mladí fanatičtí lidé, kteří rádi nasadí svůj život pro jihád, něco jako mladí nacisté v Německu. Mimochodem, 15 z 19 teroristů z 9/11 bylo ze Saúdské Arábie. Relativní stabilita je zde jen kvůli ropě, a bohatství z ní plynoucího. Co ale bude za 15-20 let, až ropa dojde?
- Egypt – silné kořeny Islámu, chudoba, a z ní plynoucí populistický islám jako řešení bezprostředních problémů (a z toho plynoucí terorismus - známé vraždy turistů, které potom dále ekonomicky likvidují zemi, a podporují stále větší extremismus).
- Irák – Saddam Hussein, netřeba představovat, popravy stovek tisíc lidí, USA zde zajistili svobodu pro celý stát, ale i přesto je zde silný odpor teroristů, viz aktuální teroristické akce proti USA ve Fallúdže.
- Afghánistán – domovská základna milionáře Osama Bin Ládena / Talibanu / Al Kaida, existuje zde řada extremistických náboženských skupin, specializujících se na organizace vražd a teroristických akcí po celém světě. USA zde zajistili mnohem bezpečnější situaci, ale zatím zdaleka ještě ne stabilitu.
- Alžírsko – panuje zde brutální občanská válka, řada lidí zde oslavuje 11. září 2001, další silná základna terorismu.
Bohužel, tato situace se týká i České republiky. Náboženské vraždy v nedalekém Holandsku jsou toto jen příkladem. Cílem teroristů je destabilizace. S terorismem se, bohužel, nedá bojovat jinak, než zbraní.
Zítra ráno se probudím a budu instalovat…
Fedora Core 3, jedna z nejlepších a nejmodernějších Linuxových distribucí, DVD ISO má 2.4GB ;-)
PHP: convert named entities to decimal Unicode
This script was written to overcome validation problems with RSS 0.9/1.0/2.0
and Atom 0.3 feeds which may not contain (X)HTML entities, otherwise widely
used. Usage is very simple, function entity_to_decimal_value()
will return
a Unicode encoded string, with entities it does not recognise replaced for
spaces.
There are also other two useful functions, for converting (X)HTML entities
back to their original representation (makes <
again <
), and for Unicode
decoding of an URL string.
/* convert HTML entities back */ function unhtmlentities ($string) { $trans_tbl = get_html_translation_table (HTML_ENTITIES); $trans_tbl = array_flip ($trans_tbl); return strtr ($string, $trans_tbl); } /* decodes URL into Unicode string */ function unicode_decode($txt) { $txt = ereg_replace('%u0([[:alnum:]]{3})', '\1;',$txt); $txt = ereg_replace('%([[:alnum:]]{2})', '\1;',$txt); return urldecode($txt); }
Firefox 1.0 je ve finální verzi
Byla vydána finální verze Firefoxu 1.0, a to včetně její české verze. Zareagoval na to i google, můžete totiž nově hledat na google.com/firefox :-)
Firefox je nejlepší open-source browser, určený pro masovou veřejnost. O tom, jak si dokonale nakonfigurovat Firefox, jsem psal již dříve.
O tom, jak si dokonale nakonfigurovat Operu 7.60, nejlepší (komerční) browser pro profesionály, si můžete přečíst zde.
GeSHi - obarvěte si svoje zdrojáky
Včera v noci, poté, co jedna milá kamarádka odešla domů k rodičům (musí zítra do školy), jsem se náhodou dostal ve dvě hodiny ráno na web GeSHi. GeSHi je prima věc, barevná. GeSHi umí obarvit automaticky Vaše zdrojáky v actionscript, ada, apache, asm, asp, bash, c, caddcl, cadlisp, cpp, css, delphi, geshi, html4strict, java, javascript, lisp, lua, nsis, oobas, pascal, perl, php-brief, php, python, qbasic, sql, vb, visualfoxpro, xml.
A ona GeSHi nejenom barví, ale rovněž, pokud ji k tomu mírně přinutíte, udělá třeba pro PHP funkce automaticky odkazy na manuál PHP. Dokonalé. Stejně se dá přinutit i k odkazům na HTML či CSS.
Použití je potom triviálně jednoduché, místo <pre>
zadáte <pre language>
.
Napsal jsem si k tomu samozřejmě plugin pro BLOG:CMS, pod názvem NP_GeSHi, funguje dvěma způsoby, buď při ukládání článku (parse-and-save), nebo online (realtime), používám přitom tu nej-geniálnější funkci PHP, tedy preg_replace_callback
.
include('geshi.php'); class NP_Geshi extends NucleusPlugin { function parseString(&$content) { $keys=array('body','more'); foreach ($keys as $key) $content[$key] = preg_replace_callback ( '/<pre\s(.*?)>(.*?)<\/pre>/si', array(&$this,'replaceString'), $content[$key] ); } function replaceString($r){ global $DIR_PLUGINS; $geshi = new GeSHi($r[2],$r[1],$DIR_PLUGINS."geshi/"); $geshi->enable_classes(); $geshi->set_header_type(GESHI_HEADER_PRE); $geshi->set_overall_class('code'); $geshi->set_link_target($this->_linktarget); return $geshi->parse_code(); } } // NP_Geshi
Sub-kategorie v XHTML a JS
Doplňoval jsem včera sub-kategorie do BLOG:CMS, kvůli zpřehlednění větších webů, a narazil jsem na problém, jak řešit reprezentaci a formátování sub-kategorií v XHTML, a zároveň skrývání/odkrývání skupin v JavaScriptu.
Skoro automatické řešení je použít zde tagy ul
, li
,
nicméně, nakonec se mi jako sémanticky správnější zdálo použití dl
, dt
, dd
,
navíc obaleno jedním div
, kvůli formátování a XHTML validitě (a MSIE).
Tag dl
se zde používá jako formátovací "obal" pro CSS
pro skupinu, tag dt
je název skupiny, a tagy dd
jsou
sub-kategorie zařazené v dané skupině. Vypadá to celé nějak takto:
- Skupina 2
- Kategorie 4
- Kategorie 5
Je to řešení sémantické, XHTML validní, jednoduše nastylovatelné, a poskytující prostor i pro JavaScriptové skrývání/odkrývání skupin kategorií, třeba tímto jednoduchým skriptem:
// strom je zobrazen var categoryhidden = false; // schovat strom function categoryfold(){ categoryhidden = true; var i=1; var ele; while (ele=document.getElementById('group'+i++)) ele.style.display='none'; } // rozbalit strom function categoryexpand(){ categoryhidden=false; var i=1; var ele; while (ele=document.getElementById('group'+i++)) ele.style.display='block'; } // prepnout strom function categorytoogle(){ if (categoryhidden) categoryexpand(); else categoryfold(); } // zobrazit jednu kategorii function categoryswitch(j){ if (categoryhidden) { categoryexpand(); return; } var i=1; var ele; while (ele=document.getElementById('subcat'+i)) if (i++==j) ele.style.display='block'; else ele.style.display='none'; categoryhidden=true; }
Celé to řešení je vtipné v tom, že funguje na libovolné množství kategorií,
ve chvíli kdy ele=document.getElementById('group'+i++)
vrátí false
,
je jasné, že se jedná o poslední skupinu kategorií.
Řešení je implementováno v nejnovější verzi BLOG:CMS, jako plugin NP_SubCategories.php.
Je škoda, že zaostalý MSIE nepodporuje
v CSS konstrukce následujícího typu, podobné věci by šlo stylovat v CSS mnohem
lépe, bez divů
, a rovněž zpracovávat bez hromady id
identifikátorů
pro JavaScript, jen pomocí DOMu…
div#subcat dl dt>a{color: black; display: block;}
Bajka o zasviněném okně
Představte si, že si v bazaru koupíte slušné a zachovalé auto. Máte kupní smlouvu, všechno je skoro růžové. Auto není sice žádný zázrak, ale do práce s ním prostě jezdit musíte. Je podzim, venku prší, je bláto, a vy máte za chvíli tak špinavé okno, že přes něj nevidíte na cestu. Vystoupíte a jdete si ho umýt.
A v tu chvíli se objeví původní majitel a řekne vám, že ho umýt nesmíte. Když mu řeknete, že kupní smlouva žádnou podobnou restrikci neobsahovala, tak vám ten chytrák odpoví, že ji dopsal právě teď na lísteček na nákup pro svou manželku - a že prostě musíte poslechnout, protože je silnější, má rudého kamaráda, a společně vám jinak namlátí.
Že vám to připomíná aktuální zákaz transformace nemocnic, dopsaný do zákona o regulaci hluku?
Máte pravdu, je to stejně absurdní. Tak mějte rozum, a vyberte si příště auto od jiného majitele.