Upload-Script verändern

cry_baby

Mitglied
Hallo,

folgendes Script ist ein Upload-Script, mit denen ein User Bilder auf den Server laden soll.

Funktioniert auch ohne Probleme.

Allerdings soll das ganze so funktionieren, das später das Bild dem User angezeigt werden soll, und er soll es austauschen können. D.h. auf dem Server soll das alte Bild gelöscht werden und das neue gespeichert. Wie kann ich das lösen?

Zweite Frage wäre, wenn ich auf einer anderen Seite dieses Bild anzeigen lassen will, und die Bilder aber wahrscheinlich immer andere Namen haben werden, wie kann ich es programmieren, dass trotzdem immer dieses eine Bild aus dem Ordner ausgewählt wird?


HTML:
<html>
<head>

  <title>[Upload] :: Auswahl</title>

  <meta http-equiv="expires" content="0">
 
</head>
<body bgcolor=#FFFFFF>
<font face="Arial" color=#000000 size=2>
<h2>Dateiauswahl</h2>
  
  <form enctype="multipart/form-data" action="upload.php" method="post">
  
  <table border=0><pre>
  <tr><td colspan=2 bgcolor=#999999>Auswahl</td></tr>
  <tr>
    <td bgcolor=#cccccc>Datei</td>
    <td><input type="hidden" name="MAX_FILE_SIZE" value="2097152">
        <input name="userfile" type="file" size=30></td>
  </tr>
  <tr>
    <td></td>
    <td><input type=submit value="Upload"></td>
  </tr>
  </pre></table>
  </form>
</font>
</body>
</html>

PHP:
<html>
<head>

  <title>[Upload} :: Informationen</title>

  <meta http-equiv="expires" content="0">

</head>
<body bgcolor=#FFFFFF>
<font face="Arial" color=#000000 size=2>
  <br>
  <h2>Dateiinformationen</h2>

<?php

   // Zielverzeichnis festlegen
   $DST="/xxx/";

   // Informationen zur Import-Datei ausgeben:
   echo "<table border=0>";
   echo "<tr><td colspan=2 bgcolor=#999999>Angaben zur hochgeladenen Datei</td></tr>";
   echo "<tr><td bgcolor=#CCCCCC width=100>Datei</td><td>".$userfile_name."</td></tr>";
   echo "<tr><td bgcolor=#CCCCCC>Groesse</td><td>".$userfile_size." Bytes</td></tr>";
   echo "<tr><td bgcolor=#CCCCCC>Dateityp</td><td>".$userfile_type."</td></tr>";

   // pruefen, ob es sich um eine gif- oder jpg-datei handelt
   if ($userfile_type!="image/gif" && $userfile_type!="image/pjpeg" && $userfile_type!="image/x-png")
   {
      echo "<b>FEHLER:</b> Die von Ihnen ausgewaehlte Datei ist kein Bild.<br><br>";
      exit;
   }

   echo "<tr><td></td><td>";
   // bestehende datei darf nicht ueberschrieben werden
   if (file_exists($DST.$userfile_name))
   {
      echo "Die Datei kann nicht hochgeladen werden, da schon eine Datei mit dem gleichen Namen existiert";
   } else
   {
      // datei darf hochgeladen werden
      if (copy($userfile, $DST.$userfile_name))
      {
         echo "Die Datei wurde fehlerfrei hochgeladen.";
      } else
      {
         echo "Die Datei konnte nicht hochgeladen werden.";
      }
   } // if datei vorhanden
   
   echo "</td>
         </tr></table>";  
  
?>

</font>
</body>
</html>
 
Zuletzt bearbeitet:
Immer das eine Bild anzeigen, kannst du z.B. dadurch erreichen das du es in einer Datenbank speicherst, den Namen des Bildes.

PHP:
<?
$dateiname="datei.txt";
unlink($dateiname);
?>

Damit kannst du eine Datei löschen, oder du benutzt die exec Funktion und dann unter Linux "rm filename".

Du lädst die neue Datei hoch, ist schon eine mit dem namen vorhanden und hat die in der Datenbank keine sperre oder ist sie vom gleichen user wird die allte datei gelöscht und die neue hochgeladen. Aber Achtung, bei zu großen Bildern und einer zu langsamen internet Verbindung kann es ein Timeout geben.
 
Ich bin in PHP erst Anfänger, also entschuldigt die Fragen, aber ich bekomme nun diese Fehlermeldung:

unlink(hallo.txt) [function.unlink]: Permission denied in /home/u0028564465/public_html/admin/page/uploader/upload.php on line 57

Hier nochmal mein Code:

PHP:
<html>
<head>

  <title>[Upload} :: Informationen</title>

  <meta http-equiv="expires" content="0">

</head>
<body bgcolor=#FFFFFF>
<font face="Arial" color=#000000 size=2>
  <br>
  <h2>Dateiinformationen</h2>

