Létrehoz egyedi nevet a feltöltött fájlok

Dmitry Eliseev »Blog» Programozás »generál egy egyedi fájlnevet a PHP projekt

Létrehoz egyedi nevet a feltöltött fájlok

C legelső támogató projektek fájlfeltöltés a szerverre, minden programozónak szembesül azzal, hogy létrehoz egyedi, véletlenszerűen neveket letöltött fájlokat. Több lehetőség, hogy megoldja ezt a problémát.







Tegyük fel, hogy van, hogy az összes fájlt egy mappába. A fájlok nem ismételjük, és nem volt probléma a cirill betűs jobb lenne nekik egyedi nevek, mint a

A legegyszerűbb lehetőség -, hogy használja a beépített PHP uniqid () függvényt:

Ez a függvény egy véletlen 13-karakterlánc. Ha meg kell csinálni, amíg a neveket, akkor a függvény kiszámításának hash egy véletlenszerű karakterlánc:

md5 () függvény létrehoz egy 32 karakter hosszúságú. Akkor természetesen bármilyen más funkciókat. Ha szükséges, bármilyen hosszúságú lehet állítani 1-32 vágással MD5-hash függvény substr ():

Ha szeretné tárolni kiterjesztésű fájl, a kiterjesztése a könnyű tulajdonítja a ID:

Ezek egyszerű módon, de van egy hátránya van: az egyediségét a nevét nem kontrollált, és így lehetőség van a régi fájlok felülírását véletlenszerű generációs azonos nevet az új fájlt. És ez a valószínűség magasabb, a nagyobb fájlokat menteni.

Annak elkerülése érdekében, felülírás, ellenőriznünk kell a mappát hiányában ugyanazt a fájlt. Írja meg a funkciót, hogy megszabaduljon ezt a hiányosságot:

Itt a utófeltétel hurok ellenőrzése fájl létezését. Ha egy fájl már létezik, akkor létrehozza a következő nevet. Ehelyett MD5 (microtime (). Rand (0, 9999)) generálására azonosító lehet bármilyen változata a fenti aprított.







Tekintsük a példát egy kép ezt a töltési funkciót:

A Yii terjeszkedési kényelmesen használható egy objektum $ file CUploadedFile osztály:

Segítségével a DFileHelper :: getRandomFileName () Most létrehozunk egy egyedi fájlnevet upload / images mappába, és használja azt betölteni. Most a fájlok nem írja felül, így mindkét nem fog illeszkedni a neveket.

Mint sokan tudják, hogy tárolja alkalmazás beállításait Yii szakosztály `params` a konfigurációs fájlban. Ez a megoldás nagyon egyszerű, de ez nem teszi lehetővé, hogy könnyen változtatni a beállításokat a felhasználó az oldalon vezérlőpulton. A következő kérdés az orosz fórum Yii arra késztetett, hogy megosszák a variáns az említett határozat nem kérdés.

Elég gyakran van szükség teljesítményének nyomon követésére néhány kódrészletek és nagyon lassú pályaszakaszokon a későbbi optimalizálás. Elérhető hibakereső kiterjesztés nem hatolni a fájlokat, és több levezetni csak a teljes végrehajtási idő. A helyi újratervezés és optimalizálása, ezek nem alkalmasak.

Érdeklődéssel olvasom a cikkeket, de a helyes módszer, amikor egyedi fájlnevet, amely tartalmazza ezt az anyagot, vannak kétségek.
Minden, ami a statikus módszer DFileHelper :: getRandomFileName () - előállít egy egyedi (abban az időben a generáció) fájlnév egy adott könyvtárban.
Ugyanakkor elképzelhető, hogy néhány ügyfelek (Kliens1 és Kliens2) párhuzamosan fut az alkalmazás:
Client1 van getRandomFileName módszer () - létrehoz egy egyedi nevet;
Kliens2 kéri ezt ugyanazzal a módszerrel némi késéssel, de még mielőtt a hívást Klientom1 módszer, amely kiírja a fájl a könyvtárban.

Ilyen helyzetben előfordulhat mint Klienta1 és Klienta2 jön létre az azonos „egyedi” a neve, de Kiiens2 nem tud róla, mert client1 még nem termelt fájlbejegyzés a könyvtárban, és mert csak akkor file_exists módszer ( ) meg tudja határozni, hogy egy fájl ugyanazzal a névvel már létezik a könyvtárban.

Úgy gondolom, hogy miután a generációs egyedi nevet kell azonnal rögzíti a fájl a könyvtárban (üres), majd vissza, egy igazán egyedi az ügyfél nevét.

Seychac belőle takarít csak rand (0, 9999) a neve, ami miatt rendkívül kicsi veryatnost ezt az eseményt:

Növelheti a felső határ legfeljebb egymillió, ami csökkenti annak lehetőségét, hogy megfelelő legfeljebb egymillió.

De még mindig létre egy üres fájlt nem menti a „jobb” is, nem lesz azonnali.




Kapcsolódó cikkek