2016-12-06 5 views
0

Meine Benutzer können Profilbilder eins nach dem anderen hochladen, aber so oft sie möchten.Auto-Inkrement-Nummer innerhalb des Dateinamens

Lasst uns annehmen Benutzer 1 uploads ein Bild, dieser Code es meinen Uploads-Ordner gespeichert werden:

<?php 

$fileData = pathinfo(basename($_FILES["fileToUpload"]["name"])); 

$fileName = 'user_id_#1#_profilepic_#' . uniqid() . '#.' . $fileData['extension']; 

$target_path = "uploads/" . $fileName; 

while(file_exists($target_path)) { 
    $fileName = 'user_id_#1#_profilepic_#' . uniqid() . '#.' . $fileData['extension']; 
    $target_path = ($_SERVER['DOCUMENT_ROOT'] . "uploads/" . $fileName); 
} 

if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_path)) { 

    echo "The image was successfully uploaded. <a href='index.php'>Add another image</a>"; 
} 
else { 
    echo "There was an error uploading the file, please try again!"; 
} 

?> 

Diese uniqid() ersetzt werden muss, weil es ein Alptraum ist später auf die Bilder zu finden in die richtige Reihenfolge.

Ich möchte die Bilder - nach dem Hochladen - wie folgt aussehen:

user_id_#1#_profilepic_#1#.jpg 
user_id_#1#_profilepic_#2#.jpg 
user_id_#1#_profilepic_#3#.png 
user_id_#1#_profilepic_#4#.gif 
user_id_#1#_profilepic_#5#.jpg 
and so on... 

Wie kann ich das tun? Ich habe noch keine Ideen.

+0

Warum nicht etwas wie einen Zeitstempel verwenden? '$ fileName = 'user_id_ # 1 # _profilepic_ #'. Zeit() . "#." . $ fileData ['extension']; ' – AbraCadaver

+0

weil ich überhaupt nicht von dieser Option wusste, aber jetzt frage ich mich, wie ich diesen Namen vielleicht lesen könnte, wenn ich die verschiedenen Bilder anzeigen möchte? Wenn ich eine Autoinkrementnummer in meinem Dateinamen habe, kann ich einfach mit den höchsten Zahlen beginnen und zu niedrigeren Zahlen bei Klick gehen. Aber wenn eine Zeit in den Dateinamen involviert ist, wird das nicht funktionieren, oder? – Maxischl

+1

'$ users_files = glob ('user_id_ # 1 # _profilepic _ # *. *');' – AbraCadaver

Antwort

0

Sie nach Dateinummer in Ihrem Verzeichnis erhöhen können (nicht empfehlenswert, wenn Ihre Benutzer seine Bilder löschen):

$total_files = count(glob("./*",GLOB_BRACE)); // count files in directory 
echo $total_files; 

OR:

eine Textdatei verwenden, in dem Sie eine Nummer notieren. Beispiel: Sie laden eine Datei hoch: Holen Sie sich die aktuelle Nummer in der Textdatei -> add +1 und benennen Sie die Datei mit dieser Nummer um -> notieren Sie die neue Nummer in der TXT-Datei.

Der beste Weg sollte eine eindeutige ID aus dem Datenbankdatensatz sein, aber Sie verwenden möglicherweise keine DB.

Ich hoffe, dass Ihnen helfen.

Einen schönen Tag noch!

+0

danke, ich dachte darüber nach, aber du hast es schon erwähnt: wenn der Benutzer eine Datei löscht, wird die gesamte Nummer- System wird beim nächsten Upload zerstört. Deshalb kann ich es nicht benutzen. ich lese früher über das text-dingything, aber das bedeutet, dass ich für jeden benutzer und jeden bildtyp (profilbild, blogbild, postbilder etc.) eine neue datei erstellen muss, Recht? das scheint mir auch nicht der klügste Weg zu sein. – Maxischl

+0

Vielleicht können Sie das "count (glob (...) System verwenden und überprüfen, ob der Name bereits mit der scandir() Funktion verwendet wird. – x2aces

+0

Sorry für meinen vorherigen Kommentar, es ist mein erstes Mal auf Stackoverflow und ich weiß noch nicht wie Um die Textformatierung zu verwenden ^^ – x2aces

Verwandte Themen