Portál AbcLinuxu, 10. května 2025 03:12

Dotaz: php array file_exists

petka avatar 3.8.2011 15:39 petka | skóre: 25 | blog: heydax | Klasterec N/O
php array file_exists
Přečteno: 435×
Odpovědět | Admin

Resim tu asi jednoduchou vec , potreboval bych zjistovat existenci souboru z pole .

Budu mit treba v databazi seznam souboru treba soubor.txt , soubor2.txt , soubor.jpg atd ...

Chtel bych z tohoto pole hledat soubory na disku a pripadne s nima dal pracovat .

Napadl me for s countem pro pole , nebo foreach .

V mem prikladu zpracuje jen prvni slovo v poly .

Ubuntu server - Asus E35M1​-M ​- AMD Hudson M1 , 2x Technisat Skystar2 , 2x 1GB Lan , WiFi mod AP ,vdr,mysql,apache2...

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

3.8.2011 19:13 Kit
Rozbalit Rozbalit vše Re: php array file_exists
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nějak nerozumím dotazu. Máš ten seznam souborů v databázi, v poli, v poly nebo v adresáři? Asi jsi zapomněl ten příklad přiložit, protože pokud máš názvy v poli, foreach to zvládne.

BTW: Tady můžeš klidně psát česky, server to zvládne a dotaz buje možná srozumitelnější. Dokonce ani nemusíš dělat mezery před interpunkcí a dělat pro každou větu samostatný odstavec.
Řešení 2× (petka (tazatel), l0gik)
3.8.2011 21:03 romanov | skóre: 3
Rozbalit Rozbalit vše Re: php array file_exists
Odpovědět | | Sbalit | Link | Blokovat | Admin
mno esli spravne chapu tvy zadani, tak je to easy:
$pole = array( "nazev_1", "nazev_2", "nazev_n");
foreach( $pole as $nazev ) {
     if( file_exists( $nazev ) ){
          // blok prikazu
     } else {
          echo "soubor neexistuje";
     }
}
petka avatar 4.8.2011 12:12 petka | skóre: 25 | blog: heydax | Klasterec N/O
Rozbalit Rozbalit vše Re: php array file_exists

Tak prikladam kod .

/* funkce na ovladani sym linku */
function share_action ($id,$genre,$name,$total,$from,$by,$sort,$year)
{
$exp_name = str_replace(" ","_",(trim($name)));
$array_genre = explode(",", $genre );


for($i = 0; $i < count($array_genre); $i++)
{
$video_link = "/mnt/disk01/sym_link_movies/".dir_file_name($array_genre[$i])."/".dir_file_name($exp_name)."_".$year."/video.avi";

$array_disc = array("/mnt/disk01/id_movies/", "/mnt/disk02/id_movies/" , "/mnt/disk03/id_movies/");
for($d = 0; $d < count ($array_disc); $d++)
{

if (file_exists($array_disc[$d].$id.".avi"))
{       

if (file_exists($video_link))
{$img = "<a href=\"/movies/share_movie.php?razeni=".$sort."&id=".$id."&share=off&celkem=".$total."&od=".$from."&by=".$by. "\"><img src=\"/movies/img/off.png\"></a>";}
else
{$img = "<a href=\"/movies/share_movie.php?razeni=".$sort."&id=".$id."&share=on&celkem=".$total."&od=".$from."&by=".$by."\"><img src=\"/movies/img/on.png\"></a>";}
return $img;
}       
else

{$img = "<img src=\"/movies/img/warning.png\">";}
return $img;

}//konec for pro diskova pole
}//konec for pro genre
}//konec funkce

/* konec funkce */


Funkce probehne v poradku , ale zkontroluje jen prvni misto v poly disc , na dalsi kasle .

Zkousel jsem i  foreach , ale bohuzel se stejnym vysledkem .

Ubuntu server - Asus E35M1​-M ​- AMD Hudson M1 , 2x Technisat Skystar2 , 2x 1GB Lan , WiFi mod AP ,vdr,mysql,apache2...
4.8.2011 13:03 Kit
Rozbalit Rozbalit vše Re: php array file_exists
Máš chybně definovanou hodnotu proměnné $video_link. Patří dovnitř cyklu. Pokud bys používal foreach, tak bys na to možná přišel sám.
petka avatar 4.8.2011 14:49 petka | skóre: 25 | blog: heydax | Klasterec N/O
Rozbalit Rozbalit vše Re: php array file_exists

$video_link je v poradku , me jde o $array_disc , projede jen prvni z pole a dalsi se uz netestujou .

Ubuntu server - Asus E35M1​-M ​- AMD Hudson M1 , 2x Technisat Skystar2 , 2x 1GB Lan , WiFi mod AP ,vdr,mysql,apache2...
4.8.2011 15:15 Kit
Rozbalit Rozbalit vše Re: php array file_exists
No jo, víš o tom, že tam máš 2x return $img; uvnitř cyklu?
petka avatar 4.8.2011 15:24 petka | skóre: 25 | blog: heydax | Klasterec N/O
Rozbalit Rozbalit vše Re: php array file_exists

Jsou tam dve podminky , pro kazdou jeden return , v pripade ze jeden zakazu , tak uz to nefunguje jak ma .

Ubuntu server - Asus E35M1​-M ​- AMD Hudson M1 , 2x Technisat Skystar2 , 2x 1GB Lan , WiFi mod AP ,vdr,mysql,apache2...
4.8.2011 15:33 Kit
Rozbalit Rozbalit vše Re: php array file_exists
Řekl bych, že druhý return má být uvnitř druhého else. Takto se provede vždy po prvním průchodu cyklem.
4.8.2011 15:46 Kit
Rozbalit Rozbalit vše Re: php array file_exists
Mělo být: return až za koncem for pro disková pole. Tím pádem je druhý else zbytečný.
4.8.2011 15:57 Kit
Rozbalit Rozbalit vše Re: php array file_exists
A pokud chceš projít všechny žánry, tak ještě o řádek níž.

