Upload via URL

InFlame

Erfahrenes Mitglied
Hallo,

nach langer PHP-Auszeit möchte ich nun wieder anfangen, etwas mit PHP zu machen.
Hab mir mal eine DVD Datenbank vorgenommen. Da eine DVD Datenbank mit Cover schöner ist möchte ich mein Eintragungsscript um einen Upload erweitern.
Für das hochladen von localen Dateien hab ich das Tutorial von hier benutzt (vielen Dank für) und es funktioniert soweit ganz gut.
Jetzt möcht ich aber auch von einer externen http url ein Bild hochladen und hab überhaupt keine Ahnung, wie das funktionieren soll.

Hier mal mein Script das für die Verarbeitung des Formulars zustänig ist:
PHP:
<?php
include("inc/db_dvd.inc.php");
?>
<?php
//Variabeln erzeugen
	 $title = $_POST['title1'];
	 $orig_title = $_POST['orig_title1'];
	 $land = $_POST['land1'];
	 $jahr = $_POST['jahr1'];
	 $regie = $_POST['regie1'];
	 $darsteller = $_POST['darsteller1'];
	 $genre = $_POST['genre1'];
	 $inhalt = $_POST['inhalt1'];
	 $fsk = $_POST['fsk1'];
	 $go = $_POST['go1'];
	 $tempname = $_FILES['file']['tmp_name'];
	 $name = $_FILES['file']['name']; 
	 $type = $_FILES['file']['type'];
	 $size = $_FILES['file']['size'];
	 $http = $_POST['http'];
//WEITER
		if ($go == 1) {
		if ($title=="" || $darsteller=="" || $inhalt=="") {
?>
 	<html>
	<head>
	<title>Ein Fehler ist aufgetreten</title>
	</head>
	<body>
	<center>
	<font size="5" color="red"><b>! FEHLER !</b></font> 
	<p> &nbsp; </p>
	Es sind nicht alle Felder ausgefüllt worden. Bitte <b>alles</b> ausfüllen.
	<p> &nbsp; </p>
	<a href="javascript:history.back(-1)">zurück</a>  
	</center> 	
	</body>
	</html>       
	<?php die ?>     
	<?php 
		} else {
	 if ($http == nein) { //Prüft ob HTTP an oder aus
//-- UPLOAD
	 if($type != "image/gif" && $type != "image/jpeg") {
    $err[] = "nur gif und jpeg Dateien dürfen hochgeladen werden.";
	}
	if($size > "40000") {
    $err[] = "Die Datei welche du hochladen willst, ist zu gross!<br>Maximale Dateigrosse beträgt 15 KB!";
	
	}
	if (empty($err)) { 
    copy("$tempname", "images/$name");
	}
	else {
    foreach($err as $error)
    die("<center><font color=\"red\"><b>FEHLER</b></font><br>$error<p> </p><a href=\"javascript:history.back(-1)\">zurück</a> | <a href=\"auslesen.php3\">weiter</a></center>");
		 }
		 } else {  //WENN HTTP = AN
	echo "noch keine Funktion vorhanden"; 
		 }
		 
//-- UPLOAD ENDE	
		mysql_query("INSERT INTO dvd (title,orig_title,land,jahr,regie,darsteller,genre,inhalt,fsk,bild) VALUES ('$title','$orig_title','$land','$jahr','$regie','$darsteller','$genre','$inhalt','$fsk','$name')");
	}
	}
	?> 
	 	<html>
	<head>
	<title>DVD erfolgreich eingetragen</title>
	</head>
	<body>
	<?php
	if ($http == ja) {
	echo "HTTP AN";
	} else {
	echo "HTTP AUS";
	}
	?>
          <p> &nbsp; </p>
          <p> &nbsp; </p>
	<font size="4"><center>DVD <b>"<?php echo $title ?>"</b> wurde erfolgreich eingetragen.<br>Es wurde folgende Bilddatei hoch- und eingetragen: <?php echo $name ?></font>
<?php 

?>     
	<p> &nbsp; </p>
	<table width="38%" border="0">
  <tr> 
    <td><a href="formular.htm">Noch eins Eintragen</a></td>
    <td><a href="auslesen.php3">Zur Datenbank</a> </td>
  </tr>
</table>
	</center>
	</body>
	</html>
<?php 
mysql_close();
?>

Habe mir überlegt, dass ich ganz einfach per Optionsschalter überprüfe, ob die Datei von Local oder HTTP kommt. Je nachdem soll er das verabeiten. Wie gesagt, local funktioniert soweit (müssen nur noch kleine Änderungen vorgenommen werden) doch leider fehlt mir für den http Teil alles.

Hat da jemand eine Idee? Wäre für Hilfe sehr dankbar!
 
Ich bekomm es einfach nicht hin. :(
Hier mal mein code, den ich von einem bekannten bekommen habe:

PHP:
//WENN HTTP = AN
/*	  if (!preg_match('#^(https?|ftp)://#i', $name)) {
            //BAD URL
          echo "<br><br><p align=\"center\"> Bad URL... 1.</p>";
         }
*/
         $filenum=@fopen($name,"rb");
/*         if ($filenum == 0) {
           //BAD URL
           echo "<br><br><p align=\"center\"> Bad URL... 2.</p>";
         }
*/

         //Binärdaten laden von Webseite
         $contents="";
         while (!@feof($filenum)) {
           $contents.=@fread($filenum,1024); //filesize($filename));
         }
         @fclose($filenum);

        //Zielort
         $name = substr($name, strrpos($name, "/")+1);
        
         //Speichern der geladenen Daten
         $filenum=@fopen("images/".$name,"wb");
         @fwrite($filenum,$contents);
         @fclose($filenum);
		 }
}		 
//-- UPLOAD ENDE
Ist nur der Teil, der für upload via http zuständig ist. Der Rest steht oben.
Ich hab die URL Überprüfungen in Fehler gemacht, da sonst immer nur diese Fehlermeldungen ausgegeben werden.
Jetzt kommt immer eine Zeitüberschreitung.
Fatal error: Maximum execution time of 30 seconds exceeded in D:\webserver\dvd datenbank\eintragen.php4 on line 77

Wäre für jede Hilfe wirklich sehr dankbar
 
Wie groß ist denn die Datei, die du runterladen möchtest? Außerdem solltest du auch eine Überprüfung einbauen, ob die Datei auch vorhanden ist.
 
Ich schieb das jetzt mal nochmal hoch. In der Hoffnung, dass mir jetzt vielleicht jemand helfen kann/will.
 
InFlame, wir sehen das pushen von Threads eigentlich nicht besonders gerne.

Nimm mal die @ Zeichen weg und schau mal ob der Script Fehler ausgibt.

Dann poste die hier.
 
Nils Hitze hat gesagt.:
InFlame, wir sehen das pushen von Threads eigentlich nicht besonders gerne.
Ok, nehme ich zur Kenntniss. Aber ist es besser, wegen einer Sache mehrere Beiträge zu erstellen?

Werde das dann mal machen, wenn ich zu Hause bin. Danke.
 
Leider kommt auch ohne @ nur diese Fehlermeldung:
"Fatal error: Maximum execution time of 30 seconds exceeded in D:\webserver\dvd datenbank\eintragen.php4 on line 80"

Zeile 79 bis 82:
PHP:
         $contents="";
         while (!feof($filenum)) {
           $contents.=fread($filenum,1024); //filesize($filename));
         }
 
Zurück