Imagick + open_basedir will nicht (processwire)

  • Hallo zusammen,


    Ich tüftel jetzt seit Tagen an folgendem Problem und renne immer gegen die selbe Wand.
    Ich habe eine ProcessWire installation und will dort Bilder mit einem Wasserzeichen versehen. Da PW keine entsprechende Funktion hat, würde ich gerne Imagick nehmen. Alternativ hab ich GD und ein PW-Modul probiert.

    Leider komme ich immer wieder zu:

    Uncaught Error: Class "Imagick" not found in site/templates/settings.php:107

    (bezogen auf $image = new Imagick($imgUrl);)

    bzw.:
    Exception: open_basedir restriction in effect. File(/site/assets/files/1129/2023-09-04_amrum-2922.jpg) is not within the allowed path(s) (in site/templates/settings.php line 106)
    (bezogen auf $image = new \Imagick($imgUrl);)

    Das Bild bzw. sein Pfad (/site/assets/files/1129/2023-09-04_amrum-2922.jpg) sind korrekt und können ausgegeben werden. Chmod 755 fürs Verzeichnis, 644 fürs Bild sind gesetzt.


    Daher:
    liegt wohl am den open_basedir einstellungen. Dort habe ich im CCP 2 Einstellungsmöglichkeiten. Bei beiden ({DOCROOT}{/}:[...] und {WEBSPACEROOT}{/}:[...]) habe ich leider kein Glück. Auch nach den je 5 Minuten Wartezeit pro Umstellung nicht.


    Nach meinem Verständnis müsste {WEBSPACEROOT}{/}:[...] ja eigentlich alles erschlagen. Tut es aber nicht.


    Hat hier eventuell einer eine Idee, was ich da machen kann bzw. falsch mache? Bin auf dem Gebiet kein Profi, könnte also irgendwas saudummes sein...

    PS: Habe Webhosting 8000 NUE BF23

  • Wegen der chroot Umgebung sind die Pfade in der SSH-Konsole andere als im PHP Webprozess. Bei PHP ist /site eben wirklich /site. Und das Verzeichnis wird es so auf dem Webhosting-Server nicht geben und du hättest auch sowieso keinen Zugriff darauf wegen open_basedir. Du musst also den gesamten Pfad für das Bild angeben, anfangend mit /var/www/vhosts/hostingxxxxxx.a2xxx.netcup.net/, also wohl /var/www/vhosts/hosting136630.a2e46.netcup.net/site/assets/... Vermutlich gibt also open_basedir durchaus den Zugriff auf die Bilddatei im Webspace frei, aber der Pfad zu der Datei ist falsch angegeben.

  • Perfekt. Danke, da hat mir das Verständnis noch gefehlt.

    Die Lösung war für mich mit der Hintergrundinfo dann auch recht einfach: In Processwire kann man den lokalen Pfad nutzen, z.B. per $page->image->url oder eben den gesamten Pfad per $page->image->filename. In meinem Fall nutze ich das PageImageManipulator02 Modul. Wenn man das mit dem filename füttert, funktioniert alles wunderbar.


    Auf jeden Fall vielen Dank an tab :)