Ergebnis 1 bis 12 von 12

Thema: [PHP] Upload Script - Variabel Probs?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1

    [PHP] Upload Script - Variabel Probs?

    Heyho ihr WebDev-Forum User

    Hab mal wieder eine nette kleine Herausforderung für euch: Mein kleines Upload-Script will irgendwie nicht so richtig.
    Hab mir ein relativ simples Script gebaut wo man alle Datei-Endungen der Welt hochladen kann und man auch nicht auf die Größe schauen muss. ABER irgendwie bekomm ich immer den Fehler dass er eine Variabel nicht lesen kann, was aber nicht so richtig sein kann.
    Schaut selbst:

    Code:
    <html>
    <head>
    </head>
    
    <body>
    <p>
    
    <?
    $status = $_GET['upload'];
    if  ($status=='1')
    {
    $form_password = $_POST['password'];
    include("config.php");
    if ($form_password == $password)
    {
    copy("$file","$upload_folder$file_name");
    echo "<center><div class='norm'><b>$file_name was successfully uploaded.</b></div></center>";
    }
    else
    {
    echo "<center><div class='norm'><b>The upload password was not correct, please go back and re-enter the password correctly.</b></div></center>";
    }
    }
    else
    {
    ?>
    
    
    <table>
    <form action="<? $self_file = $_SERVER['PHP_SELF']; echo "$self_file"; ?>?upload=1" enctype="multipart/form-data" method="post">
    
     <tr>
      <td style="padding:2px">Passwort:</td>
      <td style="padding:2px"><input name="password" type="password" cols="30"></td>
     </tr>
     <tr>
      <td style="padding:2px">Datei:</td>
      <td style="padding:2px"><input name="file" type="file" class="textarea"></td>
     </tr>
      <tr>
      <td align="center"><input name="Submit" type="submit" value="Upload" ></td>
     </tr>
    </form>
    <?
    }
    ?>
    </table>
    
    </p>
    
    </body>
    </html>
    Jetzt bekomm ich dauernd die Fehlermeldung:
    copy(): Unable to access in /www/htdocs/public/scripts/upload/index2.php on line 42

    Wobei Zeile 42 hier diese wäre:
    Code:
    copy("$file","$upload_folder$file_name");
    Nur hab ich jetzt grad keine Ahnung was da falsch ist...

    Nur zu Info. Es wird am Anfang des Scripts die Datei "config.php" includiert, in dieser Datei ist lediglich mein Passwort und der Upload-Order gespeichert.
    Code:
    <?php
    
    $password = 'meinpasswort';
    $upload_folder = 'uploadordner/';
    
    ?>
    Das wär das eine, und nur so nebenbei, gibt es eine PHP Funktion mit der mir der Syntax einer .PHP/.HTML/-Datei farbig angezeigt werden kann?

    THANKS!
    A2k

    Geändert von Armitage2k (23.10.2006 um 16:15 Uhr)

  2. #2
    Auch für Dateiuploads gibt es ein Superglobales Array: $_FILES!

    Im PHP Manual findest du dazu besondere Informationen im Kapitel Dateiuploads mit POST

    Bearbeitung:
    Code:
    copy("$file","$upload_folder$file_name");
    Variablen verkettest du mit dem Punkt:
    Code:
    copy($file,"$upload_folder.$file_name");
    --------------------------^
    Außerdem bin ich mir nicht sicher, ob du bei copy nicht den absoluten Pfad angeben musst.

    Eventuell interessiert dich auch die Funktion move_uploaded_file().

    Geändert von mitaki (23.10.2006 um 17:32 Uhr)

  3. #3
    Zitat Zitat von mitaki Beitrag anzeigen
    Auch für Dateiuploads gibt es ein Superglobales Array: $_FILES!

    Im PHP Manual findest du dazu besondere Informationen im Kapitel Dateiuploads mit POST

    Bearbeitung:
    Code:
    copy("$file","$upload_folder$file_name");
    Variablen verkettest du mit dem Punkt:
    Code:
    copy($file,"$upload_folder.$file_name");
    --------------------------^
    Außerdem bin ich mir nicht sicher, ob du bei copy nicht den absoluten Pfad angeben musst.

    Eventuell interessiert dich auch die Funktion move_uploaded_file().
    Ich muss zugeben, dass übersteigt meine PHP-Kenntnisse mal wieder
    Hab jetzt mal die Zeile 42 editiert und in meinen $upload_folder mit absoluter Adressenangabe ausgestattet, will aber trotzdem nicht.
    Da er mir immer noch den selben Fehler anzeigt hab ich leider auch keine Ahnung inwiefern ich das jetzt was ändern könnte... PHP-N00b eben

    Also so einfach wie ich mir das ganze vorstelle funktioniert ein Dateiupload also nicht, richtig?

    Großartig

  4. #4
    Wenn du ein Inputfeld hast, welches den Namen 'file' trägt und es sich dabei um eine Eingeabefeld für Dateien handelt stehen dir nach dem absenden diese Variablen zur Verfügung:
    PHP-Code:
    $_FILES['file']['name'// Name der Datei auf deinem PC
    $_FILES['file']['type'// MIME Typ z.B. text/plain
    $_FILES['file']['size'// Dateigröße in Byte
    $_FILES['file']['tmp_name'// Name der hochgeladenen Datei im temporären Verzeichnis
    $_FILES['file']['error'// Eventuelle Fehlermeldung 
    move_uploaded_file() kopiert dir dann die temporär angelegte Datei in das gewünschte Verzeichnis.
    Stell dir das vor wie in Windows: beim Entpacken von komprimierten Dateien kopiert das System zuerst alles in ein temporäres Verzeichnis, erst wenn alles entpackt ist wird alles in das gewünschte Verzeichnis kopiert. So läuft das hier auch.

    PHP-Code:
    move_uploaded_file($_FILES['file']['tmp_name'], '/www/htdocs/public/scripts/upload/uploadordner/' $_FILES['userfile']['name']); 
    Der Pfad muss dem denein nur angepasst werden.

    Bearbeitung:
    Das offensichtlicher habe ich wieder übersehen :/
    Du musst das Verzeichnis, in welches du die Dateien kopieren möchtest mit Schreibrechten versehen.
    D.h. in deinem FTP Programm den Ordner auswählen. Du müsstest dann irgendwo in der Lage sein, "Attribute" oder CHMOD zu bearbeiten. Es wird der Wert 777 benötigt (Lesen, Schreiben und Ausführen für alle).
    Beachte bitte auch, dass du keine Datei hochladen kannst, die größer ist als upload_max_filesize in der PHP.ini

    Geändert von mitaki (23.10.2006 um 18:07 Uhr)

  5. #5
    Sorry, aber ich krieg das nicht hin. Ich bekomm nachdem ich auf Upload drücke (die Datei wird auch upgeloadet) immer diese Fehlermeldung:


    Warning: move_uploaded_file(/www/www/virtual/armitage2k.net/htdocs/public/scripts/upload/up/): failed to open stream: Is a directory in /www/www/virtual/armitage2k.net/htdocs/public/scripts/upload/index.php on line 50

    Warning: move_uploaded_file(): Unable to move '/www/www/virtual/armitage2k.net/phptmp/php0fYkNz' to '/www/www/virtual/armitage2k.net/htdocs/public/scripts/upload/up/' in /www/www/virtual/armitage2k.net/htdocs/public/scripts/upload/index.php on line 50


    Also am besten ich poste mal meine gesamte Source damit ihr seht was ich eigentlich gebastelt hab. Sorry, aber PHP ist definitiv nicht meine Stärke, fang grad erst an damit effizient zu basteln.

    Code:
    <p>
    
    <?
    $_FILES['file']['name'];				// Name der Datei auf deinem PC
    $_FILES['file']['type'];				// MIME Typ z.B. text/plain
    $_FILES['file']['size'];				// Dateigröße in Byte
    $_FILES['file']['tmp_name'];			// Name der hochgeladenen Datei im temporären Verzeichnis
    $_FILES['file']['error'];			// Eventuelle Fehlermeldung
    $status = $_GET['upload'];
    
    
    
    if  ($status=='1')
    {
    $form_password = $_POST['password'];
    include("config.php");
    if ($form_password == $password)
    {
    move_uploaded_file($_FILES['file']['tmp_name'], '/www/www/virtual/armitage2k.net/htdocs/public/scripts/upload/up/' . $_FILES['userfile']['name']);
    echo "<center><div class='norm'><b>$file_name was successfully uploaded.</b></div></center>";
    }
    else
    {
    echo "<center><div class='norm'><b>The upload password was not correct, please go back and re-enter the password correctly.</b></div></center>";
    }
    }
    else
    {
    ?>
    
    
    <table>
    <form action="<? $self_file = $_SERVER['PHP_SELF']; echo "$self_file"; ?>?upload=1" enctype="multipart/form-data" method="post">
    
     <tr>
      <td style="padding:2px">Passwort:</td>
      <td style="padding:2px"><input name="password" type="password" cols="30"></td>
     </tr>
     <tr>
      <td style="padding:2px">Datei:</td>
      <td style="padding:2px"><input name="file" type="file" class="textarea"></td>
     </tr>
      <tr>
      <td align="center"><input name="Submit" type="submit" value="Upload" ></td>
     </tr>
    </form>
    <?
    }
    ?>
    </table>
    
    
    </p>
    config.php
    Code:
    <?php
    
    $password = 'passwort';
    $upload_folder = 'http://www.meineadresse.net/public/scripts/uploader/up/';
    
    ?>
    Der gesamte Ordner inkl. Dateien hat CHMOD 777, trotzdem will es nicht so richtig funktionieren.

    Danke für die Hilfe,
    A2k

  6. #6
    Ich glaub es liegt ean einem simlen Tippfehler meinerseits ; ;
    Ach ja, die $_FILES Variablen sind automatisch gegeben, wenn was hochlädst, du musst sie also nicht selbst erstellen.

    Code:
    <p>
    
    <?
    //$_FILES['file']['name'];				// Name der Datei auf deinem PC
    //$_FILES['file']['type'];				// MIME Typ z.B. text/plain
    //$_FILES['file']['size'];				// Dateigröße in Byte
    //$_FILES['file']['tmp_name'];			// Name der hochgeladenen Datei im temporären Verzeichnis
    //$_FILES['file']['error'];			// Eventuelle Fehlermeldung
    $status = $_GET['upload'];
    
    
    
    if  ($status=='1')
    {
    	$form_password = $_POST['password'];
    	include("config.php");
    if ($form_password == $password)
    {
    move_uploaded_file($_FILES['file']['tmp_name'], '/www/www/virtual/armitage2k.net/htdocs/public/scripts/upload/up/' . $_FILES['file']['name']);
    echo "<center><div class='norm'><b>$file_name was successfully uploaded.</b></div></center>";
    }
    
    else
    {
    echo "<center><div class='norm'><b>The upload password was not correct, please go back and re-enter the password correctly.</b></div></center>";
    }
    }
    else
    {
    ?>
    
    
    <table>
    <form action="<? $self_file = $_SERVER['PHP_SELF']; echo "$self_file"; ?>?upload=1" enctype="multipart/form-data" method="post">
    
     <tr>
      <td style="padding:2px">Passwort:</td>
      <td style="padding:2px"><input name="password" type="password" cols="30"></td>
     </tr>
     <tr>
      <td style="padding:2px">Datei:</td>
      <td style="padding:2px"><input name="file" type="file" class="textarea"></td>
     </tr>
      <tr>
      <td align="center"><input name="Submit" type="submit" value="Upload" ></td>
     </tr>
    </form>
    <?
    }
    ?>
    </table>
    
    
    </p>
    Der Tippfehler war, dass ich bei move_uploaded_file() die Angabe vom Manual übernommen hatte, ohne sie anzupassen.

  7. #7
    "If it's not one thing, it's another"

    Hab jetzt mal die geänderte Zeile eingefügt und die Variablen gelöscht. Jetzt bekomm ich zwar keine Fehlermeldung mehr, aber er will mir trotzdem keine Datei in das gewünschte Verzeichnis laden....
    Gott, es kann doch nicht sein dass ein so simpler Dateiupload derartige Probleme macht....

    Trotzdem vielen lieben Dank für die ganze Hilfe!
    A2k

    Hier nochmal die aktuelle Source:
    Code:
    <p>
    
    <?
    $status = $_GET['upload'];
    
    if  ($status=='1')
    {
    $form_password = $_POST['password'];
    include("config.php");
    if ($form_password == $password)
    {
    move_uploaded_file($_FILES['file']['tmp_name'], '/www/www/virtual/armitage2k.net/htdocs/public/scripts/upload/up/' . $_FILES['file']['name']);
    echo "<center><div class='norm'><b>$file_name was successfully uploaded.</b></div></center>";
    }
    else
    {
    echo "<center><div class='norm'><b>The upload password was not correct, please go back and re-enter the password correctly.</b></div></center>";
    }
    }
    else
    {
    ?>
    
    
    <table>
    <form action="<? $self_file = $_SERVER['PHP_SELF']; echo "$self_file"; ?>?upload=1" enctype="multipart/form-data" method="post">
    
     <tr>
      <td style="padding:2px">Passwort:</td>
      <td style="padding:2px"><input name="password" type="password" cols="30"></td>
     </tr>
     <tr>
      <td style="padding:2px">Datei:</td>
      <td style="padding:2px"><input name="file" type="file" class="textarea"></td>
     </tr>
      <tr>
      <td align="center"><input name="Submit" type="submit" value="Upload" ></td>
     </tr>
    </form>
    <?
    }
    ?>
    </table>
    
    
    </p>

  8. #8
    Ich habe das Script jetzt mal auf meiem PC getestet.
    Bei der gelegenheit: Bitte immer <?php schreiben, das ist die einzige PHP Kennung die immer funktioneirt

    Das Script hat funktioniert.

    Ich denke ser Fehler liegt in der Pfadangabe:
    Code:
    /www/www/virtual/armitage2k.net/htdocs/public/scripts/upload/up/
    Die Form passt. Die Angabe hatte ich bei mir aber falsch, da ein Verzeichnis falsch geschrieben war, was in einer leeren Seite resultierte.

    Überprüf also den Pfad ggf. mit phpinfo() und korrigiere ihn. Eine andere Fehlerquelle kann es nicht geben.

  9. #9
    Jo, Script läuft jetzt endlich, allerdings nicht auf der Seite wo es eigentlich hin soll
    Hab das Script jetzt rein interessehalber mal auf meinem PHP5 Host laufen lassen und da funktioniert es einwandfrei. Kann es sein dass event. bestimmte Befehle im Script auf dem Host meiner eigentlichen Website nicht erkannt werden (PHP4 --> phpinfo())?

    Danke nochmals für die ganze Hilfe!
    A2k

  10. #10
    Hm, ich habe zwar hier auch PHP 5, aber wir verwenden keine Funktionen die es in deiner PHP 4 Version nicht auch gibt.

    Ich weis auch nicht, was error_reporting(2039); genau bedeutet, eventuell fügst du error_reporting(E_ALL); über deinem Script ein, vielleicht gibt dir das Script dann eine zusätzliche Warnung aus.

    Ansonnsten sehe ich nicht, wo das Problem liegen könnte, Dateiuploads sind bei dir aktiviert usw.

  11. #11
    Interessant. Auf meinem PHP5 Server gehts reibungslos. Auf meinem PHP4 Server hab ich jetzt mal auf alle Fehler anzeigen und bekomm da die Meldung dass 2 Variablen undefiniert sind. Das Script ist aber 1:1 dasselbe wie auf dem PHP5 Server....?

    Hier mal die Fehlermeldung:
    Notice: Undefined index: upload in /www/www/virtual/armitage2k.net/htdocs/public/scripts/upload/uploader.php on line 22

    Notice: Undefined index: file in /www/www/virtual/armitage2k.net/htdocs/public/scripts/upload/uploader.php on line 23

    Dabei gehts um die Variablen $status und $dateiname:
    Code:
    <?php
    error_reporting(E_ALL);
    
    $status = $_GET['upload'];
    $dateiname = $_FILES['file']['name'];
    
    if  ($status=='1')
    {
    $form_password = $_POST['password'];
    include("config.php");
    if ($form_password == $password)
    {
    move_uploaded_file($_FILES['file']['tmp_name'], '/www/www/virtual/armitage2k.net/htdocs/public/files/' . $_FILES['file']['name']);
    echo "<center><div class='norm'><b>$dateiname wurde erfolgreich am Server gespeichert.</b></div>
    <br /><br />
    <a href=\"javascript:history.go(-1)\"><input type=submit name=sbm value=Back></a><input type=submit name=sbm value=Close onClick=window.close()></center>";
    }
    else
    {
    echo "<center><div class='norm'><b>Das Passwort ist nicht korrekt, bitte nochmal eingeben.</b></div></center>";
    }
    }
    else
    {
    ?>
    Naja, wenn niemanden mehr einfällt was da los ist, ist es auch egal. Aber nochmal vielen herzlichen Dank für die ganze Hilfe!
    A2k

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •