2010-12-08 9 views
0

Ist es möglich mit PHP (5) oder anderen Linux-Tools auf einem Apache-Debian-Webserver, die Dateianforderungen eine einzige HTTP-Anfrage zu erhalten? aus Leistungsgründen möchte ich sie mit der im Cache gespeicherten "Version" meiner Kuchen-App vergleichen.Count Anzahl der Dateianfragen ausgelöst

nicht zwischengespeichert, die in einigen Ansichten über 100 sein könnte. im Cache nur bis zu 10 (hoffentlich).

afaik gibt es 3 Haupt-Dateifunktionen: file_get_contents(), file() und das Handbuch fopen() etc

aber ich kann nicht außer Kraft setzen sie, so kann ich nicht eine LogRequest() Funktion in sie setzen. gibt es einen anderen Weg? Callbacks zu Funktionen hinzufügen? die Dateianforderungen abfangen?

+0

Wenn Sie nur daran interessiert, wie die Cache-Version führt im Vergleich zu den nicht-Cache-Version, führen Sie einfach einen Profiler einmal mit Cache aktiviert und dann wieder mit Cache deaktiviert. Das sollte dir den Unterschied sagen. Kann Xdebug dafür verwenden. Wenn Sie Belastungstests durchführen möchten, verwenden Sie den Befehl 'ab'. – Gordon

+0

Nun, in diesem speziellen Fall mehr die Menge der Anfragen das PHP-Skript muss das Endergebnis zu erreichen. Nicht nur für den Vergleich mit der zwischengespeicherten Version, sondern auch für das Ziel, die Ansichten mit den meisten Dateianforderungen zu verfolgen und zu versuchen, die Anzahl zu verringern. – mark

Antwort

2

Dieser Vorschlag scheint nicht intuitiv, aber Sie können auf xdebug - function trace

und anschauen Sobald Sie xdebug installiert und aktiviert haben, können Sie alle Arten von Konfiguration verwenden zu speichern das Profiling in eine Datei und Sie können es später abrufen. Wie zum Beispiel Profilergebnissen für verschiedene URL-Speichern in andere Datei.

Zur Überwachung Dateisystem verbundenen Funktionen können Sie einen Parse der Textdatei tun (Profilierungs Ergebnisse) und eine Anzahl von anpassungsfähigen Funktionen tun (programmierbar oder manuell)

+0

thx viel - wegen xdebug habe ich: 272 file_exists, 100 require, 20 include, 32 fopen für eine einzige Anfrage von meiner CakePHP App (Homepage) – mark

0

Interessante Frage. Ich würde mit der stream_wrapper beginnen ... versuchen, sie durch benutzerdefinierte Klassen zu ersetzen.

+0

interessante Klasse. Ich denke, niemand hat das vorher versucht ... :) zumindest meine Suche ergab keine Ergebnisse beim Versuch, die Anfragen zu zählen. – mark

0

Die Art und Weise, wie ich es tun würde wäre, eine benutzerdefinierte Funktion zu erstellen, die die eine umschreibt, die Sie benötigen.

function custom_file_get_contents($filename) { 
    $GLOBALS['file_get_contents_count']++; 
    return file_get_contents($filename); 
} 

Und alle Anrufe zu file_get_contents mit custom_file_get_contents ersetzen. Dies ist nur ein rudimentäres Beispiel, aber Sie bekommen die Idee.

Randnotiz, wenn Sie zählen möchten, wie viele Dateien Ihr Skript (oder erforderlich) aufgenommen hat, sehen get_included_files()

+0

sicher - aber das würde erfordern, dass meine CAKE-Kern geändert werden. und das solltest du vermeiden. Die Verwendung eines Frameworks mit einem modifizierten Kern würde Core-Updates ziemlich schwierig machen. – mark

1

Sie Xdebug können alle Funktion anmelden ruft

Diejenigen so genannte " Funktionstraces "können eine Hilfe sein, wenn Sie in einer Anwendung neu sind oder wenn Sie herausfinden möchten, was gerade passiert, wenn Ihre Anwendung läuft. Die Funktionstraces können optional auch die Werte von Variablen anzeigen, die an die Funktionen und Methoden übergeben wurden, und auch Werte zurückgeben. In den Standard-Ablaufverfolgungen sind diese beiden Elemente nicht verfügbar.

0

Es gibt eine PECL-Erweiterung namens ADB (Advanced PHP Debugger), die über Funktionen verfügt, die für eine solche cse sehr nützlich sind - override_function() und rename_function(). Sie könnten so etwas tun:

rename_function('file_get_contents', 'file_get_contents_orig'); 

function file_get_contents($filename) { 
    logRequest(); 
    return file_get_contents_orig($filename); 
} 

Es sieht aus wie ADB ist ziemlich einfach zu installieren, auch.

Siehe http://www.php.net/manual/en/book.apd.php