Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]glob()
Forum PHP.pl > Forum > Przedszkole
ZaXaZ
Jak mogę pominąć foldery wyświetlane z glob()? żeby sam plik był.
Mógłbym np. substr ale nie chce, jest coś szybszego? jakaś oficjalna funkcja co pomija foldery?
trueblue
Google się kłania: http://stackoverflow.com/questions/1408437...glob-only-files
ZaXaZ
Cytat(trueblue @ 21.04.2014, 21:33:17 ) *


wybacz, ale nie zrozumiałes :/...
wiem jak mogę wyświetlać pliki o danym rozszerzeniu z danego folderu.

ale funkcja wyświetla też folder jaki jest podany a ja chce zeby to np. tak działało że
glob("folder/folder2/folder3/*.jpg")

a to wyświetla zamiast
plik1.jpg
plik2.jpg
plik3.jpg
itd to
folder/folder2/folder3/plik1.jpg
folder/folder2/folder3/plik2.jpg
folder/folder2/folder3/plik3.jpg

lub coś źle robię.
trueblue
Źle zrozumiałem, bo wyglądało jakbyś chciał zwracać tylko pliki a nie foldery, i w linku jest rozwiązanie.
Jednak nadal nie rozumiem, bo w pierwszym poście piszesz, że chcesz pomijać foldery (w ścieżce jak rozumiem), a w powyższym jakoby Ci brakowało pełnej ścieżki.
Doklej ją po prostu do wyszukanych plików.
ZaXaZ
Cytat(trueblue @ 21.04.2014, 21:58:56 ) *
Źle zrozumiałem, bo wyglądało jakbyś chciał zwracać tylko pliki a nie foldery, i w linku jest rozwiązanie.
Jednak nadal nie rozumiem, bo w pierwszym poście piszesz, że chcesz pomijać foldery (w ścieżce jak rozumiem), a w powyższym jakoby Ci brakowało pełnej ścieżki.
Doklej ją po prostu do wyszukanych plików.



Przyznaje, są dni gdy jestem śpiący i nie umiem się wysłowić biggrin.gif

no to jeszcze raz, szczegółowo i w skrócie:

podaje w glob ścieżkę do pliku, (działa)
jednak poza nazwą pliku wyświetla przed ścieżkę a ja chce żeby były same pliki, i też nie chce przez substr chyba że to będzie najszybsze...
trueblue
Zmień katalog chdir'em i wtedy użyj glob().
ZaXaZ
Cytat(trueblue @ 21.04.2014, 22:51:37 ) *
Zmień katalog chdir'em i wtedy użyj glob().


coś chyba źle robię

  1. $katalog = glob('folder/folder1/*.php');
  2. foreach($katalog as $pliki)
  3. {
  4. chdir($pliki);
  5. echo $pliki."\r\n";
  6. }

Kod
Warning: chdir(): Not a directory (errno 20)


edit: jak dałem chdir pod $katalog nadal błąd ale inny, tak jak na dole pisałem działa tak jak chciałem, jednak nie wiem czy to najszybsze.

wpadłem na inny pomysł, tylko nie wiem czy szybszy od substr:
str_replace('folder/folder1', '', $pliki);
trueblue
chdir przed wywołaniem glob(). Na: folder/folder2/folder3/
Pyton_000
  1. end(explode('/', $plik));
ZaXaZ
Cytat(trueblue @ 22.04.2014, 08:42:37 ) *
chdir przed wywołaniem glob(). Na: folder/folder2/folder3/


czyli mam stworzyć pustą zmienna ("") lub z ścieżką? ("folder/folder2"),
piszę tak dlatego że dałem cały skrypt...
a po modydikacji tak by wyglądało:
  1. chdir('folder/folder1/');
  2. $katalog = glob('folder/folder1/*.php');
  3. //tu już było chdir i błąd jak zmienną $katalog
  4. foreach($katalog as $pliki)
  5. {
  6. //tu też chdir błąd jak się da zmienną $pliki
  7. echo $pliki."\r\n";
  8. }

i to już nic nie zwraca,
a mi chodzi o efekt jak to. Tylko szybszy jeśli istnieje:
  1. foreach(str_replace('folder/folder2/', '', glob('folder/folder2/*.php')) as $pliki) echo $pliki."\r\n";

@up napisał równo ze mną, zaraz sprawdze czy działa i jak tak to czy szybsze.
trueblue
Jeśli zmieniłeś katalog, to szukasz względem niego, więc:
  1. $katalog = glob('*.php');
