Safe Mode und imagejpeg()

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

  • Safe Mode und imagejpeg()

    Hallo zusammen

    Erstmal vorweg: ja, ich habe die Suchfunktion benutzt und ja, ich habe auch viel zum Thema Safe Mode gefunden. Aber leider ist nichts dabei, was mir weiter Hilft...

    Ich mach für einen Kollegen eine Internetseite. Dort kann man per Formular Bilder auf den Server laden, welche dann automatisch verkleinert und anschliessend mit imagejpeg() gespeichert werden. Klappt soweit auch alles wunderbar, nur wenn ich anschliessend mit getimagesize() z.B. die Daten des Bildes haben möchte oder es auch einfach mit unlink() löschen möchte (auch rechte verändern mit chmod() geht nicht), kommt die Fehlermeldung:

    getimagesize(): SAFE MODE Restriction in effect. The script whose uid is 2153 is not allowed to access images/archiv/Test_2/58efb831ebf7cfefbdcc048b0ffa6662.jpg owned by uid 30 ...
    Bei anderen Hostern, auch mit aktiviertem Safe Mode, klappen die selben Scripte wunderbar.

    Ich denke mal der Apache läuft mit einer anderen uid als PHP (bitte schlagt mich nicht, wenn es nichts damit zu tun hat oder es schwachsinn ist) und so wird das Problem verursacht. Ich kann die so erstellten Dateien auch nicht per FTP löschen...

    Hat jemand vielleicht eine Idee, wie das zu lösen ist? Ich denke nicht, dass der Provider wegen einem einzelnen Kunden die Konfiguration ändert.
    Achtung: ich diskutiere gern
    http://www.project-angel.org

  • #2
    Vielleicht mal imagejpeg() keinen Filenamen geben sondern die Ausgabe selbst (z.B. mit Output-Buffering und fwrite()) speichern?

    Kommentar


    • #3
      Mir scheint, dass es noch an dem temporären Dateinamen (sieht aus wie Session-ID) liegt, mit dem dein Script (bzw. der Server) arbeitet.
      Versuche es mal so, indem du nach dem Upload die Bild-Datei in einen definierten Ordner verschiebst. Danach solltest du auch die Rechte mit chmod ändern können.
      Bsp:

      $datei_name = $_POST['upload_datei'];

      if((isset($_FILES[$datei_name])) && (trim($_FILES[$datei_name]['name']) !="")) {
      if (move_uploaded_file($_FILES[$datei_name]['tmp_name'], neuerpfadunddateiname.jpg)) {

      ....
      ab hier resizen etc.
      ....

      }
      }

      Gruß
      Stephan
      [font=Verdana]SteGaSoft
      Theorie ist, wenn jeder weiß, wie es geht, aber nichts funktioniert, Praxis ist, wenn alles funktioniert und niemand weiß warum.
      [/font]

      Kommentar


      • #4
        Bis jetzt ist es so gelöst, dass das Script zum skalieren der Bilder direkt auf den temporären Speicherort zugreift, das Bild verkleinert und dann im richtigen Ordner speichert. Der "komische" Dateiname kommt daher, da er mit md5 und uniqid zufällig generiert wird.

        Du meinst also, die Lösung könnte sein, wenn ich das Bild erst aus dem temporären Speicherort in ein Verzeichnis verschiebe und dann die grösse anpasse? Mal ausprobieren...
        Achtung: ich diskutiere gern
        http://www.project-angel.org

        Kommentar


        • #5
          Habs getestet... das hochgeladene Bild wird per move_uploaded_file() in ein Verzeichnis auf dem Server verschoben. Das script zum skalieren des Bildes nimmt es sich dann von da her, skaliert es und speichert die skalierte Version zusätzlich (das alte Bild wird also nicht überschrieben).

          Das Problem bleibt leider das gleiche... das skalierte Bild kann weder per PHP gelöscht oder ausgelesen (getimagesize) werden. Das Komische daran ist aber, dass das originale Bild per unlink gelöscht werden kann... nun bleibt also die Frage, wieso sich beim skalieren des Bildes dessen owner ändert.

          Hände die Funktion zum skalieren hier mal an...
          Angehängte Dateien
          Achtung: ich diskutiere gern
          http://www.project-angel.org

          Kommentar


          • #6
            Ignorierst du mich?

            Kommentar


            • #7
              Der owner ändert sich bei mir auch. Allerdings kann ich immer noch per Script die betreffende Datei löschen. Nur das Änder/Löschen dieser Datei per FTP-Client (also von Extern) geht nicht.
              Wie sieht's aus, wenn du vor
              PHP-Code:
              return ("ok"); 
              die Funktion chmod($newim); setzt ?

              Gruß
              Stephan
              [font=Verdana]SteGaSoft
              Theorie ist, wenn jeder weiß, wie es geht, aber nichts funktioniert, Praxis ist, wenn alles funktioniert und niemand weiß warum.
              [/font]

              Kommentar


              • #8
                @onemorenerd: klappt leider auch nicht, dann bringt er mir die SAFE MODE Meldung mit fopen() ... obwohl ich in anderen Scripten auf der gleichen Seite fopen() ohne Proleme benutzen kann.

                @sgt:

                Warning: chmod(): SAFE MODE Restriction in effect. The script whose uid is 2153 is not allowed to access images/archiv/Test_2/6a2790d774a6a6f9914338f736f012a0_k.jpg owned by uid 30 in /home/www/web399/html/neu/inc/functions.php on line 84
                Es ist zum Mäuse melken...
                Achtung: ich diskutiere gern
                http://www.project-angel.org

                Kommentar


                • #9
                  images/archiv/Test_2/

                  Versuch mal die Ordnerstruktur in der du arbeiten willst über ein kurzes PHP-Script mit mkdir(); zu erstellen, also die Ordner in denen PHP arbeiten soll nicht mit FTP oder ähnlichem erstellen, sondern von deinem Root-verzeichnis beginnend mit PHP die Ordner erstellen lassen. Ist schon länger her, aber ich glaub das hat mir bei nem ähnlichen Problem mal geholfen. Einen Versuch wärs also vielleicht wert, wobei ich nicht dafür garantieren möchte.

                  Gruss
                  Quetschi
                  Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                  Schön - etwas Geschichte kann ja nicht schaden.
                  Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                  Kommentar


                  • #10
                    Die Idee hatte ich auch schon, hat aber leider nicht geholfen

                    Ich "pogrammiere" nun wirklich schon lange und viel mit PHP, aber das ist mir nun noch nie untergekommen...

                    Nun hatte ich aber eine andere Idee: das Verzeichnis, in dem Fall "Test_2" wurde immer von PHP erstellt. Nun hab ich es mit einem FTP-Programm erstellt und plötzlich geht jetzt auch das Script zum hochladen und skalieren der Bilder.

                    Kann mir das mal einer erklären...? Anders herum wäre es für mich noch verständlich...

                    Eine Lösung ist das aber für mich auch nicht, sollen die Besucher doch auch ein eigenes Verzeichnis anlegen können - und das natürlich nicht per FTP.
                    Achtung: ich diskutiere gern
                    http://www.project-angel.org

                    Kommentar


                    • #11
                      Kann mir das mal einer erklären...? Anders herum wäre es für mich noch verständlich...
                      Würde ich genauso denken.
                      Weiß da im Moment auch nicht weiter .

                      Gruß
                      Stephan
                      [font=Verdana]SteGaSoft
                      Theorie ist, wenn jeder weiß, wie es geht, aber nichts funktioniert, Praxis ist, wenn alles funktioniert und niemand weiß warum.
                      [/font]

                      Kommentar


                      • #12
                        PHP legt Ordner an, aber in Wirklichkeit wird Ordner vom Benutzer angelegt, in dessen Kontext der Webserver läuft

                        PHP will Berechtigungen ändern, Ordner(inhalt) ändern => Fehler, da de rOrdner nicht PHP gehört, sondern dem Webserver

                        Ordner anlegen per FTP und (automatische) Vergabe von entsprechenden Berechtigungen: PHP darf ändern
                        Ich denke, also bin ich. - Einige sind trotzdem...

                        Kommentar


                        • #13
                          Irgendwie kommt mir das alles bekannt vor, klingt für mich nach der verkorksten Serverkonfiguration eines Münchner (oder waren die in Nürnberg?) Hosters, bei dem wir kurzfristig mal ein paar Kunden abgelegt hatten nachdem uns beim vorigen Provider nicht mehr so gut gepasst hat.

                          Nachdem dann sich alle, einschließlich meiner Person, in deren Forum sich über dieses saudumme Verhalten dieser Server beschwert hatten, ham sie kurzerhand das Forum dichtgemacht. (Hast du Confixx-Adminoberfläche?)
                          Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                          Schön - etwas Geschichte kann ja nicht schaden.
                          Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                          Kommentar


                          • #14
                            Original geschrieben von Quetschi
                            Irgendwie kommt mir das alles bekannt vor, klingt für mich nach
                            safe_mode
                            Ich denke, also bin ich. - Einige sind trotzdem...

                            Kommentar


                            • #15
                              Original geschrieben von mrhappiness
                              safe_mode
                              Nö, meine Skripte laufen alle unter safe_mode -> on wunderbar, nur bei diesem Hoster konnt ich ned Fuß fassen.
                              Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                              Schön - etwas Geschichte kann ja nicht schaden.
                              Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                              Kommentar

                              Lädt...
                              X