PHP Upload - Existiert ?

NiclasM

Enthusiast
Thread Starter
Mitglied seit
06.02.2007
Beiträge
4.331
Ort
Dortmund
Hi

Habe folgendes Upload Skript programmiert :

Code:
<?php
	mysql_connect("localhost","root","");
	mysql_select_db("suw");
	if(isset($_GET['ID']))
	{
	mysql_query("DELETE  FROM daten WHERE ID='".$_GET['ID']."'");
	}
	
	$daten = mysql_query("SELECT * FROM daten");
	
	if(isset($_POST['button']))
	{
	$random = rand(2, 999999999);
	$endung = pathinfo($_FILES['data']['name']);
	
	echo "<center>
		  <table border='5'>
		  <tr>
				<td><b>Beschreibung</b></td>
				<td><b>Datei Name</b></td>
				<td><b>Datei Größe</b></td>
				<td><b>Type</b></td>
				<td><b>Notiz</b></td>
				<td><b>Link</b></td>
			</tr>
			<tr>
				<td>".$_POST['beschreibung']."</td>
				<td>".$_FILES['data']['name']."</td>
				<td>".$_FILES['data']['size']." KB</td>
				<td>".$endung['extension']."</td>
				<td>".$_POST['notiz']."</td>
				<td><a href='".$random.'.'.$endung['extension']."'>Download</td>
			</tr>
			<tr>
				<td colspan='4'><center><a href='upload.php'>Zurück<a/></td>
			</tr>
			</table>
			</center>";
		 
	move_uploaded_file($_FILES['data']['tmp_name'], "".$random.'.'.$endung['extension']."");
	
	mysql_query("INSERT INTO `suw`.`daten` (`ID` ,`Beschreibung` ,`Data-Name` ,`Size` ,`Type` ,`Notiz`,`Link`) VALUES (NULL, '".$_POST['beschreibung']."', '".$_FILES['data']['name']."', '".$_FILES['data']['size']."', '".$endung['extension']."','".$_POST['notiz']."', '".$random.'.'.$endung['extension']."')");
	mysql_error();
	}
	if(!isset($_POST['button']))
	{
	echo "
	<center>
	<h3>Datei Hochladen</h3>
	<form action='upload.php' method='post' enctype='multipart/form-data'>
	<table border='5'>
	<tr>
		<td><b>Beschreibung</b></td>
		<td><b>Pfad</b></td>
		<td><b>Noziz</b></td>
		
	</tr>
	<tr>
		<td><input type='text' name=beschreibung></td>
		<td><input type='file' name='data'></td>
		<td><input type='text' name='notiz'></td>
		<td><input type='submit' value='Hochladen' name='button'></td>
	</tr>
	</table>
	</form>
	</center>
	<hr>
	<center><h3>Liste aller auf dem Server liegenen Dateien</h3></center>
	<center>
	<table border='5'>
	<tr>
		<td><b>Beschreibung</b></td>
		<td><b>Datei Namen</b></td>
		<td><b>Größe in KB</b></td>
		<td><b>Typ</b></td>
		<td><b>Noziz</b></td>
		<td><b>Download Link</b></td>
		<td><b>Bearbeiten</b></td>
	
	";
		while($data = mysql_fetch_array($daten))
		{
			echo "<tr>";
			echo "<td>".$data['Beschreibung']."</td>";
			echo "<td>".$data['Data-Name']."</td>";
			echo "<td>".$data['Size']."</td>";
			echo "<td>".$data['Type']."</td>";
			echo "<td>".$data['Notiz']."</td>";
			echo "<td><a href='".$data['Link']."'>Download</a></td>";
			echo "<td><a href=upload.php?ID=".$data['ID'].">Löschen";
			echo "</tr>";
		}
	echo "</table>
		  </center>
	";
	}
?>

Nun weiß ich nicht wie ich es impimentiere ob er voher prüft ob schonmal die random Zahl die der datei Name seien soll exisitert. Wenn ja soll er eine neue Zahl generieren, halt solange bis er eine nochnicht benutze gefunden hat ...

PS : Sonst funktioniert das Super :banana:
 
Zuletzt bearbeitet:
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Hi,

mehrer Möglichkeiten:
1.) In deine MySQL-Tabelle eine neue Spalte "random" einfügen.
Überprüfen, ob random schon drin steht.
Finde ich persönlich die bessere / ressourcensparendere Variante

2.) readdir, dateinamen auslesen, in array schreiben. Überprüfen ob random in Array steht.

Mfg.
 
Statt 2.) lieber die Funktion "file_exists" ;)
 
Statt 2.) lieber die Funktion "file_exists" ;)

Was zur folge hat, dass 123.txt und 123.jpg möglich ist.

voher prüft ob schonmal die random Zahl (..) exisitert

Bei meiner Variante habe ich es extra so gewählt, dass auf 123 geprüft wird, und nicht auf die endung.

Kommt halt drauf an, was man braucht / will.
Ich habe den TE so verstanden, dass 123 einmalig sein soll, und nicht zwischen 123.jpg und 123.txt unterschieden werden soll.

Allerdings gehen sowohl readdir als auch meine Variante ziemlich auf die Rechenlast. Daher würde ich persönlich zu 1. greifen - wenn schon eine Datenbank da ist, wieso dann nicht gleich random mit eintragen / abfragen.

Mfg.
 
Zuletzt bearbeitet:
Andere Idee: warum kein md5hash der Datei als Dateiname?
 
Hi,

Andere Idee: warum kein md5hash der Datei als Dateiname?

Prinzipiell keine schlechte Idee.
Kommt darauf an, welche Dateien das Script verarbeiten soll und wie viele User gleichzeitig darauf arbeiten.

Wenn mehrere User gleichzeitig mehrere Dateien mit je 100MB hochladen, sind dass schnell größenordnungen von mehreren Gigabyte, die als MD5 verarbeitet werden müssen. Da wird ein einfaches System schnell dicht machen.
Versuche mal von 2GB die MD5-Prüfsumme berechnen zu lassen. Dauert bei mir schon ein bisschen.

Bei kleinen Dateien prinzipiell gut anwendbar. Aber wieso so viel Serverlast erzeugen, wenn es einfacher geht ?

Mein vorschlag bleibt: random in Datenbank speicher & prüfen ob schon vorhanden.
Btw kann so der Originale Dateiname noch gespeichert werden & mit der random-id verknüpft werden.
Was nacher wiederum aufgelöst werden kann, sodass man den originalen Namen bekommt.

Alternativ: über ftp-upload auf einen ftp-server, welcher die dateinamen automatisch umbenennt, falls die eine Datei mit gleichem Namen bereits existiert.
Man sieht: es gibt viele Wege zum Ziel ;)

Mfg.
 
Zuletzt bearbeitet:
Okay, ich bin gerade das ganze neu hochzuziehen auch mit Kategorie und anderen sachen.

Das mit dem Prüfen ist gut. Denke ich werde doch den ursprünglichen Namen nehmen anstadt eine Zahl, da das ganze auch mit einem PW Versehen wird.
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh