Autor Zpráva
Petr K
Profil *
Ahoj můžete mě prosím poradit? Uživatel bude mít možnost upload souborů na server respektive web a při nahrávání jsi zvolí kdy se automaticky smaže příspěvek(nahraný soubor) na webu.
Např. nahraje soubor vyberove_rizeni.doc , nastaví platnost např pomocí selectu 25.12.2009 5.00 hod a tento den a tuto hodinu se příspěvek z webu automaticky smaže! Prosím moooc jak to udělat, jsem začátečník!!!!
Děkuji
Petr
Alphard
Profil
Většinou není nutné mazat soubor v přesně zadaný čas, ale stačí smazat ho při následujícím spuštění scriptu. Dobu smazání si ulože třeba do databáze, vyberte soubory, kde je tato doba starší než aktuální čas a vybrané soubory smažte.
Abyste ušetřil výkon, tak můžete použít cron a tuto akci provádět třeba každý den v noci. Problém s překročením platnosti vyřešíte tak, že budete u výpisu souborů kontrolovat, jestli se má soubor ještě zobrazovat, nebo už ne, je to jen doplnění jednoduché podmínky.
Petr K
Profil *
vím, ale já bych to nutně potřeboval :-( smazat přesně v definovaný čas
jrm
Profil
Tak to musíš mít na serveru, kde si můžeš nadefinovat CRON.
interval.cz/clanky/jak-na-demona-cron/
AM_
Profil
Petr K:
Zkus napsat, proč to potřebuješ tak nutně v přesný čas. Cron bys musel spouštět každou minutu, neznám webhosting, který by ti umožnil v PHP dynamicky definovat dobu spuštění skriptu (šlo by to obejít přes napojení na web rozhraní, ale to by bylo dost složité).
jrm
Profil
Petr K:
Ale Alphardův návrh by ti měl vyhovovat. Soubor nemusíš přece smazat hned, stačí když nebude nabízen/zobrazen a mazat můžeš kdykoliv.
Petr K
Profil *
Omlouvám se špatně jsem se vyjádřil, děkuji jrm, soubor ze serveru nepotřebuji smazat, ale potřebuji aby se ve stanovený den a hodinu soubor přestal na webu nabízet tedy, aby nebyl zobrazen.
Př. admin nahraje a vystaví na net link:

Veřejná zakázka velkého rozsahu: Oprava auta obchodni_podminky.txt

no a potřebuji aby tento link na netu se od stanoveného data a hodiny již nevyskytoval
Děkuji
Alphard
Profil
Petr K:
Vedete si o souborech evidenci v databázi, nebo kam ukládáte jejich platnost?
AM_
Profil
Petr K:
Pak jsou dvě možnosti:
1) soubory budeš stahovat pomocí PHP skriptu, který bude hlídat, jestli je soubor ještě platný (+ hodil by se nějaký skript, který občas ty neplatné promaže)
2) opravdu jej skrz CRON smažeš v danou hodinu
Petr K
Profil *
Alphard:
Ano, v databázi mysql
Alphard
Profil
Petr K:
v databázi mysql
Takže předpokládám, že tam máte nějaký sloupec platnostDo časového typu.
Seznam dostupných souborů vyberete dotazem:
select * from tabulka where platnostDo >= now()


Mazání starých souborů bude probíhat takhle:
select * from tabulka where platnostDo < now()

a v následném cyklu se vše staré vymaže.

Pak je ještě potřeba dořešit, co se souborem po platnosti. Sice zůstává na disku (lze stáhnout po zadání přesné URL), ale neexistuje na něj odkaz. Jestli někdo ten odkaz zná, tak si ho stáhl již dříve, tudíž bych to asi ani neřešil (záleží na situaci).
Pokud se to musí řešit, jsou dvě možnosti:
První je umístit předchozí dotaz, který maže staré soubory, za každý požadavek. Pak nebudou staré soubory vůbec k dispozici.
Druhá možnost je, jak již psal AM_, znemožnit přímý přistup k souborům (v .htaccess deny from all), vždy zkontrolovat, jestli je soubor ještě platný a pokud ano, nabídnou ho ke stažení.
Obě varianty vás ale budou stát výkon navíc, takže jestli nejsou nezbytné, tak bych to neřešil.

Pak je tady třetí možnost, také již byla zmíněna, a sice cron. Ten ale není na každém hostingu. Pokud ho ale máte k dispozici a stačí vám mazat vždy v celou hodinu, bude to asi nejlepší řešení.
Petr K
Profil *
Alphard
Děkuji moc!

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: