Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: pliki jpg => tablica , jak ?
Forum PHP.pl > Forum > PHP
mat2k
Otoz mam problem - Pliki jpg sa w roznych folderach i chce zeby je wylistowal do tablicy , jak to zrobic
lisu
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
[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
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
DeyV
[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 winksmiley.jpg
scanner
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]
DeyV
he he - oczywiście masz rację.
scanner
DeyV: dzięki smile.gif

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 smile.gif
DeyV
jak już jesteśmy przy lepszych sposobach winksmiley.jpg 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
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
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
spenalzo, po prostu dzisiaj byłm dobry dzień i popracowaliśmy sobie nad czymś w miarę uniwersjalnym smile.gif Oczywiście nasze modyfikacje nie umiejszają skuteczności Twojego rozwiązania smile.gif
spenalzo
Cytat
Oczywiście nasze modyfikacje nie umiejszają skuteczności Twojego rozwiązania smile.gif

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 smile.gif 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
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.