Ich habe einen dedizierten Server mit Dutzenden von virtuellen Hosts. Ich möchte feststellen, welche Datei mail () Funktion aufruft und diese global aufzeichnen. Ich brauche so etwas:
%Vor%Ich kann debug_backtrace () oder ähnliches nicht verwenden, weil ich das zu keiner PHP-Datei auf dem Server hinzufügen kann. Kann ich alle Funktionsaufrufe global in einer Datei protokollieren, so wie Fehler in einer Datei wie error.log protokolliert werden?
Danke
Im Allgemeinen wirst du damit Probleme haben; PHP bietet keinen integrierten Logging-Mechanismus, daher müssen Sie etwas zu Ihrem PHP-System hinzufügen, um dies zu tun.
Die Optionen, wie ich es sehe:
Ändern Sie den PHP-Code. Angesichts dessen, was Sie in der Frage gesagt haben, denke ich, dass dies keine Option ist, aber es muss gesagt werden, da es die offensichtliche Antwort ist. (PHP mail()
-Funktion ist so grundlegend, dass jeder PHP-Code wirklich eine Wrapper-Klasse dafür verwenden sollte, nur um ihre Gesundheit zu behalten)
Wenn wir speziell über die Funktion mail()
sprechen, könnten wir sie protokollieren, indem wir den sendmail-Client protokollieren, den mail()
aufruft. Ihr sendmail
-System auf dem Server wird wahrscheinlich von einem Unix-Shell-Skript gesteuert, das von PHPs mail()
-Funktion aufgerufen wird. Sie sollten in der Lage sein, dieses Shell-Skript zu ändern, um die Mail-Ereignisse zu protokollieren. Dies wird wahrscheinlich nicht in der Lage sein, Ihnen Details wie die Zeilennummer zu geben, aber es wird Ihnen den Benutzer sagen, der es macht, usw.
Verwenden Sie den Suhosin-PHP-Härten-Patch . Dies ist ein Patch für PHP, der Dutzende von sicherheitsrelevanten Funktionen bietet; Ich würde es auf jeden Fall für eine gemeinsame Hosting-Umgebung empfehlen. Aber für Sie enthält es auch Protokollierungsfunktionen , mit denen Sie die Verwendung bestimmter Funktionen protokollieren können. einschließlich Dateiname und Zeilennummer - also genau das Szenario, nach dem Sie suchen. Dies ist die Lösung, die ich empfehlen würde .... das einzige große Problem, das Sie hier haben, ist, wenn Sie Ihre PHP-Version auf dem neuesten Stand halten, denn Suhosin ist derzeit nur für PHP 5.3 und nicht für 5.4 verfügbar. Als PHP-Entwickler würde ich PHP 5.4 auf meinem Server installieren, aber als Provider wird 5.3 immer noch unterstützt, also ist nichts falsch daran. (auf der anderen Seite, wenn Sie noch auf 5.2 sind, sollten Sie so schnell wie möglich upgraden, da es jahrelang nicht unterstützt wurde und Sicherheitslücken aufweist).
Ab & gt; = PHP 5.3.0 können Sie in Ihrem php.ini
:
Weitere Informationen finden Sie in der PHP-Dokumentation .