Dateien per PHP auf den Server laden

Read-Only-Modus

Das 01-Supportforum befindet sich im Read-Only-Modus. Es ist nicht mehr möglich sich zu registrieren, neue Themen zu erstellen oder auf bestehende Themen zu antworten.

Alle Inhalte stehen bis auf absehbare Zeit jedoch weiterhin lesend zur Verfügung.


Bei Fehlern oder Problemen mit PHP-Scripten von 01-Scripts.de erstellen Sie gerne einen Issue-Eintrag auf Github oder nehmen Sie per E-Mail Kontakt auf.

  • Hallo craKz,



    Wie du aus Deinem File-Array entnehmen kannst ist der [error]-code 0 ist, und demzufolge ist kein Fehler beim Upload vorgefallen. Die Datei wurde erfolgreich hochgeladen.




    Ich vermute mal, dass es etwas mit der Rechteverteilung der Ordner/files auf dem Server zu tun haben könnte.


    Und noch was:


    Zur besseren Fehlerbehebung empfehle ich die verwendung von :

    PHP
    1. error_reporting(E_ALL);
    2. # Die Anweisung muss als erstes in dem PHP-Script stehen
  • Hallo zusammen,
    ich hatte schonmal früher ein upload script programmiert was auf meinem alten strato server super funzte. nun musste ich auf einen anderen server ausweichen. früher hab ich die datei per ftp verschoben. aber ich bekam immer die gleiche fehlermeldung und habe auch immer wieder den pfad angepasst. nun dachte ich mir, dass ich mal was anderes ausprobiere, also das sript von euch hier. aber gleiche fehlermeldung leider ;( vielleicht könnt ihr mir ja helfen. folgende fehlermeldung bekomm ich und das script.


    Code
    1. Warning: move_uploaded_file() [function.move-uploaded-file]: open_basedir restriction in effect. File(/tmp/phpjw8LTk) is not within the allowed path(s): (/usr/local/etc/httpd/vhtdocs/bgshackenberg) in /usr/local/etc/httpd/vhtdocs/bgshackenberg/bgs/cms.php on line 486
    2. Warning: move_uploaded_file(/tmp/phpjw8LTk) [function.move-uploaded-file]: failed to open stream: Operation not permitted in /usr/local/etc/httpd/vhtdocs/bgshackenberg/bgs/cms.php on line 486
    3. Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpjw8LTk' to 'bgs/img/news/' in /usr/local/etc/httpd/vhtdocs/bgshackenberg/bgs/cms.php on line 486
    4. Fehler beim Hochladen der Datei. Fehlermeldung: Array ( [bild] => Array ( [name] => 0000265029.jpg [type] => image/jpeg [tmp_name] => /tmp/phpjw8LTk [error] => 0 [size] => 69012 ) )


  • Hallo,


    wie es scheint liegt das Problem an den Sicherheitseinstellungen Ihres Webspaces.
    Sie sollten sich diesbezüglich an Ihren Webspace-Hoster wenden und Ihn fragen was Sie gegen diese Meldungen unternehmen können bzw. ob Ihr Hoster etwas dagegen unternehmen kann.


    MfG,
    Michael Lorer

  • Bei mir kommt immer sunn Warning: move_uploaded_file(test/545445.png) [function.move-uploaded-file]: failed to open stream: Datei oder Verzeichnis nicht gefunden in /usr/export/www/vhosts/funnetwork/hosting/meinseitenname/index.php on line 146


    Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/usr/export/tmp/phpyeCOmz' to 'test/545445.png' in /usr/export/www/vhosts/funnetwork/hosting/meinseitenname.de/index.php on line 146
    Fehler beim Hochladen der Datei. Fehlermeldung: Array ( [userfile] => Array ( [name] => 545445.png [type] => image/x-png [tmp_name] => /usr/export/tmp/phpyeCOmz [error] => 0 [size] => 347667 ) )
    Nach dem Uploaden

  • Zitat

    Original von PHP 2000
    Bei mir kommt immer sunn Warning: move_uploaded_file(test/545445.png) [function.move-uploaded-file]: failed to open stream: Datei oder Verzeichnis nicht gefunden in /usr/export/www/vhosts/funnetwork/hosting/meinseitenname/index.php on line 146


    Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/usr/export/tmp/phpyeCOmz' to 'test/545445.png' in /usr/export/www/vhosts/funnetwork/hosting/meinseitenname.de/index.php on line 146
    Fehler beim Hochladen der Datei. Fehlermeldung: Array ( [userfile] => Array ( [name] => 545445.png [type] => image/x-png [tmp_name] => /usr/export/tmp/phpyeCOmz [error] => 0 [size] => 347667 ) )
    Nach dem Uploaden


    Hallo,


    laut dieser Fehlermeldung hast du entweder den Ordner in den das File hochgeladen werden soll nicht richtig angegeben, der Pfad zum Ordner stimmt nicht, der Ordner exisitiert nicht oder du hast dem Ordner keine Schreibrechte (chmod 0777) gegeben.


    Gruß,
    Michael Lorer

  • erstmal ein grosses Danke


    tolles script


    ein Problem hab ich noch


    Ist es möglich das gleich die Dateiattribute automatisch geändert werden können?


    bei mir werden die dateien mit den Rechten "600" hochgeladen und ich kann sie mir nicht ansehen
    Der Ordner upload hat die Rechte "777" aber leider die darin enthaltenen Dateien nicht.


    THX schonmal für die schnelle Hilfe



    aligiii1968


  • Hallo,


    das geht mit folgender Funktion:
    http://de2.php.net/manual/de/function.chmod.php


    MfG,
    Michael Lorer

  • Hi,


    ich hab dazu noch mal eine Frage, und zwar, ich weis dass ich es irgenwann mal irgendwo hier im Forum gesehen habe, aber ich finde es nicht mehr.


    Man konnte doch die Dateitypen überprüfen und beschränken, die hochgeladen werden konnten, z.B. nur jpg, gif, usw...
    Genau so war es doch auch mit der Größe, ich meine nicht das in der php.ini, sondern direkt aus dem Script.


    Noch dazu konnte man die hochgeladenen Dateien auch automatisch umbenennen lassen, z.B. Bilder für Avatare in die BenutzerID des jeweiligen Besitzers.


    Ist es möglich, dass es mir jemand zeigen könnte? Wäre nett^^

  • Hallo,


    an die Dateiendungen kommst du mit folgendem PHP-Code:
    [PHP]<?PHP
    $endungsausgabe = $_FILES['userfile']['name'];
    $endungsarray = explode(".", $endungsausgabe);
    $endung = $endungsarray[count($endungsarray)-1];
    ?>[/PHP]
    Damit kannst du über eine einfache IF-Abfrage ja dann erlaubte Endungen abfragen.
    Auf die Dateigröße kannst du mit $_FILES['userfile']['size'] zugreifen.


    Und umbenennen geht hiermit:

    Code
    1. move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . "filename." . $endung)


    "filename" stellt jeweils den gewünschten neuen Dateinamen dar.


  • Und wo stelle ich da die datei endung ein?
    z.B. Will ich nur bilder zu lassen. Müsste der Code denn wie folgt aussehen?


    [PHP]<?PHP
    $endungsausgabe = $_FILES['userfile']['gif,jpg,png'];
    $endungsarray = explode(".", $endungsausgabe);
    $endung = $endungsarray[count($endungsarray)-1];
    ?>[/PHP]


    oder anders ??? und an welcher stelle deines Scprits müsste es eingebaut werden? wäre nett wenn du mir da helfen könntest.

  • Hat man mich an dieser Stelle vergessen oder übersehen ???


    wäre echt schön wenn jemand wüsste wie ich das anstelle... denn ich habe denn code nicht so ganz verstanden und vorallm nicht wo ich ihn einbauen müsste.


    das ist nun mein PHP Code:
    [PHP]<?php
    if(isset($_POST['send']) && $_POST['send'] == "ja")
    {
    //Pfad zum Ordner, in dem die Datei gespeichert werden soll
    //Dieser Ordner muss Schreibrechte besitzen (Chmod 777)
    $uploaddir = '../hasky/';


    if(move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . $_FILES['userfile']['name']))
    {
    echo "Datei erfolgreich hochgeladen.\n";
    }
    else
    {
    echo "Fehler beim Hochladen der Datei. Fehlermeldung:\n<br />";
    print_r($_FILES);
    }
    }
    ?>
    [/PHP]


    Das geht auch super aber wie schreibe ich denn nun so um das ich nur bestimmte dateitpyn erlaube. Es müsten nur 3 sein die wären da .jpg .gif .fcp


    und wie bekomme ich da eine größen begrenzung rein?


    Und was noch viel wichtig ist wie code ich da rein das er die rechte vom file auf 755 wie es standart mässig ist umstellt. das mit denn 600 ist ganz nett aber nicht zu gebrauchen.


    Wäre echt klasse wenn mir das jemand erstellen könnte bzw den code dazu hier posten könnte. ich bin echt am verzweifeln.

  • Damit sollte es eigentlich klappen:


    [PHP]<?php
    if(isset($_POST['send']) && $_POST['send'] == "ja")
    {
    //Pfad zum Ordner, in dem die Datei gespeichert werden soll
    //Dieser Ordner muss Schreibrechte besitzen (Chmod 777)
    $uploaddir = '../hasky/';

    $endungsausgabe = $_FILES['userfile']['name'];
    $endungsarray = explode(".", $endungsausgabe);
    $endung = $endungsarray[count($endungsarray)-1];

    if(($endung == "jpg" OR $endung == "gif" OR $endung == "fcp") && $_FILES['userfile']['size'] <= 1024000)
    {
    if(move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . $_FILES['userfile']['name']))
    {
    chmod($uploaddir.$_FILES['userfile']['name'], 0755);
    echo "Datei erfolgreich hochgeladen.\n";
    }
    else
    {
    echo "Fehler beim Hochladen der Datei. Fehlermeldung:\n<br />";
    print_r($_FILES);
    }
    }
    }
    ?>[/PHP]

  • Hallo,


    Ich bin es mal wieder ... und zwar habe ich da noch ne frage ... kann man es irgendwie machen das er wenn die datei erfolgreich hoch geladen hat ... ein link zu der datei ausgibt??? das wäre denn schon fast perfect.

  • Zitat

    Original von Simme
    Hallo,


    Ich bin es mal wieder ... und zwar habe ich da noch ne frage ... kann man es irgendwie machen das er wenn die datei erfolgreich hoch geladen hat ... ein link zu der datei ausgibt??? das wäre denn schon fast perfect.


    [PHP]<?php
    if(isset($_POST['send']) && $_POST['send'] == "ja")
    {
    //Pfad zum Ordner, in dem die Datei gespeichert werden soll
    //Dieser Ordner muss Schreibrechte besitzen (Chmod 777)
    $uploaddir = '../hasky/';

    $endungsausgabe = $_FILES['userfile']['name'];
    $endungsarray = explode(".", $endungsausgabe);
    $endung = $endungsarray[count($endungsarray)-1];

    if(($endung == "jpg" OR $endung == "gif" OR $endung == "fcp") && $_FILES['userfile']['size'] <= 1024000)
    {
    if(move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . $_FILES['userfile']['name']))
    {
    chmod($uploaddir.$_FILES['userfile']['name'], 0755);
    echo "Datei erfolgreich hochgeladen.\n";
    echo "<a href=\"".$uploaddir . $_FILES['userfile']['name']."\">Datei aufrufen</a>";
    }
    else
    {
    echo "Fehler beim Hochladen der Datei. Fehlermeldung:\n<br />";
    print_r($_FILES);
    }
    }
    }
    ?>[/PHP]