PHP-FPM Modulaktivierung ?

Mardor

Well-Known Member
Hi,

ich benutze PHP-FPM (über nginx) unter FreeBSD 11.2 in einem Jail. Nun möchte ich eine nextcloud installieren, jedoch erhalte ich die folgende Fehlermeldung im Log:
Code:
2018/11/11 21:34:59 [error] 85157#100587: *12 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught Error: Call to undefined function OC\Log\json_encode() in /usr/local/www/nextcloud/lib/private/Log/File.php:129
Stack trace:
#0 /usr/local/www/nextcloud/lib/private/Log.php(325): OC\Log\File->write('PHP', 'Error: Call to ...', 3)
#1 /usr/local/www/nextcloud/lib/private/Log.php(218): OC\Log->writeLog('PHP', 'Error: Call to ...', 3)
#2 /usr/local/www/nextcloud/lib/private/Log.php(130): OC\Log->log(3, 'Error: Call to ...', Array)
#3 /usr/local/www/nextcloud/lib/private/Log/ErrorHandler.php(81): OC\Log->critical('Error: Call to ...', Array)
#4 [internal function]: OC\Log\ErrorHandler::onException(Object(Error))
#5 {main}
...
Wenn ich php -m aufrufe erhalte ich folgende Module angezeigt:
Code:
/usr/local/www/nextcloud/config: php -m
[PHP Modules]
Core
curl
date
gd
intl
json
libxml
mbstring
mysqli
mysqlnd
pcre
Reflection
SPL
standard
xml
zip

Diese Module sollten doch aktiv sein oder muss ich hier irgendwie diese Module aktivieren. Leider habe ich im Internet keinen Hinweis gefunden.

Gruß Mardor
 
Ja. Folgende Module habe ich installiert:

Code:
pkg install php72
pkg install graphics/php72-gd devel/php72-json databases/php72-mysqli ftp/php72-curl devel/php72-intl converters/php72-mbstring archivers/php72-zip textproc/php72-xml

Gruß Mardor
 
Ich hab gestern ... oder vorgestern? ein Update von php72 veröffentlicht. Ich hab dunkel was mit nextcloud in Erinnerung.
Ich denke mal, du hast die default Version von www/nextcloud installiert? Auch default lang/php72 + lang/php72-extensions?
 
Hallo Joneum,

ich habe die aktuelle 14.0.3 der Webseite heruntergeladen und nicht selbst gebaut.

Auch default lang/php72 + lang/php72-extensions?
Ich bin mir nicht sicher ob ich deine Frage korrekt verstehe, dies sind die Module die ich auf dem host mit poudriere selbst generiere
Code:
security/php72-hash
devel/php72-json
converters/php72-mbstring
security/php72-openssl
www/php72-session
textproc/php72-xml
archivers/php72-zlib
www/elinks
sysutils/pefs-kmod
graphics/php72-gd
databases/php72-mysqli
ftp/php72-curl
devel/php72-intl
archivers/php72-zip

default lang/php72 und lang/php72-extensions sind hier nicht dabei.

Gruß Mardor
 
Also ich würde dir empfehlen, da wirklich im ersten Schritt alle 3 Ports zu nutzen, bevor du da was direkt von der Seite verwendest. Den dann hast du teils Fehler die nicht reproduzierbar sind.
 
Hi,

mein Problem hier ist, dass ich dann PHP 7.0 (zumindest war das wenn ich mich richtig erinnere bei ownCloud so) installiert bekommen habe. Deshalb hatte ich mir die Pakete selbst runtergeladen.

Gruß Mardor
 
Ich habe vor .... ich blaube 3 Wochen PHP von 71 auf 72 geschuppst (als default Version). Ich habe selber local eine owncloud auf PH72 am laufen. Ich würde versuchen das alles auf PHP72 in poudriere laufen zu lassen, und dann ein update zu fahren. Gab es einen Grund warum du PHP70 hier nutzt?
 
Vermutlich trifft es bei Dir nicht zu, aber trotzdem der Hinweis: Du musst aufpassen, wenn Du Dir die Module über die Commandline anschaust (php -m). Denn die könnten in einer /usr/local/etc/php-cli.ini anders definiert sein, als das, was php-fpm nutzt! Wenn keine php-cli.ini existiert, nutzt aber auch PHP auf der Commandline die php.ini. Siehe hierzu auch die php-Manpage unter FILES.