Tohle je typický případ, kdy je lepší for nahradit konstrukcí foreach. Zmizí proměnné $i a $d. Zmizí i funkce count(). Skript se tím hodně zpřehlední.
petka avatar 4.8.2011 15:58 petka | skóre: 25 | blog: heydax | Klasterec N/O
Rozbalit Rozbalit vše Re: php array file_exists

Nejdriv se testuje jestli existuje soubor na disku , v pripade ze ne vrati varovani a v pripade ze soubor existuje tak zkontroluje jestli uz nejsou symbolicke linky hotove , v pripade ze ano tak mi zdeli ze uz je hotovo , v pripade ze ne tak mi nabidne jejich vytvoreni .

Ubuntu server - Asus E35M1​-M ​- AMD Hudson M1 , 2x Technisat Skystar2 , 2x 1GB Lan , WiFi mod AP ,vdr,mysql,apache2...
4.8.2011 16:08 Kit
Rozbalit Rozbalit vše Re: php array file_exists
Jenže ty otestuješ, jestli je soubor na disku a hned na konci prvního běhu cyklu dáváš nepodmíněný return - je mimo větev else.
petka avatar 4.8.2011 17:46 petka | skóre: 25 | blog: heydax | Klasterec N/O
Rozbalit Rozbalit vše Re: php array file_exists

Dik mrknu na to , dost se v tom uz ztracim .

Ubuntu server - Asus E35M1​-M ​- AMD Hudson M1 , 2x Technisat Skystar2 , 2x 1GB Lan , WiFi mod AP ,vdr,mysql,apache2...
4.8.2011 18:01 Kit
Rozbalit Rozbalit vše Re: php array file_exists
Hodně by tomu pomohlo, kdyby ses naučil odsazovat. Je několik způsobů, každý z nich má své výhody a nevýhody. Mají však společnou výhodu, že chyby se v nich hledají mnohem lépe. Abych tvůj problém pochopil, musel jsem si to celé přeformátovat. Výsledek má sice jen 19 řádek, ale je pro mne mnohem srozumitelnější a vidím v něm další logické chyby.

Takže si zaveď nějakou kulturu psaní zdrojáku a drž se jí. A nauč se před tečkou a čárkou nedělat mezeru, vypadá to děsně. Absenci nabodeníček už snad nějak překousnu.
petka avatar 4.8.2011 18:32 petka | skóre: 25 | blog: heydax | Klasterec N/O
Rozbalit Rozbalit vše Re: php array file_exists

Funguje , ja vim je to sprasene , ale me jde hlavne ted o funkcnost , az to bude hotove tak zacnu cistit , komentovat atd...

/* funkce na ovladani sym linku */
function share_action ($id,$genre,$name,$total,$from,$by,$sort,$year)
{
$exp_name = str_replace(" ","_",(trim($name)));
$array_genre = explode(",", $genre );
$array_disc = array("/mnt/disk01/id_movies/", "/mnt/disk02/id_movies/" , "/mnt/disk03/id_movies/");

for($d = 0; $d < count($array_disc); $d++)
{
$disc = ($array_disc[$d].$id.".avi");
if (file_exists($disc))
{

for($i = 0; $i < count($array_genre); $i++)
{
$video_link = "/mnt/disk01/sym_link_movies/".dir_file_name($array_genre[$i])."/".dir_file_name($exp_name)."_".$year."/video.avi";


if (file_exists($video_link))
{$img = "<a href=\"/movies/share_movie.php?disc=".$disc."&razeni=".$sort."&id=".$id."&share=off&celkem=".$total."&od=".$from."&by=".$by. "\"><img src=\"/movies/img/off.png\"></a>";}
else
{$img = "<a href=\"/movies/share_movie.php?disc=".$disc."&razeni=".$sort."&id=".$id."&share=on&celkem=".$total."&od=".$from."&by=".$by."\"><img src=\"/movies/img/on.png\"></a>";}
return $img;
}//konec for pro genre
}

}

if (!file_exists($disc))
{
{$img = "<img src=\"/movies/img/warning.png\">";}
return $img;
}


}//konec funkce


Ubuntu server - Asus E35M1​-M ​- AMD Hudson M1 , 2x Technisat Skystar2 , 2x 1GB Lan , WiFi mod AP ,vdr,mysql,apache2...
4.8.2011 19:08 Kit
Rozbalit Rozbalit vše Re: php array file_exists
Tak teď to vypadá opravdu příšerně. Vůbec se nedivím, že se v tom nemůžeš vyznat, když máš i komentáře špatně. Hlavně se nauč odsazovat a cykly typu foreach. A taky používat interpunkci. Vůbec nečteš, co píšu.
petka avatar 4.8.2011 20:59 petka | skóre: 25 | blog: heydax | Klasterec N/O
Rozbalit Rozbalit vše Re: php array file_exists

Muj olibeny editor je vim , vse krasne zabarvuje . Po vlozeni kodu sem na abicko se rozpadne formatovani .

Ubuntu server - Asus E35M1​-M ​- AMD Hudson M1 , 2x Technisat Skystar2 , 2x 1GB Lan , WiFi mod AP ,vdr,mysql,apache2...
4.8.2011 21:14 Kit
Rozbalit Rozbalit vše Re: php array file_exists
Také používám VIM, ale při přetahování sem problémy nemám. Ani mi nevkládá ty příšerné mezery před čárky.

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.