Létrehoz egyedi nevet a feltöltött fájlok
Dmitry Eliseev »Blog» Programozás »generál egy egyedi fájlnevet a PHP projekt

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.