ZaXaZ
Cytat(trueblue @ 22.04.2014, 09:48:02 ) *
Jeśli zmieniłeś katalog, to szukasz względem niego, więc:
  1. $katalog = glob('*.php');


ale ja to samo mam przecież tylko z podanymi folderami... tylko że z str_replace + foreach (tak jak u góry w moim poscie)
trueblue
Myślałem, że szukasz szybciej działającego rozwiązania.
ZaXaZ
Cytat(trueblue @ 22.04.2014, 10:16:55 ) *
Myślałem, że szukasz szybciej działającego rozwiązania.


no bo szukam, ale ma działać tak jak moje tylko że lepiej:
moje działa tak że wyświetla wszystkie pliki php wraz z ścieżką która została pobrana, następnie zamienia wyswietlana ścieżkę na nic '' tylko że ja chce coś szybszego a to co napisałeś działa jak moje (tylko że nie można zejść folder ani dwa niżej bo nie został podany;
edit: oraz wyświetli z ścieżką pliki a chce bez.
trueblue
glob nie działa rekurencyjnie i nie zagłębi się w podkatalogi.
A jeśli chcesz wyświetlać tylko nazwy plików z danego katalogu, to już wcześniej podałem Ci rozwiązanie:
  1. chdir('./katalog/');
  2. $katalog = glob('*.php');

wyświetli tylko pliki php, bez pełnej ścieżki, tylko z katalogu /katalog, bez zagłębiania się.
ZaXaZ
Cytat(trueblue @ 22.04.2014, 10:52:28 ) *
glob nie działa rekurencyjnie i nie zagłębi się w podkatalogi.
A jeśli chcesz wyświetlać tylko nazwy plików z danego katalogu, to już wcześniej podałem Ci rozwiązanie:
  1. chdir('./katalog/');
  2. $katalog = glob('*.php');

wyświetli tylko pliki php, bez pełnej ścieżki, tylko z katalogu /katalog, bez zagłębiania się.


pisałem przecież że działa... ale wyświetla mi tak:

folder/folder2/plik.php
folder/folder2/plik2.php

proszę, jak możesz przetestuj mój skrypt...
bo zapewniam cię że działa.
tylko że ja chce żeby szybciej działało.
trueblue
A co podałeś jako parametr w chdir?
ZaXaZ
Cytat(trueblue @ 22.04.2014, 10:59:07 ) *
A co podałeś jako parametr w chdir?


wcześniej jak testowalem to folder/folder2 ale jakiś tam błąd wyrzucalo
trueblue
W katalogu gdzie jest skrypt, jest również katalog /folder, a w nim /folder2.
W /folder/folder2 jest plik test.php
  1. chdir('folder/folder2');
  2. $katalog = glob('*.php');
  3. foreach($katalog as $pliki)
  4. {
  5. echo $pliki."\r\n";
  6. }

Wynik:
test.php
MS500
Witajcie, mam pewien problem z funkcją glob. Na razie pracuję na serwerze lokalnym. Chciałabym napisać kod, który:
1) wyszuka wszystkie pliki z rozszerzeniem .txt ze wskazanego katalogu
2) sprawdzi czy wśród tych plików jest już taki który ma nazwę taką samą jak wartość przesłana za pomocą $_POST
3) jeśli nazwa jest taka sama, wyświetli komunikat, że taki użytkownik już istnieje, a jeśli nie ma wśród wyszukanych plików takiej nazwy, jak w $_POST, to zapisze nowy plik .txt o nazwie z $_POST

Na razie wkleję tylko kod, który ma opisywać punkt 1) czyli ma pokazywać wszystkie pliki z domyślnego katalogu public, jednak niestety nie działa (pokazuje błąd).
Co jest w nim nie tak?

  1. <?php
  2.  
  3. class Glob {
  4.  
  5. public function Search($filename) {
  6. foreach(glob("*.txt") as $filename);
  7. return $filename;
  8. }
  9.  
  10. }
  11.  
  12. $obiekt = new Glob;
  13. echo $obiekt->Search();
  14.  
  15. ?>
viking
Ale po co chcesz wczytać wszystkie pliki żeby sprawdzić czy jeden występuje? https://www.php.net/manual/en/function.file-exists.php
MS500
Rzeczywiście, z file_exists działa jak należy, dzięki c:
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.