Autor Zpráva
tomshik
Profil *
Dobrý den přeji všem, potřebuji pravidelně mazat neaktivní obrázky (nezabývejme se nyní rétorikou co jsou to neaktivní obrázky) a hodně by mi pomohlo využití zástupných symbolů. Př. potřebuji smazat obrázky jejichž název může mít tvar 12345 - 12345_x.jpg. Využití fce opendir v kombinaci s regulárními výrazy mě samozřejmě napadlo nicméně vrozená zvídavost mi velí se poptat zda neexistuje ještě elegantnějsí řešení. Takže? Předem děkuji za věcné reakce.

Abych to ještě upřesnil. Vytáhnu z dtbze záznamy u nichž si přeji smazat relevantní obrázky a moje představa je asi následující.

Tedy bodlo by mi něco jako:

foreach($results as $item){
   unlink($item['obrazek'] * ); // jasně tohle je nesmysl, ale píšu to abych vyjádřil co nejpřesněji oč mi jde.
}

$results obsahuje vychozí šablony pro název obrázku např již zmiňované 123456 pričemž je možné, že k této matrici je přidán suffix značící pořadí obrázku. A já potřebuji smazat všechny obrázky vycházející z této šablony.

Moderátor Joker: Po sobě jdoucí příspěvky sloučeny do jednoho
tomshik
Profil *
Tak vyřešeno. Kdyby náhodou někdo sháněl něco podobného případně kdyby měl někdo nějaký lepší nápad, tak pro inspiraci přikládám kód (každopádně z podobných diskusí znám ty generály po bitvě, tak případně řeči o humpolácnkém řešení nechť si dotyční vetknou za klobouk když nenavrhli jiné, lepší řešení a případná zlepšení prostá hloupých poznámek adresovaných mému postupu budou kvitovány s povděkem;-)) A nyní již ten slíbený kód:

$results =array(123456,456789,…); //v originale obsahuje vypis z dtbze obsahujici id zaznamu jehoz obrazky maji byt smazany
$dir='images'; //slozka s obrazky
$delimiter="_"; //oddelovac suffixu

$dh=opendir($dir);
while (($filename = readdir($dh)) !== false) {
  $f=explode($delimiter,$filename);
  if($results[$f[0]]){
    if(!unlink("$dir/$filename")){
      echo "Nepodařilo se smazat soubor $filename<br />";
    }else{
      echo "Soubor $filename byl úspěšně smazán<br />";
    }
  }  
}

Moderátor Chamurappi: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
tomshik
Profil *
A nebyl bych to ja kdybych nemusel napsat dodatek: samozrejme pri teto strukture pole $results by priklad nefungoval neb misto if($results[$f[0]]){...
by muselo byt
if(in_array($f[0],$results)){...
Mastodont
Profil
Určitě by to šlo i pomocí funkce glob:
http://www.php.net/manual/en/function.glob.php
tomshik
Profil *
> Chamurappi: Dám si na to pozor. Díky za upozornění
> Mastodont: Zatr sakr, vidíš tuto fci jsem jaksi opomenul. Inu lekce pokory jak má být. :-)

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