Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: porownywanie nazwy plikow przez preg_match
Forum PHP.pl > Forum > PHP
kajko84
Witam

napisalem kod ktory zczytuje wszystkie pliki w podanej przeze mnie sciezce. chcialem zeby sprawdzal czy pliki maja rozszerzenie .jpg i jesli tak to robi z nimi kolejne rzeczy (miniaturki, kopiuje itp - skrypt importu fotek do galerii). do sprawdzenia rozszerzenia uzylem preg_match" title="Zobacz w manualu php" target="_manual i zrobilem cos takiego:

  1. <?php
  2. preg_match( '/^(.+?).(jpg)$/i', $plik, $out )
  3. ?>


na testowym serwerze postawionym na windowsie wszystko jest ok, ale na linuxowym juz nie. chodzi tu o wielkosc znakow, probowalem zarowny z tym i na koncu jak i bez, caly czas to samo, jesli plik ma w nazwie duze litery jest lipa. funkcja zaspisuje do zmiennej jego nazawe malymi no i wszystko sie sypie bo dalsza czesc skryptu odwoluje sie do "nieistniejacych" plikow.

wiem ze podobnych tematow juz tu troche bylo, ale nie znalazlem nic co by mi pomoglo, a siedze nad tym od rana... prosze o pomoc

dzieki i pozdrawiam
siemakuba
Może zamiast wyrażeń regularnych użyj funkcji pathinfo" title="Zobacz w manualu php" target="_manual?
Jako parametr podajesz ścieżkę do pliku, w odpowiedzi dostajesz tablicę ze ścieżką, nazwą i rozszerzeniem.

Inna opcja - dbaj o to żeby wszystkie pliki miały rozszerzenie pisane małymi literami - zwalcz problem u źródła :)

pozdr.
Speedy
Po skorzystaniu z funkcji pathinfo" title="Zobacz w manualu php" target="_manual, o której wspomniał przedmówca, zamień sobie odczytane rozszerzenie na małe litery za pomocą funkcji strtolower" title="Zobacz w manualu php" target="_manual, porównaj to z frazą `jpg` i po krzyku.
bendi
Coś musisz źle robić (dodałem spację, żeby mi łyknął nazwy plików rozdzielone spacjami):
Kod
marek@marek-desktop:~$ php -r 'preg_match_all( "/ (.*?)\.(jpg)/i", " bla.jpg dupa.JPG", $m );print_r($m);'
Array
(
    [0] => Array
        (
            [0] =>  bla.jpg
            [1] =>  dupa.JPG
        )

    [1] => Array
        (
            [0] => bla
            [1] => dupa
        )

    [2] => Array
        (
            [0] => jpg
            [1] => JPG
        )

)

Jak widać wielkość liter nie ma znaczenia, wszystko jest ładnie pięknie zapisywane w tablicy wynikowej.
kajko84
wielkie dzieki za pomoc, problem rozwiazany...

co do samego preg_match" title="Zobacz w manualu php" target="_manual'a to rzeczywiscie "robilem cos zle" smile.gif konkretnie to 2 linijki wczesniej mialem cos takiego:

  1. <?php
  2. while ($plik = strtolower(readdir($folder))) {
  3. ?>


jednak zanim to zauwazylem napisalem to samo z uzyciem funkcji pathinfo" title="Zobacz w manualu php" target="_manual i uzyskalem w gruncie rzeczy taki sam efekt

dziekuje jeszcze raz za pomoc i poswiecony czas
pozdrawiam
bendi
Polecam glob" title="Zobacz w manualu php" target="_manual
kajko84
swietna funkcja, bardzo sie przyda.
dzieki i pozdrawiam
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.