<?php

   // Zielverzeichnis festlegen
   $DST="/xxx/";

   // Informationen zur Import-Datei ausgeben:
   echo "<table border=0>";
   echo "<tr><td colspan=2 bgcolor=#999999>Angaben zur hochgeladenen Datei</td></tr>";
   echo "<tr><td bgcolor=#CCCCCC width=100>Datei</td><td>".$userfile_name."</td></tr>";
   echo "<tr><td bgcolor=#CCCCCC>Groesse</td><td>".$userfile_size." Bytes</td></tr>";
   echo "<tr><td bgcolor=#CCCCCC>Dateityp</td><td>".$userfile_type."</td></tr>";

   // pruefen, ob es sich um eine gif- oder jpg-datei handelt
   if ($userfile_type!="image/gif" && $userfile_type!="image/pjpeg" && $userfile_type!="image/x-png")
   {
      echo "<b>FEHLER:</b> Die von Ihnen ausgewaehlte Datei ist kein Bild.<br><br>";
      exit;
   }

   echo "<tr><td></td><td>";
   // bestehende datei darf nicht ueberschrieben werden
   if (file_exists($DST.$userfile_name))
   {
      echo "Die Datei kann nicht hochgeladen werden, da schon eine Datei mit dem gleichen Namen existiert";
   } else
   {
      // datei darf hochgeladen werden
      if (copy($userfile, $DST.$userfile_name))
      {
         echo "Die Datei wurde fehlerfrei hochgeladen.";
      } else
      {
         echo "Die Datei konnte nicht hochgeladen werden.";
      }
   } // if datei vorhanden
   
   echo "</td>
         </tr></table>";  
  
?>

<? 
$userfile_name="hallo.txt"; 
unlink($userfile_name); 
?> 

</font>
</body>
</html>
 
Exestiert diese Datei "hallo.txt"?

Wenn ja welche Rechte hat sie?

PHP:
unlink(hallo.txt) [function.unlink]: Permission denied in /home/u0028564465/public_html/admin/page/uploader/upload.php on line 57

Es fehlen die Rechte für die Ausführung der funktion unlink. Z.B. kann hallo.txt keine lese oder schreib rechte haben. Gib der Datei mal die Rechte 777 und versuche es dann erneut.
 
Ich habe die Datei nochmal vom Server gelöscht und neu hochgeladen.

Die Rechte waren eigentlich gesetzt, aber egal. Jetzt funktioniert es ohne die Fehlermeldung.

Aber mal ne blöde Frage, für was soll die Datei jetzt gut sein? Weil nach dem hochladen ist in der hallo.txt trotzdem noch kein Text vorhanden.
 
Zuletzt bearbeitet:
Wie ich sehe, hapert es ein wenig mit der Übertragung meines Beispiels auf deine Situation.

Hier mal dein Script ein wenig angepasst:

PHP:
<html>
<head>

  <title>[Upload} :: Informationen</title>

  <meta http-equiv="expires" content="0">

</head>
<body bgcolor=#FFFFFF>
<font face="Arial" color=#000000 size=2>
  <br>
  <h2>Dateiinformationen</h2>

<?php

   // Zielverzeichnis festlegen
   $DST="/xxx/";

   // Informationen zur Import-Datei ausgeben:
   echo "<table border=0>";
   echo "<tr><td colspan=2 bgcolor=#999999>Angaben zur hochgeladenen Datei</td></tr>";
   echo "<tr><td bgcolor=#CCCCCC width=100>Datei</td><td>".$userfile_name."</td></tr>";
   echo "<tr><td bgcolor=#CCCCCC>Groesse</td><td>".$userfile_size." Bytes</td></tr>";
   echo "<tr><td bgcolor=#CCCCCC>Dateityp</td><td>".$userfile_type."</td></tr>";

   // pruefen, ob es sich um eine gif- oder jpg-datei handelt
   if ($userfile_type!="image/gif" && $userfile_type!="image/pjpeg" && $userfile_type!="image/x-png")
   {
      echo "<b>FEHLER:</b> Die von Ihnen ausgewaehlte Datei ist kein Bild.<br><br>";
      exit;
   }

   echo "<tr><td></td><td>";
   // bestehende datei darf nicht ueberschrieben werden
   if (file_exists())
   { 
   //Ich gehe nun einfach mal davon aus das wenn der datei name schon exestiert dieser überschriben werden soll
   //bitte teste es, da ich nicht sicher bin ob der pfad dann nicht auch gelöscht wird
    unlink($DST.$userfile_name); 
      //echo "Die Datei kann nicht hochgeladen werden, da schon eine Datei mit dem gleichen Namen existiert";
   } else
   {
      // datei darf hochgeladen werden
      if (copy($userfile, $DST.$userfile_name))
      {
         echo "Die Datei wurde fehlerfrei hochgeladen.";
      } else
      {
         echo "Die Datei konnte nicht hochgeladen werden.";
      }
   } // if datei vorhanden
   
   echo "</td>
         </tr></table>";  
  
?> 

</font>
</body>
</html>
 
Mit deinem Script bekomme ich jetzt folgende Fehlermeldung:

Code:
Dateiinformationen
Angaben zur hochgeladenen Datei 
Datei b_edit.png 
Groesse 451 Bytes 
Dateityp image/x-png 
 
Warning: Wrong parameter count for file_exists() in /home/u0028564465/public_html/admin/page/uploader/upload.php on line 35
Die Datei wurde fehlerfrei hochgeladen.

Aber die Datei auf dem Server wird damit ersetzt. Funktioniert also. Nur was bedeutet dieser Fehler?
 
Zuletzt bearbeitet:
entschuldige, ich bin ein wenig verpeilt.

PHP:
   if (file_exists($DST.$userfile_name))
   { 
   //Ich gehe nun einfach mal davon aus das wenn der datei name schon exestiert dieser überschriben werden soll
   //bitte teste es, da ich nicht sicher bin ob der pfad dann nicht auch gelöscht wird
    unlink($DST.$userfile_name); 
      //echo "Die Datei kann nicht hochgeladen werden, da schon eine Datei mit dem gleichen Namen existiert";
   } else

Ich habe bei file_exists die variable rausgenommen und sie bei unlink eingefügt, aber ich hätte sie nur kopieren und nicht ausschneiden müssen.
 
Zurück