Wie protokolliert man alle Aufrufe einer Funktion in PHP? (mail () Funktion)

8

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

    
Jose 13.02.2013, 09:56
quelle

4 Antworten

3

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:

  1. Ä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)

  2. 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.

  3. 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).

SDC 13.02.2013 10:18
quelle
2

Ab & gt; = PHP 5.3.0 können Sie in Ihrem php.ini :

einfach einen Pfad zum gewünschten Ort Ihrer logilfe angeben %Vor%

Weitere Informationen finden Sie in der PHP-Dokumentation .

    
morten.c 08.12.2015 21:57
quelle
0

Was Sie tun können, ist, PHP-Quellcode herunterladen, bearbeiten Sie diese Datei:

%Vor%

und logger dort hinzufügen.

Kompilieren Sie dann erneut.

Das ist wahrscheinlich nur so, wie Sie implizit debuggen können, wer Ihre PHP-Funktion von wo aus aufruft.

    
jancha 13.02.2013 10:22
quelle
0

Um mail () zu blockieren, löschen Sie einfach / usr / sbin / sendmail von phps chroot und erzwingen authentifizierte SMTP.

    
stAn 06.11.2014 23:49
quelle

Tags und Links