Autor Zpráva
Tonny
Profil *
Ahoj,
potřeboval bych od souboru, který nahrává uživatel nějakým způsobem odseparovat příponu (potřebuji ji ukládat do databáze) a nevím jak na to a bohužel mě ani nenapadlo pod jakými "keywords" to hledat.
Napadlo mě, že by to mohlo jít pomocí explode, kde by odělovačem byla ".", ale pokud by uživatel nahrál subor "muj.soubor.20.11.docx" tak potom nevím jak na to :/ a potřebuji, aby to fungovalao univerzálně pro jakýkoli název.
Děkuji váš čas :)
Tonny
Alphard
Profil
pathinfo() nebo vzít poslední prvek z pole end()
Názvy obsahující více teček ale budou stejně problémové. Někdy by se člověku hodilo brát to celé. např. archiv.tar.gz2, jindy zase ne, třeba váš případ.
Ugo
Profil
co hledáš je strrpos(), najde poslední výskyt znaku

$last = strrpos($filename,'.')+1;
$pripona = ($last > 1) ? substr($filename,$last) : '';
Tonny
Profil *
Dík za radu, funguje to skvěle :)

Vypadá to asi nějak takhle.


Dík, podařilo se mi to zprovoznit tím prvním způsobem, ale tohle taky určitě zkusím :)
DarkMeni
Profil
Taky sem někde viděl funkci strrchr, měla podobný efekt.
Tonny
Profil *
Ahoj, narazil jsem na další problém :D
myslím, že řešení nebude nijak náročné, určitě na to existuje funkce, kterou, ale bohužel neznám a opět nevím jak najít...
Nyní potřebuji získat zbytek jména souboru tj. pokud se soubor jmenuje soubor.docx potřebuj získat jednak docx do proměnné $pripona (což už umím) a dále do proměnné $jemno_bez_pripony potebuji načíst soubor. Bohužel opět potřebuji vymyslet řešení, jak na to když bude název obsahovat více teček
Tori
Profil
Tonny:
do proměnné $jemno_bez_pripony potebuji načíst soubor
Název souboru, nebo obsah? Pokud obsah, tak viz file_get_contents.
Jinak koukněte ještě jednou na funkci strrpos ve [#3] - stejným způsobem jako příponu zjistíte i jméno souboru před příponou. Případně by šlo použít i str_split, ale budete asi muset vyhodit přebývající tečky na okraji jména/přípony.
edit: opraven překlep v názvu funkce.
Tonny
Profil *
Tori:O funkci jsem si přečetl na interval.cz a pokud jsem to dobře pochopil tak by kod ($last = strrpos($filename,'.')+1;.... ) fungovat neměl, protože funkce najde první tečku a za ní vybere zbytek. takže pokud bych měl soubor "nazev.souboru.s.h.r.o.m.a.d.o.u.tecek.docx" tak jako $last vrátí "souboru". Je dost možné, že jsem kod pochopil špatně, přeci jen toto je oblast PHPka, o kterou jsem se dosud nezajímal, takže jsem začátečník což je i důvod, proč mě nenapadá jak tuto funkci použít k získání zbytku názvu souboru (bez přípony). Děkuji za trpělivost :)


Sorrry :D četl jsem špatnou funkci .... :D kouknu na to snad to pochopím, kdyby se ti ale chtelo napsat mi nějaký konkrétní příklad (kod) byl bych ti vděčný :)
Tori
Profil
Tonny:
Jsem se překlepla, myslela jsem strrpos, pardon.

funkce najde první tečku a za ní vybere zbytek
Strrpos najde poslední tečku. Část napravo nebo nalevo od tečky se získá fcí substr, koukněte na použití.
Ugo
Profil
function rozdelNazevSouboru($nazev) {
  $pripona="";
  if(($tecka = strrpos($nazev,'.')) !== false) {
    $pripona = substr($nazev,$tecka+1);
    $nazev= substr($nazev,0,$tecka);
   } 
   return array('pripona'=>$pripona,'nazev'=>$nazev);
 }
 
 $info = rozdelNazevSouboru("test.php");
 echo "Pripona: ".$info['pripona']."<br>Nazev: ".$info['nazev']; 
 
mělo by to fungovat
Tonny
Profil *
Dík, supr funguje to :)
Kcko
Profil
Ugo:
totéž a mnohem více dělá pathinfo, ale tak co s volným časem, že? ;-)
Ugo
Profil
Kcko:
je to možné, já neznám všechny funkce a i z minulosti mám zkušenosti že některé je kvůli kompatibilitě lepší si dělat sám, například kdysi jsem nemohl používat explode/implode protože prostě nefachali na serverech kde jsem dělal, takže jsem si je taky musel dělat sám, nicméně pathinfo bylo zmíněno hned na začátku. Ale děkuju za kopnutí (btw. ano nudím se v práci :) )
Kcko
Profil
Ugo:
Kde Ti nefungovalo explode? To by mě zajímalo ;))
Ugo
Profil
byl to wz asi před 7 lety, vím že kvůli wz jsem se naučil i používat mysql_result protože to byla jediná funkce co tam fungovala a donedávna jsem ho ještě používal pro svou ohromnou rychlost :) podpora sice říkala že fungovat má, ale ani jejich ani tuna příkladů z netu prostě nešla přitom na lokále to bylo v pohodě tak sme usoudil že je to na pytel, podobný to jistě bylo i s explode, jinak nevím proč bych si psal vlastní ... nebo to možná byla už předtucha že tam funguje if/while/echo a stim si člověk musí nějak vystačit :D

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0