Portál AbcLinuxu, 17. července 2025 07:11


Dotaz: Jak na kontrolu načtení souboru

8.9.2013 19:00 Marky
Jak na kontrolu načtení souboru
Přečteno: 487×
Odpovědět | Admin
DD, chtěl bych se zeptat, jak se dá udělat v bash/shell tohle, příklad je pro PHP. Děkuji za ochotu ;)
if(!include_once 'file.php'){
  echo("File not loaded... :-(");
  exit("Error!");
}
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

8.9.2013 19:29 Kit
Rozbalit Rozbalit vše Re: Jak na kontrolu načtení souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tohle se ale v PHP už dávno nedělá.

Použij příkaz trap.
8.9.2013 19:53 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Jak na kontrolu načtení souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Když uděláš:
. file.bash

tak v $? je uložena návratová hodnota posledního příkazu z file.bash, pokud soubor neexistuje tak to zklame (tedy nebude tam 0).

Tedy můžeš testovat $?, ale netestuješ přímo to, na co se ptáš…

Pokud je file.bash tvůj script a nakonci máš exit 0 , tak přes $? otestuješ jestli se korektně provedl nebo ne a to 'ne' zahrnuje i neexistenci.

PS: Ta PHP konstrukce mi nedává moc smysl…

To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
8.9.2013 20:05 Marky
Rozbalit Rozbalit vše Re: Jak na kontrolu načtení souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Vyzkouším, děkuji, Ihmo, jak se v php už nedělá? Co je na té konstrukci špatně?
8.9.2013 20:09 Kit
Rozbalit Rozbalit vše Re: Jak na kontrolu načtení souboru
Prostě uděláš
include_once 'file.php';
O zbytek se postarají výjimky.
8.9.2013 20:19 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Jak na kontrolu načtení souboru

Jestli je include fatální v daný okamžik, tak pak:

require_once 'file.php';
a je to. pokud není (použije se include), tak to zklame kde má…

Možná konstrukce:

if(!(@include_once 'file.php')) 
  throw new myInclException("Bylo tu, není tu");
by možná dávala (mně) smysl.

To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
8.9.2013 20:38 Kit
Rozbalit Rozbalit vše Re: Jak na kontrolu načtení souboru
I fatální chyba se v PHP dá odchytit přes register_shutdown_function(). Je zbytečné kvůli tomu definovat další výjimku.
8.9.2013 21:00 Marky
Rozbalit Rozbalit vše Re: Jak na kontrolu načtení souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Chlapy a co nějak takto?
exitus(){
echo "Soubor se nepodařilo načíst.."
exit 1
}

. file.bash || exitus
nebo jen
. file.bash || exit 1
8.9.2013 21:10 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Jak na kontrolu načtení souboru
Jak jsem psal výše, testuješ tím, že poslední příkaz obsažený ve file.bash (skončil bez chyby) vs. (poslední příkaz skončil s chybou nebo soubor se nepodařilo vložit/provést).
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
11.9.2013 09:18 Marky
Rozbalit Rozbalit vše Re: Jak na kontrolu načtení souboru
Jak jsem psal výše, testuješ tím, že poslední příkaz obsažený ve file.bash (skončil bez chyby) vs. (poslední příkaz skončil s chybou nebo soubor se nepodařilo vložit/provést).
Ale toho příkazem . /my.sh || exitus docílím i tak, na víc je to jediné co funguje, jelikož když budu chtít testovat $? == 0 tak přece nemůžu dát do sourcovaného scriptu na konec exit 0 :-D jelikož by se hned celý script ukončil.. Dík
11.9.2013 19:03 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Jak na kontrolu načtení souboru

Oops, velké sorry za exit 0, mělo být return 0 - nějak mi to ujelo.

Přikazem
. /my.sh || exitus
docílíš úplně to samé co
. /my.sh
if [ $? != 0 ]; then exitus;  fi
bo to je to de-facto to samé jen jinak napsané, tedy stále platí, že chyba nastane pokud poslední příkaz vkládaného souboru skončí s chybou nebo soubor neexistuje.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
Tarmaq avatar 9.9.2013 16:41 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: Jak na kontrolu načtení souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
FILE=foo.sh

if test -e $FILE; then
    . $FILE
else
    echo "File not loaded... :-(";
    exit 1
fi
Don't panic!
11.9.2013 10:36 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: Jak na kontrolu načtení souboru

Podla mojho nazoru rovno otestovat na citanie a to tak v logickej nadvaznosti na spravu v pripade nemoznosti nacitania daneho suboru a najma na fakt, ze overenie existencie suboru este nic nevravi o moznosti ho citat, co je v tomto pripade klucove. Vid:

patrik@domov:~$ stat /etc/shadow
  File: ‘/etc/shadow’
  Size: 1009      	Blocks: 8          IO Block: 4096   regular file
Device: 12h/18d	Inode: 112385      Links: 1
Access: (0640/-rw-r-----)  Uid: (    0/    root)   Gid: (   42/  shadow)
Access: 2013-09-06 10:12:39.997458015 +0100
Modify: 2013-09-06 10:12:39.997458015 +0100
Change: 2013-09-06 10:12:40.005458028 +0100
 Birth: -
patrik@domov:~$ groups 
patrik lp cdrom floppy sudo audio dip video plugdev netdev
patrik@domov:~$ echo $UID 
1000
patrik@domov:~$ test -e /etc/shadow
patrik@domov:~$ echo $?
0
patrik@domov:~$ test -r /etc/shadow
patrik@domov:~$ echo $?
1
Tarmaq avatar 11.9.2013 12:06 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: Jak na kontrolu načtení souboru
ano, mas samozrejme pravdu, blbe jsem pochopil zadani..
Don't panic!
11.9.2013 21:21 mkmm
Rozbalit Rozbalit vše Re: Jak na kontrolu načtení souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
V bashi je primo test na citelnost souboru, takze by melo stacit
test -r soubor && . soubor || { echo "Nnenacteno"; exit 1; }

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.