Anzeige:
Ergebnis 1 bis 6 von 6

Thema: Datei Upload

  1. #1
    Cotoga
    Gast

    Datei Upload

    Hallo zusammen,

    habe gerade folgendes Problem.

    Um ein programmiertes Tool zu dokumentieren, sollen über SimpleGrid verschiedene spezifische Dokumentationen zum Download stehen.

    Verwaltet werden diese eben über ein SimpleGrid in einem Admin Bereich.
    Die Dateien werden auf dem Server in einem Upload Directory abgelegt.
    Parallel wird in eine Oracle Datenbank: Themenbereich, Kurzbeschreibung und Hyperlink abgelegt.
    Das Script läuft auf einem Sun-Solaris Server.

    Dabei hatte ich allerdings Probleme mit dem Dateiupload selber. Also habe ich den entsprechenden Teil separiert um mögliche Komplikationen mit SimpleGrid und HTML Quickform auszuschließen.
    Auf lokalem XAMPP läuft es einwandfrei. Auf einer Workstation mit installiertem Apache Server funktioniert es.
    Um noch einen Test durchzuführen, habe ich den Server vom Clan genommen und das Script dort getestet aber dort kam auch folgende Fehlermeldung:

    Warning: move_uploaded_file(/srv/www/vhosts/ctk-clan.com/httpdocs/cotoga/upload/index.php) [function.move-uploaded-file]: failed to open stream: Permission denied in /srv/www/vhosts/ctk-clan.com/httpdocs/cotoga/upload/upload.php on line 7

    Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/php5X89gn' to '/srv/www/vhosts/ctk-clan.com/httpdocs/cotoga/upload/index.php' in /srv/www/vhosts/ctk-clan.com/httpdocs/cotoga/upload/upload.php on line 7
    Fehler: 0
    Warning: chmod() [function.chmod]: No such file or directory in /srv/www/vhosts/ctk-clan.com/httpdocs/cotoga/upload/upload.php on line 13
    Bei normalen HTTP Uploads über Formulare wird die Datei ja temporär in ein Verzeichnis abgelegt und dann bei PHP über die Funktion: move_uploaded_file in das Zielverzeichnis verschoben.

    Der Teil des Script sieht folgender Maßen aus:
    <?php
    $upload_verzeichnis = '/srv/www/vhosts/ctk-clan.com/cotoga/upload/files';

    $dateiname = $_FILES['datei']['name'];
    $tempname = $_FILES['datei']['tmp_name'];

    if (move_uploaded_file($tempname , $upload_verzeichnis . $dateiname)) {
    echo "Ok";
    } else {
    echo "Fehler: " . $_FILES['datei']['error'];
    }

    chmod($upload_verzeichnis . $dateiname,0777);
    ?>
    Nach den Test war mein erster Gedanke ein Fehler in den Berechtigungen.
    Allerdings kann ich mit SCP Dateien in das Temp Verzeichnis uploaden und auch wieder löschen.

    Folgendes Script gibt mir auch positive Rückmeldung:

    <?php
    $dir_dest="/tmp";
    if (!$dir_dest) {
    echo "</p></p>Verzeichnis existiert nicht";
    }
    else {
    echo "</p></p>Verzeichnis existiert";
    }
    if (!@is_dir ($dir_dest)) {
    echo "</p></p>Kein Verzeichnis";
    }
    else {
    echo "</p></p>Verzeichnis ist korrekt";
    }
    if (!is_writeable ($dir_dest)) {
    echo "</p></p>Keine Schreibberechtigung";
    }
    else {
    echo "</p></p>Schreibberechtigung vorhanden";
    }

    ?>
    Habe leider keine Möglichkeit, die php.ini zu ändern. Dort gibt es eine Variable namens '$upload_dir' welche bei nicht Belegung, was der Fall ist, die system defaults verwendet.

    Das Temp Dir gehört dem User 'root' und der Gruppe 'sys' und hat chmod 770.
    Der User des Webservers lautet 'oracle' und hat die Gruppe 'dba' (Kombinations Pack aus Oracle 10g und Apache 1.3 wegen Support).
    Der User vom SCP ist ein normaler User der im Apache einen virtuelles Verzeichnis hat.

    Hat irgendwer noch einen Lösunsansatz parat. Stehe gerade irgendwie vor einer Wand.

    Vielen Dank für Hilfe
    Cotoga
    Geändert von Cotoga (18-04-2007 um 14:15 Uhr)

  2. #2
    Registrierter Benutzer
    Registriert seit
    22.08.2002
    Ort
    Nürnberg
    Beiträge
    638
    Steht doch eindeutig da:
    Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/php5X89gn' to '/srv/www/vhosts/ctk-clan.com/httpdocs/cotoga/upload/index.php' in /srv/www/vhosts/ctk-clan.com/httpdocs/cotoga/upload/upload.php on line 7
    Der Apache hat keine Schreibberechtigung in /srv/www/vhosts/ctk-clan.com/httpdocs/cotoga/upload/. Wenn er doch Schreibberechtigung hat, dann könnt es noch sein, dass da bereits eine index.php existiert, die der Apache nicht überschreiben darf.

    Übrigens, nur weil Du mit Deinem Benutzernamen Schreibrechte in einem bestimmten Verzeichnis hast, heißt das noch lange nicht, dass auch der Apache dort Schreibrechte hat.
    Homepage: www.pingu.info

  3. #3
    Cotoga
    Gast
    Habe jetzt TMP und Destination Dir überprüft:

    /var/tmp : Verzeichnis existiert

    /var/tmp : Verzeichnis ist korrekt

    /var/tmp : Schreibberechtigung vorhanden

    /opt/app/aida/htdocs/upload/files : Verzeichnis existiert

    /opt/app/aida/htdocs/upload/files : Verzeichnis ist korrekt

    /opt/app/aida/htdocs/upload/files : Schreibberechtigung vorhanden
    Demnach hat der Apache die nötigen Berechtigungen.

    Habe ich im Script vielleicht irgendwo einen Fehler? Ich selber seh irgendwie keinen.


    Grüße und Danke
    Cotoga

  4. #4
    Registrierter Benutzer
    Registriert seit
    22.08.2002
    Ort
    Nürnberg
    Beiträge
    638
    Oben ist es aber ein anderes Verzeichnis:
    /srv/www/vhosts/ctk-clan.com/httpdocs/cotoga/upload/
    /opt/app/aida/htdocs/upload/files
    Homepage: www.pingu.info

  5. #5
    Cotoga
    Gast
    Wie schon beschrieben. Ich habe mehrere Tests gemacht.

    Erster: lokal (Windows)
    Zweiter: Netzwerk, Workstation mit Apache2 (Windows)
    Dritter: Netzwerk, Root-Server (Linux)

    Das System wo es laufen soll ist ein SUN Server.

    Auf dem sind die Verzeichnisse so angelegt wie im letzten Post und auch die Berechtigungen die in beschrieben hatte mit SCP etc.

    Das Script läuft bei den Windows Tests einwandfrei. Beim dritten Test und auf dem endgültigen System kommen die Fehlermeldungen.

    Grüße
    Cotoga

  6. #6
    Registrierter Benutzer
    Registriert seit
    22.08.2002
    Ort
    Nürnberg
    Beiträge
    638
    Dann stimmen die Berechtigungen nicht. Wie bereits geschrieben: der Apache bzw. genauer PHP benötigt Schreibrechte. Dazu zählt natürlich auch das er in das gewünschte Verzeichnis wechseln darf (execute-Attribut bei übergeordneten Verzeichnissen).

    Wie das bei Deinen konkreten Systemen aussieht, kann ich Dir nicht sagen. Da können viele Dinge mit herein spielen, z.B. Access Control Lists, SELinux, usw.
    Homepage: www.pingu.info

Lesezeichen

Berechtigungen

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