Emulátory Box86 a Box64 umožňující spouštět linuxové aplikace pro x86 a x86_64 na jiných než x86 a x86_64 architekturách, například ARM a ARM64, byly vydány v nových verzích: Box86 0.3.8 a Box64 0.3.2. Ukázka možností na YouTube.
Byla vydána nová verze 6.1 neměnné (immutable) distribuce openSUSE Leap Micro určené pro běh kontejneru a virtuálních strojů. S vydáním verze 6.1 byla ukončena podpora verze 5.5.
Poslanci dnes ve třetím čtení schválili návrh zákona o digitálních financích. Cílem zákona je implementace předpisů Evropské unie v oblasti digitálních financí, konkrétně nařízení DORA (Digital Operational Resilience Act) o digitální provozní odolnosti finančního sektoru a nařízení MiCA (Markets in Crypto Assets) o trzích kryptoaktiv. Zákon nyní míří k projednání do Senátu ČR. U kryptoměn bude příjem do 100 tisíc Kč za zdaňovací období osvobozen od daně, podobně jako u cenných papírů, a to za podmínky jejich držení po dobu alespoň 3 let.
O víkendu (15:00 až 23:00) proběhne EmacsConf 2024, tj. online konference vývojářů a uživatelů editoru GNU Emacs. Sledovat ji bude možné na stránkách konference. Záznamy budou k dispozici přímo z programu.
Mozilla má nové logo a vizuální identitu. Profesionální. Vytvořeno u Jones Knowles Ritchie (JKR). Na dalších 25 let.
Bylo rozhodnuto, že nejnovější Linux 6.12 je jádrem s prodlouženou upstream podporou (LTS). Ta je aktuálně plánována do prosince 2026. LTS jader je aktuálně šest: 5.4, 5.10, 5.15, 6.1, 6.6 a 6.12.
Byla vydána nová stabilní verze 3.21.0, tj. první z nové řady 3.21, minimalistické linuxové distribuce zaměřené na bezpečnost Alpine Linux (Wikipedie) postavené na standardní knihovně jazyka C musl libc a BusyBoxu. Z novinek lze vypíchnou počáteční podporu architektury Loongson LoongArch64.
Hodnota Bitcoinu, decentralizované kryptoměny překonala 100 000 dolarů (2 390 000 korun).
Hurl byl vydán ve verzi 6.0.0. Hurl je nástroj běžící v příkazovém řádku, který spouští HTTP požadavky definované v textovém souboru.
popisky.txt
- tam je vše v pořádku, ovšem název a popis galerie, autor a pár dalších informací se bere ze souboru config.xml
, a tam nastává problém. Pokud je v některém popisu znak s diakritikou, parser před ním zastaví a tento ani další znaky již nezpracuje. A skočí na další položku. Psal jsem Tomášovi, ale odepsal mi, že se již dlouho PHP nevěnuje, ale že by ten problém měl být někde v parseru.
config.xml
vypadá takto:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE conf SYSTEM "../config.dtd"> <conf> <const name="ROW_THUMB_NUM" desc="pocet nahledu na radce">3</const> <const name="PREFIX" desc="prefix souboru s nahledem">tn_</const> <const name="DESC_FILE" desc="nazev souboru s popiskami">popisky.txt</const> <const name="SHOW_DESC" desc="zobrazovat popisky u fotek [0|1]">1</const> <const name="SHOW_THUMB_DESC" desc="zobrazovat popisky i u nahledu [0|1]">1</const> <const name="IMPLICIT_DESC" desc="implicitni title a alt, tak kde neni popisek">obrázek</const> <const name="GALLERY_NAME" desc="popis galerie">Jarní květinky</const> <const name="DATE" desc="datum vytvoreni fotek"></const> <const name="AUTHOR" desc="autor fotografii">Oťula</const> <const name="NOTE" desc="poznamka k fotogalerii">Jsou opravdu překrásné</const> </conf>A parser vypadá takto (je v něm už doplněno i vše možné, co jsem poznacházel po webu ohledně UTF-8, že by mělo pomoci, ale nepomohlo):
function start_element($parser,$tag,$attr) { global $at, $desc, $current; $current=$tag; if (strcmp($tag,"const")==0) { $at=$attr["name"]; } } function end_element($parser,$tag) { global $current; $current=""; } function element_data($parser,$data) { global $at,$current; if (strcmp($current,"const")==0) { define($at,$data); } } function config($loc) { if (!file_exists($loc)) { return 0; } else { if(!($f=fopen($loc,"r"))) { return 0; } else { $at=""; $current=""; $parser=xml_parser_create("UTF-8"); xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING,"UTF-8"); xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1); xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0); xml_set_element_handler($parser,"start_element","end_element"); xml_set_character_data_handler($parser,"element_data"); if(!xml_parse($parser,fread($f,filesize($loc)))) { xml_parser_free($parser); return 0; } } xml_parser_free($parser); return 1; } }Při uvedených příkladech to tedy vypadá tak, že se název galerie zobrazí "Jarn", autor "O", implicitní title a alt "obr", a poznámka "Jsou opravdu p". Byl bych vděčný za radu, jak to dát dohromady.
Řešení dotazu:
config("config.xml"); $dc = get_defined_constants(true); echo "<pre>", print_r($dc["user"], true), "</pre>";tak sa mi zobrazí niečo takéto:
Array ( [ROW_THUMB_NUM] => 3 [PREFIX] => tn_ [DESC_FILE] => popisky.txt [SHOW_DESC] => 1 [SHOW_THUMB_DESC] => 1 [IMPLICIT_DESC] => obrázek [GALLERY_NAME] => Jarní květinky [AUTHOR] => Oťula [NOTE] => Jsou opravdu překrásné )(a teda, mne to funguje normálne)
... //nacteni konstant z xml souboru include("./xml.php"); //nacteni xml parseru @$chyba = config($folder.$setting); //pokud nebyl config.xml nalezen, tak nastav hodnoty explicitne //implicitni nastaveni promenych z config.xml (!defined("THUMB_NUM"))?define("THUMB_NUM","15"):""; //9 nahledu na stranku (!defined("ROW_THUMB_NUM"))?define("ROW_THUMB_NUM","3"):""; // 3 nahledy na radku (!defined("PREFIX"))?define("PREFIX","tn_"):""; //prefix souboru s nahledy (!defined("DESC_FILE"))?define("DESC_FILE","popisky.txt"):""; //nazev souboru s popiskami (!defined("SHOW_DESC"))?define("SHOW_DESC","1"):""; // zobrazovat popisky u fotek (!defined("SHOW_THUMB_DESC"))?define("SHOW_THUMB_DESC","1"):""; // zobrazovat popisky u nahledu (!defined("IMPLICIT_DESC"))?define("IMPLICIT_DESC","obrázek"):""; // implicitni popiska (!defined("GALERY_NAME"))?define("GALLERY_NAME",""):""; // nazev galerie (!defined("DATE"))?define("DATE",""):""; // datum vytvoreni fotek (!defined("AUTHOR"))?define("AUTHOR",""):""; // autor fotek (!defined("NOTE"))?define("NOTE",""):""; //poznamka k fotogalerii ... ... ... ... //vypis nadpisu, autora a data porizeni fotek echo "<div id=\"hlavicka\">\n"; echo (GALLERY_NAME != "" && defined("GALLERY_NAME"))?"<h2>".GALLERY_NAME."</h2>\n":"\n"; echo (NOTE != "" && defined("NOTE"))?"<p>".NOTE."</p>\n":"\n"; echo (AUTHOR != "" && defined("AUTHOR"))?"<p><strong>Autor: </strong>".AUTHOR."</p>\n":"\n"; echo (DATE != "" && defined("DATE"))?"<p><strong>Datum: </strong>".DATE."</p>\n":"\n"; echo "</div>\n"; ... ... ...a je to načítáno do souboru s takovouto hlavičkou:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" > <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> ...
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> </head> <body> <?php include("./xml.php"); @$chyba = config("config.xml"); $dc = get_defined_constants(true); echo "<pre>", print_r($dc["user"], true), "</pre>"; ?> </body> </html>
config.xml
a ponechám ho v tom souboru, odkud se načte, pokud v config.xml
nic není, tak je to v pořádku.
<?php function start_element($parser,$tag,$attr) { global $at, $desc, $current; echo "start_element: (", $tag, ", ", print_r($attr, true), ")<br>"; $current=$tag; if (strcmp($tag,"const")==0) { $at=$attr["name"]; } } function end_element($parser,$tag) { global $current; echo "end_element: (", $tag, ")<br>"; $current=""; } function element_data($parser,$data) { global $at,$current; echo "element_data: (", $data, ")<br>"; if (strcmp($current,"const")==0) { define($at,$data); } } function config($loc) { if (!file_exists($loc)) { return 0; } else { if(!($f=fopen($loc,"r"))) { return 0; } else { $at=""; $current=""; $parser=xml_parser_create("UTF-8"); xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING,"UTF-8"); xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1); xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0); xml_set_element_handler($parser,"start_element","end_element"); xml_set_character_data_handler($parser,"element_data"); if(!xml_parse($parser,fread($f,filesize($loc)))) { xml_parser_free($parser); return 0; } } xml_parser_free($parser); return 1; } } ?>Zo zobrazovaných informácií je jasné, že sa bude musieť presunúť definovanie tej konštanty až do funkcie end_element (a v element_data sa bude ten text spájať).
start_element: (const, Array ( [name] => GALLERY_NAME [desc] => nazev akce, odkud fotky pochazi ) ) element_data: (Jarn) element_data: (í květinky) end_element: (const) element_data: ( ) start_element: (const, Array ( [name] => DATE [desc] => datum vytvoreni fotek ) ) end_element: (const) element_data: ( ) start_element: (const, Array ( [name] => AUTHOR [desc] => autor fotografii ) ) element_data: (O) element_data: (ťula) end_element: (const) element_data: ( ) start_element: (const, Array ( [name] => NOTE [desc] => poznamka k fotogalerii ) ) element_data: (Jsou opravdu p) element_data: (řekrásné) end_element: (const) element_data: ( ) end_element: (conf)
<?php function start_element($parser,$tag,$attr) { global $at, $element_data, $desc, $current; $current=$tag; if (strcmp($tag,"const")==0) { $at=$attr["name"]; $element_data = ""; } } function end_element($parser,$tag) { global $at,$element_data,$current; if (strcmp($current,"const")==0) { define($at,$element_data); } $current=""; } function element_data($parser,$data) { global $at,$element_data,$current; if (strcmp($current,"const")==0) { $element_data .= $data; } } function config($loc) { if (!file_exists($loc)) { return 0; } else { if(!($f=fopen($loc,"r"))) { return 0; } else { $at=""; $current=""; $parser=xml_parser_create("UTF-8"); xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING,"UTF-8"); xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1); xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0); xml_set_element_handler($parser,"start_element","end_element"); xml_set_character_data_handler($parser,"element_data"); if(!xml_parse($parser,fread($f,filesize($loc)))) { xml_parser_free($parser); return 0; } } xml_parser_free($parser); return 1; } } ?>
Tiskni Sdílej: