PHP/SQL Problem beim Upload von Dateien

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PHP/SQL Problem beim Upload von Dateien

    Hallo,

    ich habe ein PHP-Script zum Upload von Dateien aus einem PHP/SQL Buch übernommen. Leider funktioniert es nicht richtig.

    Sobald ich auf Upload klicke, wird der ID, Name und Dateityp ordnungsgemäß in die Tabelle "filestore" eingetragen, aber die eigentliche Datei nicht. Da erscheint folgende Fehlermeldung:

    ---
    Warning: open_basedir restriction in effect. File is in wrong directory in /home/jens/smb/public_html/code_archiv/kapitel_11/filestore.php on line 49

    Warning: fopen("/tmp/phpz4nn8Z", "rb") - Operation not permitted in /home/jens/smb/public_html/code_archiv/kapitel_11/filestore.php on line 49

    Warning: Supplied argument is not a valid File-Handle resource in /home/jens/smb/public_html/code_archiv/kapitel_11/filestore.php on line 53

    Warning: Cannot add header information - headers already sent by (output started at /home/jens/smb/public_html/code_archiv/kapitel_11/filestore.php:49) in /home/jens/smb/public_html/code_archiv/kapitel_11/filestore.php on line 70
    ---

    Hier das PHP-Skript:

    ---
    PHP-Code:
    <?php

    $dbcnx 
    mysql_connect("localhost""login""passwort");
    mysql_select_db("jokes");

    if ((
    $action == "view" or $action == "dnld") and $id != "") {

    // Benutzer ruft eine Datei ab
    $sql "SELECT FileName, MimeType, FileData
    FROM filestore WHERE ID = '
    $id'";
    $result = @mysql_query($sql);
    if (!
    $result) die("Datenbankfehler: " mysql_error());

    $filename mysql_result($result,0,"FileName");
    $mimetype mysql_result($result,0,"MimeType");
    $filedata mysql_result($result,0,"FileData");

    if (
    $action == "dnld") {
    if (
    strpos($HTTP_USER_AGENT,"MSIE"))
    $mimetype "application/x-download";
    else
    $mimetype "application/octet-stream";
    }

    header("Content-disposition: filename=$filename");
    header("Content-Type: $mimetype");
    header("Content-Length: " strlen($filedata));

    echo(
    $filedata);
    exit();

    } elseif (
    $action == "del" and $id != "") {

    // Benutzer loescht eine Datei
    $sql "DELETE FROM filestore WHERE ID = '$id'";
    $ok = @mysql_query($sql);
    if (!
    $ok) die("Datenbankfehler: " mysql_error());

    header("Location: $PHP_SELF");
    exit();

    } elseif (
    $action == "ulfile" and $uploadfile != "") {

    // Ausschliessen, dass eine Datei kein Upload ist
    if (!is_uploaded_file($uploadfile))
    die(
    "$uploadfile ist keine hochgeladene Datei!");

    // Datei zum binaeren Einlesen oeffnen ("rb")
    $tempfile fopen($uploadfile,"rb");

    // Gesamte Datei in den Arbeitsspeicher einlesen, wobei die PHP-Funktion filesize benutzt wird
    // um die Dateigroesse zu ermitteln.
    $filedata fread($tempfile,filesize($uploadfile));

    // Einfuegen in die Datenbank vorbereiten, indem
    // vor irgendwelche Sonderzeichen Backslashes gesetzt werden
    $filedata addslashes($filedata);

    // SQL-Anfrage formulieren
    $sql "INSERT INTO filestore SET
    FileName = '
    $uploadfile_name',
    MimeType = '
    $uploadfile_type',
    Description = '
    $desc',
    FileData = '
    $filedata'";

    //Einfuegen durchfuehren
    $ok = @mysql_query($sql);
    if (!
    $ok) die("Datenbankfehler beim Einf&uuml;gen der Datei: " mysql_error());

    header("Location: $PHP_SELF");
    exit();
    }

    // Vorgabemaessige Seite: Gespeicherte Dateien anzeigen

    $sql "SELECT ID, FileName, MimeType, Description
    FROM filestore"
    ;
    $filelist = @mysql_query($sql)
    or die(
    "Datenbankfehler: " mysql_error());
    ?>
    <html>
    <head>
    <title> PHP/MySQL Dateimagazin </title>
    </head>
    <body>

    <h1>PHP/MySQL Dateimagazin</h1>

    <form action="<?=$PHP_SELF?>?action=ulfile" method="post"
    enctype="multipart/form-data">
    <p>Datei hochladen:<br />
    <input type="file" name="uploadfile" /></p>
    <p>Dateibeschreibung:<br />
    <input type="text" name="desc" maxlength="255" /></p>
    <p><input type="submit" name="go" value="Hochladen" /></p>
    </form>

    <p>Folgende Dateien sind in der Datenbank gespeichert:</p>
    <table width="85%" border="0" cellpadding="0" cellspacing="0">
    <tr>
    <th align="left">Dateiname</th>
    <th align="left">Typ</th>
    <th align="left">Beschreibung</th>
    </tr>
    <?php

    if (mysql_num_rows($filelist) > 0) {
    while (
    $f mysql_fetch_array($filelist)) {
    ?>

    <tr valign="top">
    <td nowrap>
    <a href="<?=$PHP_SELF?>?action=view&id=<?=$f['ID']?>">
    <?=$f['FileName']?></a>
    </td>
    <td nowrap><?=$f['MimeType']?></td>
    <td><?=$f['Description']?></td>
    <td nowrap>
    [<a href="<?=$PHP_SELF?>?action=dnld&id=<?=$f['ID']?>"
    >Download</a> |
    <a href="<?=$PHP_SELF?>?action=del&id=<?=$f['ID']?>"
    onClick="return confirm('Diese Datei l&ouml;schen?');"
    >L&ouml;schen</a>]
    </td>
    </tr>

    <?php
    }
    } else {
    ?>
    <tr><td colspan="3" align="center">Keine Dateien vorhanden!</td></tr>
    <?php
    }
    ?>
    </table>
    </body>
    </html>
    ---

    Hat jemand eine Idee, was hier falsch sein könnte? An den Rechten des SQL-Benutzers kann es wohl nicht liegen, da beim Benutzer "root" der gleiche Fehler erscheint. Bitte helft einem PHP/SQL-Anfänger! Danke schonmal im vorraus!

    Gruß
    Jens
    EDIT:
    php-tags by TBT
    Zuletzt geändert von TBT; 29.09.2003, 17:21.

  • #2
    Re: PHP/SQL Problem beim Upload von Dateien

    Original geschrieben von busstop
    Warning: open_basedir restriction in effect. File is in wrong directory in /home/jens/smb/public_html/code_archiv/kapitel_11/filestore.php on line 49
    aufgrund der tatsache, dass der safe mode von php aktiviert ist (php.ini-einstellung), hast du keine rechte, um mit
    $tempfile = fopen($uploadfile,"rb");
    auf die datei zuzugreifen, da sie in einem dir nicht erlaubten verzeichnis liegt.

    lösung: entweder das tempdir auf ein erlaubtes verzeichnis setzen, oder den safe mode abschalten.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      oder die temporär hochgeladene Datei per move_uploaded_file ??
      in ein dir erlaubtes Verzeichnis verschieben um sie dort zu öffnen
      TBT

      Die zwei wichtigsten Regeln für eine berufliche Karriere:
      1. Verrate niemals alles was du weißt!


      PHP 2 AllPatrizier II Browsergame

      Kommentar


      • #4
        Re: Re: PHP/SQL Problem beim Upload von Dateien

        Original geschrieben von wahsaga
        aufgrund der tatsache, dass der safe mode von php aktiviert ist (php.ini-einstellung), hast du keine rechte, um mit
        $tempfile = fopen($uploadfile,"rb");
        auf die datei zuzugreifen, da sie in einem dir nicht erlaubten verzeichnis liegt.

        lösung: entweder das tempdir auf ein erlaubtes verzeichnis setzen, oder den safe mode abschalten.
        ´

        Ich habe jetzt in der php.ini den Safemode auf On gesetzt:
        ...
        ;
        ; Safe Mode
        ;
        safe_mode = On

        safe_mode_exec_dir =
        ...

        Es erscheint aber immer noch folgende Fehlermeldung:

        Warning: open_basedir restriction in effect. File is in wrong directory in /home/jens/smb/public_html/code_archiv/kapitel_11/filestore.php on line 49

        Warning: fopen("/tmp/phpAoGHWe", "rb") - Operation not permitted in /home/jens/smb/public_html/code_archiv/kapitel_11/filestore.php on line 49

        Warning: Supplied argument is not a valid File-Handle resource in /home/jens/smb/public_html/code_archiv/kapitel_11/filestore.php on line 53

        Warning: Cannot add header information - headers already sent by (output started at /home/jens/smb/public_html/code_archiv/kapitel_11/filestore.php:49) in /home/jens/smb/public_html/code_archiv/kapitel_11/filestore.php on line 70

        Wie kann ich überprüfen, ob die Änderung wirklich aktiv ist? Apache und SQL Server habe ich bereits neu gestartet.
        Schonmal danke für die erste Hilfe..

        Kommentar


        • #5
          Ich habe jetzt auch upload_tmp_file gesetzt. Allerdings habe ich das Gefühl als ob die geänderte PHP.ini NICHT auf meinem server aktiv ist, weil die Fehlermeldung erscheint:
          Warning: fopen("/tmp/phpQtTRA2", "rb") - Operation not permitted in /home/jens/smb/public_html/code_archiv/kapitel_11/filestore.php on line 49

          Habt ihr einen Tipp?

          Welcher user und gruppe hat eigentlich default ein apache-server auf einem Linux-System?
          Zuletzt geändert von busstop; 29.09.2003, 18:04.

          Kommentar

          Lädt...
          X