mat2k
7.06.2003, 15:22:32
Otoz mam problem - Pliki jpg sa w roznych folderach i chce zeby je wylistowal do tablicy , jak to zrobic
Zrób funkcje, która wrzuca pliki jpg z danego katalogu do tablicy, wywołaj funkcje dla każdego z katalogów.
Popatrz, pomyśl, wykonaj, napisz na forum.
spenalzo
7.06.2003, 18:47:50
[php:1:5bf58e2304]<?php
$kat=array("foto1","foto2","foto3","foto4");
for($i=0; $i<count($kat); $i++)
{
$dir=opendir($kat[$i]);
while($file=readdir($dir))
{
$tmp=explode(".",$file);
if($tmp[1]=="jpg" || $tmp[1]=="JPG")
{
$tab[$kat[$i]][]=$file;
}
}
closedir($dir);
}
// Tablica wygląda tak:
// $tab["foto1"][2] = "foto0001.jpg";
?>[/php:1:5bf58e2304]
Ograniczenia: pliki mogą zawierać tylko jedną kropkę.
scanner
9.06.2003, 09:08:26
spenalzo: co opwiesz na to?
[php:1:6cc43c5b8a]<?php
$arrFolders = array('foto1', 'foto2', 'foto3', 'foto4');
$arrAllowedExt = array('.jpg', '.gif'); // rozszerzenie jako lower case
foreach($arrFolders as $strCurrent) // bez liczenie długości tablicy
{
$resDir = opendir($strCurrent);
while($strFile = readdir($resDir))
{
$tmp = str2lower($strFile); // .jpg .Jpg. jPg . JPG .jPG
$strFileExt = substr($tmp, -4); // cztery ostatnie znaki
if( in_array($strFileExt, $arrAllowedExt) )
{
$arrPictures[$strCurrent][] = $strFile;
}
}
closedir($strCurrent);
}
// Array wynikowy:
// $arrPictures['folder_name']['filename']
?>[/php:1:6cc43c5b8a]
__
Poprawiłem błąd w lini 14 - $file zamieniłem na $strFile
[php:1:21515f1a6a]<?php
$tmp = str2lower($strFile); // .jpg .Jpg. jPg . JPG .jPG
?>[/php:1:21515f1a6a]
Można tak pisać, gdy chcesz wykorzystać rozszerzenie do sprawdzenia, czy jest to grafika (if ($tmp =='.jpg') )
Jeżeli jednak chcesz wykorzystać tą tablicę do wyswietlania grafik, to musisz zapisywać w niej orginalną postać nazwy - inaczej będzie klapa
scanner
9.06.2003, 09:37:21
DeyV: Przyjrzyj się temu jeszcze raz, proszę. Ja naprawdę wiem, co piszę, hihi... :[php:1:f320a9d0dc]<?php
// (...)
$tmp = str2lower($strFile); // .jpg .Jpg. jPg . JPG .jPG
$strFileExt = substr($tmp, -4); // cztery ostatnie znaki
if( in_array($strFileExt, $arrAllowedExt) )
{
$arrPictures[$strCurrent][] = $strFile; // Zapisujemy oryginalną nazwę do tablicy
}
// (...)
?>[/php:1:f320a9d0dc]
he he - oczywiście masz rację.
scanner
9.06.2003, 10:03:37
DeyV: dzięki
A w uzupełnieniu dodam, że sprawdzanie po nazwie pliku jest prymituwnym sposobem. Lepszym (choć bardziej zasobożernym) byłoby sprawdzanie nagłówka pliku. (czyli kilku pierwszych bajtów). opiusy zawarośći można znaleźć np. na:
http://myfileformats.com/
W ten sposób może prawie w 100% zabezpieczyć się przed tym, że jako *.jpg ktoś podłozy nam *.dll
jak już jesteśmy przy lepszych sposobach

jeśli jednak sprawdzać to rozszerzenie to lepiej to robić tak [php:1:4fa7333d55]<?
$rozsz=strrchr($nazwa , '.');
?>[/php:1:4fa7333d55]
wtedy wyłapiesz również pliki typu .jpeg itp.
scanner
9.06.2003, 10:50:56
Czyli (pomijająć sprawdzanie nagłówków plików:
[php:1:757fc7725c]<?php
$arrFolders = array('foto1', 'foto2', 'foto3', 'foto4');
$arrAllowedExt = array('.jpg', '.jpeg'); // rozszerzenie jako lower case
foreach($arrFolders as $strCurrent) // bez liczenie długości tablicy
{
$resDir = opendir($strCurrent);
while($strFile = readdir($resDir))
{
$tmp = str2lower($strFile); // .jpg .Jpg. jPg . JPG .jPG
$strFileExt = strrchr($tmp, '.'); // rozszerzenie pliku (DeyV)
if( in_array($strFileExt, $arrAllowedExt) )
{
$arrPictures[$strCurrent][] = $strFile;
}
}
closedir($strCurrent);
}
// Array wynikowy:
// $arrPictures['folder_name']['filename']
?>[/php:1:757fc7725c]
spenalzo
9.06.2003, 21:25:30
Mój skrypt był po prostu odpowiedzią na prośbę :-)
Dobry pomysł jest z tym porównywaniem rozszrzenia przy różnych wielkościach liter.
scanner
9.06.2003, 21:42:47
spenalzo, po prostu dzisiaj byłm dobry dzień i popracowaliśmy sobie nad czymś w miarę uniwersjalnym

Oczywiście nasze modyfikacje nie umiejszają skuteczności Twojego rozwiązania
spenalzo
9.06.2003, 21:46:39
Cytat
Oczywiście nasze modyfikacje nie umiejszają skuteczności Twojego rozwiązania

Ty mnie scanner nie broń :-D
Wasz (Twój) skrypt był po prostu lepszy, wydajniejszy, nie oszukujmy się. Tak jak pisałem jestem zacofany z php, zatrzyamałem się mniej więcej gdzieś na wersji 3 - 4.0.5

ale manual jest na dysku i cały czas staram się z niego korzystać. Przykład: potrzbowałem funckję wyciągająca nazwę pliku ze ścieżki - no i napisałem. Ale jak się dowiedziałem ze istniej funkcja basename() to się lekko wkurzyłem. Czesto się zdarza, że robię coś naokoło :-)
scanner
9.06.2003, 21:47:43
Keep walking...
EOT
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.