Starší komentáře ke článku: Konfigurační soubor v PHP, tentokrát ve formátu .ini
Zpět na článek | Úvodní stránka Interval.cz
Datum vložení: 28.10.2003 18:11:05
je rakovina. Jedine co dokaze je komplikovat zivot. Preco asi je v php funkcia set_error_handler() [1] ??? Staci si len pozriet priklad na stranke...
[1] <a href='http://sk.php.net/manual/sk/function.set-error-handler.php' target='_blank'>http://sk.php.net/manual/sk/function.set-error-handler.php</a>
Datum vložení: 28.10.2003 18:52:53
No tak, no tak. Myslím, že každý trochu inteligentnější programátor snadno pozná, kdy se @ hodí a kdy ne. Proč psát kilometrovou funkci pro odchytávání chyb do skriptu na tři řádky, například? ;-)
Datum vložení: 29.10.2003 9:13:41
No, na druhou stranu je potřeba brát v úvahu, že tento server je taková online učebnice a proto by se tu mělo předvádět jak se s chybou vyrovnat a né ji jednoduše ukrýt a ignorovat. Přitom řešení s pomocí file_exists() a v případě neexistence použití trigger_error() a potom teprve zkusit načíst ini a v případě neúspěchu opět trigger_error() a práci scriptu zastavit. Tato ukázka totiž neřeší složitost následného získávání načtené konfigurace. Pokud se z nějakého důvodu konfigurace nenačte, nemá valného smyslu pokračovat v běhu scriptu, hned první zavolání např. mysql_connect(DB_HOST, DB_USER, DB_PASSWD) totiž v případě neexistence konfiguračních konstant stejně skončí chybou.
Datum vložení: 29.10.2003 9:38:51
Inu, každý článek nemůže řešit všechno. Nejde o kompletní aplikace, ale o principiální popis vybraných postupů. Pokud je někdo tak hloupý, že nesvede ani minimum informační syntézy, neměl by se do programování vůbec pouštět ;-)
Datum vložení: 29.10.2003 17:37:38
No "principiální popis vybraných postupů" takže to by vlastně stačilo napsat že ini formát vypadá tak a tak a potom se zavolá parse_ini_file() a konec. Vlastně by stačilo dát odkaz do dokumentace, kde je princip rozebrán dokonale. Tím pádem tento článek ztrácí smysl.
Ti kdo si dokáží doplnit ošetření chyb a zapoudžení třeba do objektu, nepotřebují poradit s .ini ! Článek je jasně pro lidi kteří neznají skoro nic a ti článek tohoto ražení vezmou jako dogma a beze změn použijí.
No nic už jsem toho napsal skoro více než autor který se ani neozval na obranu svého článku.
Datum vložení: 29.10.2003 18:35:17
Kdyz tedy tak volate po autorovi clanku, tady me mate. Abych rekl pravdu, uplne nerozumim, proc do takhle trivialniho skriptu psat slozite odchytavani chyb, ktere by ve vysledku bylo jeste delsi nez samotna fce. Navic (tady reaguju i na vas predesly prispevek) nemate uplne pravdu, ze chyba parseru neni osetrena vubec. To neni pravda. Fce ini_parse_file() vraci true/false podle toho, zdali se zpracovani dokumentu povedlo, nebo ne. Ovsem navic pri negativnim vysledku vypise chybovou hlasku, kterou prave v tomto pripade potlacuji operatorem @. Uzivatel muze jednoduse zjistit vysledek nacteni z navratove hodnoty fce config2() a podle toho se zaridit (napr. v pripade nenacteni souboru ukoncit program).
Autor
Datum vložení: 30.10.2003 10:17:44
Přiznávám že ty returny sem tak trochu přehlédl, nějak nechápu proč psát místo "true" "1", v mé logice jsou to dva různé typy proměnných (int a bool) :O))) pravda pro PHP je to jedno, zatím ... :O))
Jinak nemyslím že by se funkce nějak radikálně prodloužila, také bych chtěl říct že funkce parse_ini_file() nevrací false v případě chyby zpracování ale v případě chyby práce se souborem, otevření nebo čtení, funkce klidně proleze třeba PHP soubor a dokonce z něj dostane i nějaký výsledek, bez ohledu na to že vnitřní stavba naprosto neodpovídá INI !!
--jak bych to viděl já--
function read_ini_config($loc) {
if( !file_exists($loc) ) { // pokud soubor neexistuje je to fatální chyba
trigger_error("Nenalezen konfigurační soubor !", E_USER_ERROR);
}
$conf=parse_ini_file($loc);
if( count($conf) == 0 ) { // pokud výsledek neobsahuje nic je to nejspíš také špatně
trigger_error("Nepodařilo se načíst konfiguraci !", E_USER_ERROR);
}
foreach($conf as $key => $value) {
if (!defined($key)) {
define($key, $value);
} else {
trigger_error("Konfigurační konstanta '".$key."' je již definována !", E_USER_ERROR"); // pokud je konstanta již definována je to hodně špatně a může to vést k chybám !!
}
}
}
--end--
Datum vložení: 5.11.2003 17:50:00
nějak nechápu proč psát místo "true" "1", v mé logice jsou to dva různé typy proměnných (int a bool) :O))) pravda pro PHP je to jedno, zatím ... :O))
A na tom ze PHP je to jedno jste byl kde?
Datum vložení: 6.11.2003 9:59:06
PHP nemá typovou kontrolu takže např. výraz if(1) je rovnocený if(true) to je důvod proč jsem napsal co jsem napsal.
Datum vložení: 6.11.2003 13:34:21
Že PHP něco takového dovolí ještě neznamená, že to programátor musí používat. Vždycky je přeci k dispozici přesnější metoda s určením typové shody ;-)
Datum vložení: 6.11.2003 14:09:14
no PHP umi typy rozeznavat
zkus toto:
$promena = true;
if($promena === true)
{
echo "\$promena je typu boolean";
} else {
echo "\$promena je jineho typu";
}
Datum vložení: 6.11.2003 14:48:22
ale pánové, já přece netvrdím že se to nedá rozeznat, ale že pro "běžné" použití je to jedno. Také nikde netvrdím že je to správně, ba naopak jsem se nad tím pozastavoval že je mi to nepochopitelné :O)))
Datum vložení: 6.11.2003 19:41:02
to je zase pravda ono PHP moc s typama nepracuje :) zna je ale jsou mu tzv. sum a fuk :)
Datum vložení: 28.1.2004 18:56:09
Všem, co si myslí, že je to php šum a fuk, bych doporučil tuhle stránku z manuálu:
<a href='http://www.php.net/manual/cs/types.comparisons.php' target='_blank'>http://www.php.net/manual/cs/types.comparisons.php</a>
Datum vložení: 1.11.2003 14:03:58
Chtel jsem se zeptat, jestli ma autor v umyslu udelat nejaky clanek porovnavajici obe moznosti vytvoreni konfiguracnich souboru. Konkretne by me zajimala rychlost a ruzne zpusoby vnorenych konfiguraci, .....
Diky
Datum vložení: 4.11.2003 15:32:45
Měl bych takovou malou připomínku. Pokud použiji takovýto konfigurační soubor například pro administrační rozhraní, či jiný skript a potřebuji mít v něm uloženy citlivé údaje jako jsou parametry ftp/sql/smtp serveru, nedejbože například loginy popřípadě i hesla, pak zcela jistě zapláču nad výsledkem tohoto formátu. Zatímco zatímco klauzule <?PHP mi zaručí, že kód bude přeložen s odpovídající příponou souboru(.php etc.) alespoň PHP interpretem, pak jakýkoliv jiný formát i s touto příponou(.php etc.) bude přeložen až na straně klienta. Je bezesporu pravdou, že hesla by měly být zakódovány v jakémkoliv konfiguračním souboru, ale toto řešení by mělo být až poslední instancí ochrany a nikoliv jedinou, jak je tomu v tomto případě..... tak mě napadá co věnovat další článek kombinovanému řešení.
rozhodně mě neuspokojuje odpověď, že stačí použít na začátku ;;<?PHP a co na konci?
Datum vložení: 4.11.2003 15:40:50
konfiguraci v souborech lze uspokojive schovat pomoci .htaccess. "<?php" bych az za tak moc neveril
O.
Datum vložení: 4.11.2003 16:18:54
No pokud si někdo dokázal nějak přečíst v PHP scriptech kde že mám konfigurák, potom mě už nic nezachrání :O)) Trošku jiné je to ovšem pokud ho najde metodou pokus omyl nebo prostě zná váš "styl" práce.
Ovšem každý solidnější webhosting nabízí web prostor a k tomu je většinou také jeden adresář který není pro web server přístupný, nebo spíše jenom jeden který je přístupný. Tam patří právě věci jako configurační soubory a další data která jsou citlivá.
Pokud webhosting nic takového nenabízí potom nastává možnost použít např. .htaccess a přístup ke konfiguraci zakázat. Tuto možnost nabízí drtivá většina webhostingů, no a pokud nejde použít ani toto a trpíte pocitem že někdo zaútočí, tak potom svůj web přesuňte někam kdo vám umožní se o svojí bezpečnost postarat.
PS: na konci se použije ";;?>" :O))
Datum vložení: 14.4.2004 16:51:57
Zkos tohle:
config.ini.php
<I>! <?
[sekce]
konstanta = hodnota
konstanta = hodnota
konstanta = hodnota
konstanta = hodnota
! ?></I>
Tak zařídím, aby byl soubor vykonán php interpretem.
Vyhodí to sice chybu, ale soubor uživatel nepřečte.
Není to vyzkoušené, takže žádná jistota.
Datum vložení: 14.4.2004 17:00:21
Vyzkoušeno!
Napsal jsem do prohlížeče adresu souboru a vypsalo mi to chybu a z původního souboru nic