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 * |
#3 · Zasláno: 27. 9. 2010, 09:38:05
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 |
#4 · Zasláno: 27. 9. 2010, 10:13:27
Určitě by to šlo i pomocí funkce glob:
http://www.php.net/manual/en/function.glob.php |
||
tomshik Profil * |
#5 · Zasláno: 27. 9. 2010, 10:25:34
> 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. :-) |
||
Časová prodleva: 14 let
|
0