PHP - GD-Library -> bilder resizen -> probs bei großen

  • Mal eine allgemeine Frage vllt. weiß da jemand was:

    auf meiner Seite können die benutzer sich bildergalerien anlegen. die bilder werden beim hochladen mit php resized auf eine maximal-breite/-höhe, und es werden halt kleine thumbnails angelegt.

    Leider hatte ich bei dateien über ~500kb immer fehler und scriptabbruch.

    Weiß jemand vllt ob php da einfach ab einer bestimmten datei-größe nicht mehr klarkommt? bei bildern bis 350kb (da hab momentan jetzt eine grenze gezogen) funktioniert alles einwandfrei.

    ich weiß leider nicht mehr genau was da jetzt für ein fehler kam, dachte mir ich frag erstmal, vllt kennt ja jemand sowas schon und kann mir hinweise geben :)

  • ok, dann poste ich das nachher mal noch, das wäre natürlich super :)

    ich weiß noch, dass ich, als ich das damals implementiert habe, kurz vorm verzweifeln war und dann irgendwann halt aus frust die max-größe erstmal auf 350kb gesetzt habe :D

  • also, das formular zum hochladen der bilder:

    resize.php


    Soweit der Code. Habe es grade wieder getestet mit Bildern um die 1MB. Die resize.php bricht ohne jegliche Fehlermeldung ab, ich kriege eine Blanko-Site.
    Ich habe jetzt gerade in einem anderen Forum noch diese Antwort hier gefunden, zu jemandem der wohl ein ähnliches Problem wie ich hatte.
    Möglicherweise ist das auch der Grund:

    Zitat


    Das wird wohl an der Größe der Bilder liegen. Jeder PHP-Prozess bekommt einen Speicher zugewissen, sobald das Script aber mehr als diesen Zugewiesenen braucht, ist Ende. Wie groß sind die Bilder? Je nach Kamera können das einige MB sein. Du könntest Dir eine PHP-Umgebung auf Deinen Rechner installieren, die erlaubte Speichermenge erhöhen und die Bilder auf Deinem Rechner verkleinern und dann uploaden.

    *** Nobody ***


    Die dargestellte Lösung ist für mich leider nicht brauchbar, es sollen ja andere Leute Bilder auf der Seite hochladen. Denen kann ich die im Zitat vorgeschlagene Lösung kaum zumuten ;)

  • Wie ist max_execution_time und memory_limit eingestellt? Kannst du in der ausgabe von

    PHP
    <?php
       phpinfo();
    ?>


    herrausfinden.

  • davon abgesehen, dass du einige SEHR veraltete Funktionen einsetzt (copy(), besser move_uploaded_file() ), das Script eklatante Sicherheitsmängel hat ($_POST-Variablen ungeprüft übernommen, read_function()), könnte der Mangel an Fehlermeldungen daran liegen, dass du bei relevanten Funktionen oft ein @ davor stehen hast, was die evtl. Fehlermeldung unterdrückt.
    Nimm diese doch bitte mal raus und setze noch

    Code
    ini_set("display_errors", true);


    nach dem error_reporting.

    Wie siehts jetzt aus?


  • upsi ^^
    sorry, habe ich jetzt gemacht, kriege folgende meldungen ausgegeben:

    Code
    Notice: session_start() [function.session-start]: ps_files_cleanup_dir: opendir(/tmp) failed: Permission denied (13) in pfad.../resize.php on line 6
    Falsches Dateiformat. Nur JPEG oder PNG erlaubt!

    (es war ein jpeg)

  • max_execution_time: 90
    memory_limit: 50M
    @ bandit

    edit:
    @jojo:
    Überprüfungen der post-Variablen sind noch nicht integriert weil die Seite bisher nur für interne Tests läuft, das kommt noch, habe ich aber für den von mir angesprochenen Fehler als irrelevant erachtet.
    Den Bereich zum Eintragen in die DB habe ich auch wegen Irrelevanz rausgelöscht ;)

    Aber was an der read_function falsch ist würde mich interessieren, bzw eine Alternative. Ich bin in diesem Bereich zugegebenermaßen nicht auf dem neusten Stand. Sollte mich da bei Gelegenheit mal weitergehend einlesen ^^

  • wo kann ich mir den titel php-dau des monats abholen? ^^

    ok, also habe das script jetzt nach kleiner korrektur auf dem webserver ans laufen gekriegt, mit nem 1,8mb jpg probiert und lief einwandfrei. ich hatte das script lokal per wamp getestet, und da hatte ich das problem mit großen bildern, da waren wohl max_execution_time und/oder memory_limit zu niedrig gesetzt.
    Dann hatte ich im Formular den Abfang auf Dateigröße eingebaut.
    Dann hatte ich es auf den Server gepackt.
    Und dann nicht mehr ohne die Begrenzung getestet.....
    Dann hab ich den Code hier reingestellt, dazu im editor eine kopie erstellt und diese etwas verschlankt zwecks übersichtlichkeit (ja ich weiß, ist immer noch lang). Und dabei ist beim Originalbild resizen das hier passiert:

    Code
    @$imagecopyresampled($resize, $src, 0, 0, 0, 0, $resize_width, $resize_height, $pic_width, $pic_height);


    Das $ gehörte da nun wirklich nicht vor die funktion.
    Das ist mir dann beim testen nach dem hinweis von jojo (vielen dank) ohne die @ vor den funktionen aufgefallen. Zunächst kam nur die gepostete Fehlermeldung, nachdem ich dann auf die glorreiche (...) idee kam das (für diese tests unnötige) session_start() auszukommenteren, wurde ich auf besagtes $ aufmerksam...
    Und nun funktioniert es! :D


    @ Jojo, ich wäre dir aber dankbar wenn du mir noch sagst wo das Problem mit der read-function() liegt, und welche funktionen außer copy() veraltet sind. :)
    Sofern du mal Zeit und Muße haben solltest. Ansonsten google ich bei Gelegenheit noch ein paar Sachen.