Um zu sehen, was der Webserver wirklich nutzen kann, würde ich eine PHP-Datei mit "<?php phpinfo(); ?>" unter Deinem Nextcloud-Ordner anlegen und über den Webserver aufrufen. Dann kannst Du sicher sein, dass Dir wirklich die Module aufgelistet werden, die in diesem Ordner zur Verfügung stehen.
 
Hi,

auf was muss ich den bei phpinfo genau achten um sicherzugehen das php-json geladen wird. Muss das Modul nur aufgelistet sein oder auch ein bestimmter Status angezeigt werden ?

Gruß Mardor
 
Hi,

also wenn ich info.php aufrufe erhalte ich "json support: enabled" und "json version: 1.6.0".
Ich denke dies sollte Aussagen das php-json aktiv ist.

Gruß Mardor
 
Ja, genau (man sieht die Liste der Module und ggf. deren Konfiguration... und es beginnt immer mit "enabled" oder "active).

phpinfo.png
 
Tut mir leid, nun habe ich auch keine Idee mehr. Die Fehlermeldung weist klar darauf hin, dass json_encode nicht gefunden wird, was eigentlich nur bedeuten kann, dass php-json nicht zur Verfügung steht. Genau das zeigt aber Dein phpinfo().

Neustart von php-fpm, Nginx hast Du sicher schon versucht (z.B. um Dinge wie PHP's opcache zu leeren), nehme ich an? Gibt es sonst einen Cache-Mechanismus in Deinem Setup, der Dir etwas zeigen könnte, was so gar nicht mehr aktuell ist? Dann muss ich passen.
 
Hallo SolarCatcher,

den Neustart von php-fpm und nginx habe ich mehrfach durchgeführt. opcache kenne ich jetzt so nicht. Wie gehe ich denn hier am Besten vor um den Cache korrekt zu löschen ?

Gruß Mardor
 
Wenn Du php-fpm neugestartet hast, ist der opcache auf jeden Fall leer! Ansonsten kann man das auch über entsprechende PHP Funktion machen. Wenn opcache überhaupt in Deiner php.ini enabled ist (für produktive Zwecke absolut empfehlenswert - PHP cached auf diese Weise eine bereits kompilierte Version Deiner Dateien, was es deutlich beschleunigt).
 
@KobRheTilla Webserver neustarten bringt hinsichtlich des Opcaches nichts, wenn php-fpm verwendet wird - denn letzteres bekommt vom Neustart des Webservers gar nichts mit!

Leidglich bei Apaches mod_php wird beim Neustart auch der Opcache geleert.
 
Wo das mit cache hier gerade Thema ist: gibt es eine Daumenregel, was man wie nutzen sollte? ich kann mir vorstellen, dass sich 'viel hilft viel' hier negativ auswirken kann und sich die caches gegenseitig ausbremsen.

Aus zendcache wurde irgendwann opcache...soviel Verbesserung, dass es einen neuen Namen verdient hatte? Wie ichs verstehe, werden dynamisch generierte Seiten statisch zwischengespeichert, um CPU-Leistung und dadurch v.a. Zeit einzusparen. Meine primitiven Eigentests zeigten mir, dass der opcache definitiv was bringt.

memcache und memcached. Steig ich fürs Erste nicht wirklich durch...von der Namensirritation mal abgesehen (memcached meint manchmal den daemon von memcache oder mal die 'andere Baustelle'). Auf der Platte liegendes Zeug in den RAM kippen=sinnig und verstehe ich. Macht das nicht der opcache schon?

Was ist redis?

Das andere Zeug mit Schnittstellen zu cloudflare etc. ist mir klar.

CSS-Minifier: Funktion ist bekannt, ist aber stark fehleranfällig, wenns das Layout zerreißt.
 

Anhänge

  • cache.png
    cache.png
    4,2 KB · Aufrufe: 284
Opcache ist ein Cache für php, cached also bereits kompilierte Strukturen damit die nicht immer neu kompiliert werden müssen. Kann man eigentlich immer einsetzten.

Redis und Memcache sind so ziemlich das gleiche, denke Redis ist etwas performanter. Beides sind mehr oder weniger Key->Value Caches im RAM, auf die eine PHP Anwendung auch zugreifen muss. Man muss also bereits mit diesem Cache im Hinterkopf entwickeln.
 
Ui, jetzt geht's hier etwas durcheinander mit den ganzen Caches... vielleicht sollte man lieber einen neuen Thread dazu aufmachen, als diesen hier zu hijacken... Sei's drum.

Die verschiedenen Caches speichern sehr unterschiedliche Sachen und sind unterschiedlich weit weg von PHP selbst.

PHP's Opcache speichert den vorkompilierten PHP-Code. Das heißt, alles bleibt dynamisch - man muss den Cache eigentlich nur leeren, wenn man Dateien geändert hat (z.B. auch WordPress aktualisiert hat).

Memcached, Redis usw. können zum einen als Session-Cache für PHP zur Anwendung kommen. Zum anderen nutzen einige Anwendungen diese Caches, um bereits (teilweise) gerenderte Seiten zu speichern. Ich nutze Redis z.B. als Cache für das Content Management System TYPO3. Das ist alles noch hinter dem Webserver.

Varnish sitzt üblicherweise vor dem Webserver und speichert HTML, JSON oder ähnliches zwischen, so dass eine Anfrage nach z.B. https://www.meinedomain.de/index.php gar nicht erst den Webserver erreicht, kein PHP ausgeführt und keine MySQL- oder ähnliche Datenbank abgefragt werden muss.

Alle drei Caches arbeiten in der Regel völlig unabhängig voneinander (können sich je nach Wunsch ergänzen).
 
Evtl. ist das ja auch noch eine Alternative für Dich.

Ich bin noch nicht festgefahren auf irgendwas, wollt nur mal wissen, was ihr so empfehlt und gerne nutzt und warum. ;)
Ist jetzt zwar kein Neuland für mich, wurde aber von mir stiefmütterlich behandelt (opcache halt mal draufbügeln, fertig), weil keine Notwendigkeit bestand.

Verstehe ich das bisher so richtig, dass die sich untereinander keinesfalls ausbremsen, sofern man nicht zwei unterschiedliche tools nimmt, die das gleiche machen?
opcache+redis=ist ok


Ui, jetzt geht's hier etwas durcheinander mit den ganzen Caches... vielleicht sollte man lieber einen neuen Thread dazu aufmachen, als diesen hier zu hijacken.
Ich habs befürchtet. :rolleyes:

man muss den Cache eigentlich nur leeren, wenn man Dateien geändert hat (z.B. auch WordPress aktualisiert hat).
Jep, das ist bekannt.

Alle drei Caches arbeiten in der Regel völlig unabhängig voneinander (können sich je nach Wunsch ergänzen).
Perfekt und die restliche Erklärung hilft ungemein, danke!
 
Hi,

ich habe absolut keine Ahnung was ich während meiner vielen vielen verschiedensten Test geändert habe, aber ich bekomme seit ein paar Tagen keine Meldung im nginx sondern im Nextcloud.log vielleicht kann dies jemand lesen:

Code:
{"reqId":"bOc5wX9ygGhjFydvRP70","level":3,"time":"2018-11-14T20:39:28+00:00","remoteAddr":"10.49.1.5","user":"--","app":"base","method":"GET","url":"\/","message":{"Exception":"ErrorException","Message":"call_user_func_array() expects parameter 1 to be a valid callback, function 'session_name' not found or invalid function name","Code":0,"Trace":[{"file":"\/usr\/local\/www\/nextcloud\/lib\/private\/Session\/Internal.php","line":210,"function":"trapError","class":"OC\\Session\\Internal","type":"->","args":[0,"call_user_func_array() expects parameter 1 to be a valid callback, function 'session_name' not found or invalid function name"]},{"file":"\/usr\/local\/www\/nextcloud\/lib\/private\/Session\/Internal.php","line":53,"function":"invoke","class":"OC\\Session\\Internal","type":"->","args":["session_name",["ochwk8ttsy7c"]]},{"file":"\/usr\/local\/www\/nextcloud\/lib\/base.php","line":424,"function":"__construct","class":"OC\\Session\\Internal","type":"->","args":["ochwk8ttsy7c"]},{"file":"\/usr\/local\/www\/nextcloud\/lib\/base.php","line":656,"function":"initSession","class":"OC","type":"::","args":[]},{"file":"\/usr\/local\/www\/nextcloud\/lib\/base.php","line":1068,"function":"init","class":"OC","type":"::","args":[]},{"file":"\/usr\/local\/www\/nextcloud\/index.php","line":40,"args":["\/usr\/local\/www\/nextcloud\/lib\/base.php"],"function":"require_once"}],"File":"\/usr\/local\/www\/nextcloud\/lib\/private\/Session\/Internal.php","Line":183,"CustomMessage":"--"},"userAgent":"Mozilla\/5.0 (X11; Ubuntu; Linux x86_64; rv:63.0) Gecko\/20100101 Firefox\/63.0","version":""}

Zumindest hatte ich im Nextcloud Forum keine Antwort erhalten können.

Gruß Mardor
 
Zurück
Oben