2010-05-17 9 views
8

In PHP 5.3 gibt es eine Möglichkeit, eine Funktion umzubenennen oder eine Funktion zu "haken".Umbenennen von Funktionen zur Laufzeit in PHP

Es gibt die rename_function() in "APD", die seit 2004 gebrochen wurde. Wenn Sie versuchen, und bauen es auf PHP 5.3 werden Sie diese Fehlermeldung erhalten:

'struct _zend_compiler_globals' has no member named 'extended_info'

Dies ist eine wirklich einfache Fehler zu beheben, ändern Sie einfach die folgende Zeile:

GC(extended_info) = 1;

zu

CG(compiler_options) |= ZEND_COMPILE_EXTENDED_INFO;

ich veränderte meine php.ini und die APD zeigt in meinem phpinfo(), wie ich oben t sollte. Aber wenn ich rename_function() rufe, lädt die PHP Seite nicht und ich bekomme einen Segmentierungsfehler in meinem /var/log/apache2/error.log.

Gibt es trotzdem eine APD zu reparieren, um mit einer modernen Version von PHP zu arbeiten? Oder gibt es eine andere Methode, um Funktionen umzubenennen? Warum in der Welt ist wichtig, nicht in php! ??!?! (Ich liebe Python :)

+0

Ich weiß, diese Frage ist ein bisschen alt, aber können Sie mir zeigen, Ihren Code? – Glaslos

+0

@Glaslos, soweit ich weiß, funktioniert das alles nicht mehr. – rook

+0

Ich habe APD zur Arbeit. Also vielleicht kann ich dir helfen ... – Glaslos

Antwort

2

Das up-to-date kann runkit Erweiterung auf http://github.com/zenovich/runkit Es unterstützt alle zeitgenössischen finden Versionen von PHP vorerst veröffentlicht (von 4.4 bis 5.4+). Dieses Runkit ist offiziell und wird unterstützt.

Mit freundlichen Grüßen, Dmitry Zenovich

+0

Vielen Dank! Dies ist eine nützliche Erweiterung. – rook

2

Runkit Trunk ist 5.3 + kompatibel.

 
svn checkout http://svn.php.net/repository/pecl/runkit/trunk runkit 
cd runkit 
phpize 
./configure 
make && make install 

hinzufügen extension = runkit.so zu php.ini (oder runkit.ini in conf.d)

Um runkit_function_rename() verwenden Sie auch PHP mit der --enable-maintainer-zts Konfiguration Flag neu kompiliert werden müssen. (Verdammt du zend!)

2

Ich weiß, diese Frage ist ein bisschen alt, aber ich war vor kurzem auf der Suche nach einer Möglichkeit, Funktionen zum Testen umzubenennen und lief in ähnliche Schwierigkeiten mit APD.

Schließlich auf die richtige Google-Abfrage und fand eine andere Option: Sebastian Bergmann test_helpers extension - es hat seine eigene rename_function(), die scheint gut zu funktionieren, sowie einige andere handliche Helfer zum Abfangen und Spott Dinge.

Bonus - ein relativ schmerzlos installieren:

$ pear channel-discover pear.phpunit.de 
$ pecl install phpunit/test_helpers 

Und dann extension=test_helpers.so auf die Datei php.ini hinzufügen