Inhaltsverzeichnis
Dynamische Änderung von Konstanten" >Dynamische Änderung von Konstanten
Installation" >Installation
Zusammenfassung" >Zusammenfassung
Heim Backend-Entwicklung PHP-Problem So verwenden Sie die Runkit-Erweiterung in PHP

So verwenden Sie die Runkit-Erweiterung in PHP

Jun 02, 2021 pm 06:05 PM
php

In diesem Artikel erfahren Sie, wie Sie die Runkit-Erweiterung in PHP verwenden. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.

So verwenden Sie die Runkit-Erweiterung in PHP

Dieses Mal bringen wir Ihnen eine lustige Erweiterung. Wir wissen, dass wir bei der Ausführung von PHP, also nach Abschluss der Bereitstellung, weder die Werte der Konstanten noch die Implementierung im Methodenkörper ändern können. Mit anderen Worten: Nachdem wir die Codierung abgeschlossen haben, laden wir den Code auf den Server hoch. Zu diesem Zeitpunkt können wir den Wert einer Konstante nicht ändern, ohne den Code zu ändern. Die Konstante selbst kann nicht geändert werden. Die Runkit-Erweiterung kann uns jedoch dabei helfen, diese Funktion zu erfüllen.

Dynamische Änderung von Konstanten

define('A', 'TestA');

runkit_constant_redefine('A', 'NewTestA');

echo A; // NewTestA
Nach dem Login kopieren

Ist das nicht erstaunlich? Diese Runkit-Erweiterung ist eine funktionale Erweiterung, die es uns ermöglicht, einige Konstanten, Methodenkörper und Klassen zur Laufzeit dynamisch zu ändern. Aus Sicht der Systemsicherheit ist diese Erweiterung natürlich nicht unbedingt zu empfehlen. Da die Bedeutung einer Konstante eine unveränderliche Größe ist, sollte sie nicht geändert werden. Ebenso kann sich die dynamische Änderung des Inhalts eines Funktionskörpers oder einer Klassendefinition zur Laufzeit auf anderen Code auswirken, der diese Funktionen oder Klassen aufruft. Daher ist diese Erweiterung eine gefährliche Erweiterung.

Neben der dynamischen Änderung von Konstanten können wir auch die Funktionen runkit_constant_add() und runkit_constant_remove() verwenden, um Konstanten dynamisch hinzuzufügen oder zu löschen.

Installation

Um die Runkit-Erweiterung zu installieren, müssen Sie sie von Github herunterladen und die Erweiterung dann normal kompilieren. Der PECL-Download ist veraltet.

PHP5: http://github.com/zenovich/runkit

PHP7: https://github.com/runkit7/runkit7.git

Clone Nach Erfolg befolgen Sie einfach die normalen Schritte zur Kompilierung und Installation der Erweiterung.

phpize
./configure
make
make install
Nach dem Login kopieren

Verschiedene PHP-Versionen müssen unterschiedliche Versionen von Erweiterungen installieren. Gleichzeitig befindet sich runkit7 noch in der Entwicklung und einige Funktionen werden noch nicht unterstützt, wie zum Beispiel:

  • runkit_class_adopt

  • runkit_class_emancipate

  • Runkit_import kit_Sandbox

  • R unkit_Sandbox_Parent

  • Beim Schreiben des Testcodes für diesen Artikel werden die oben genannten Funktionen oder Klassen verwendet werden nicht unterstützt. Mithilfe der PHP5-Umgebung können Sie testen, ob die Originalerweiterungen normal genutzt werden können.

  • Superglobale Variablenschlüssel anzeigen

    print_r(runkit_superglobals());
    //Array
    //(
    //    [0] => GLOBALS
    //    [1] => _GET
    //    [2] => _POST
    //    [3] => _COOKIE
    //    [4] => _SERVER
    //    [5] => _ENV
    //    [6] => _REQUEST
    //    [7] => _FILES
    //    [8] => _SESSION
    //)
    Nach dem Login kopieren
  • Diese Funktion überprüft tatsächlich alle superglobalen Variablenschlüsselnamen in der aktuell ausgeführten Umgebung. Dies sind einige unserer häufig verwendeten superglobalen Variablen, daher werde ich sie nicht einzeln erklären.
  • Methodenbezogene Operationen
  • Methodenoperationen sind die gleichen wie konstante Operationen. Wir können verschiedene Methoden dynamisch hinzufügen, ändern, löschen und umbenennen. Schauen wir uns zunächst an, was uns am meisten beschäftigt, wenn wir den Logikcode im Methodenkörper während der dynamischen Laufzeit ändern.

    function testme() {
      echo "Original Testme Implementation\n";
    }
    testme(); // Original Testme Implementation
    runkit_function_redefine('testme','','echo "New Testme Implementation\n";');
    testme(); // New Testme Implementation
    Nach dem Login kopieren
  • definiert eine testme()-Methode und ändert dann deren Implementierung über runkit_function_redefine(). Wenn testme() schließlich erneut aufgerufen wird, ist die Ausgabe die neu geänderte Implementierung. Können wir also die mit PHP gelieferten Methoden ändern?
  • // php.ini runkit.internal_override=1
    runkit_function_redefine('str_replace', '', 'echo "str_replace changed!\n";');
    str_replace(); // str_replace changed!
    
    runkit_function_rename ('implode', 'joinArr' );
    var_dump(joinArr(",", ['a', 'b', 'c'])); 
    // string(5) "a,b,c"
    
    
    array_map(function($v){
       echo $v,PHP_EOL;
    },[1,2,3]);
    // 1
    // 2
    // 3
    runkit_function_remove ('array_map');
    
    // array_map(function($v){
    //   echo $v;
    // },[1,2,3]);
    // PHP Fatal error:  Uncaught Error: Call to undefined function array_map()
    Nach dem Login kopieren

    Die Kommentare im Code machen es sehr deutlich. Wir müssen nur runkit.internal_override=1 in php.ini setzen, um die mit PHP gelieferten Methoden und Funktionen dynamisch zu ändern. Im ersten Absatz haben wir beispielsweise die Methode str_replace() so geändert, dass sie einen Textabsatz direkt ausgeben kann. Dann benennen wir „implode()“ in „joinArr()“ um, damit wir dieses „joinArr()“ genau wie „implode()“ verwenden können. Schließlich haben wir die Methode array_map() entfernt. Wenn diese Methode erneut aufgerufen wird, wird ein Fehler gemeldet.

Vorgänge im Zusammenhang mit der Klassenmethode

Der Betrieb der internen Methodenfunktion der Klasse ähnelt dem Betrieb der Variablenmethode oben, wir können jedoch die mit PHP gelieferten Klassen nicht ändern. Sie können es selbst ausprobieren.
//runkit_method_add('PDO', 'testAddPdo', '', 'echo "This is PDO new Func!\n";');
//PDO::testAddPdo();
// PHP Warning:  runkit_method_add(): class PDO is not a user-defined class
Nach dem Login kopieren
Wie aus der Fehlermeldung hervorgeht, handelt es sich bei der PDO-Klasse nicht um eine benutzerdefinierte Klasse, sodass die Runkit-Funktion nicht für verwandte Vorgänge verwendet werden kann. Schauen wir uns dann an, wie unsere benutzerdefinierten Klassen Runkit verwenden, um dynamische Vorgänge auszuführen.

class Example{
}

runkit_method_add('Example', 'func1', '', 'echo "This is Func1!\n";');
runkit_method_add('Example', 'func2', function(){
    echo "This is Func2!\n";
});
$e = new Example;
$e->func1(); // This is Func1!
$e->func2(); // This is Func2!

runkit_method_redefine('Example', 'func1', function(){
    echo "New Func1!\n";
});
$e->func1(); // New Func1!

runkit_method_rename('Example', 'func2', 'func22');
$e->func22(); // This is Func2!

runkit_method_remove('Example', 'func1');
//$e->func1();
// PHP Fatal error:  Uncaught Error: Call to undefined method Example::func1()
Nach dem Login kopieren

Wir haben eine leere Klasse definiert, ihr dann dynamisch zwei Methoden hinzugefügt, dann Methode 1 geändert, Methode 2 umbenannt und schließlich Methode 1 gelöscht. Die Operationsreihe ist tatsächlich dieselbe wie bei den oben genannten gewöhnlichen Methoden.

Zusammenfassung

Wie oben erwähnt, ist diese Erweiterung eine relativ gefährliche Erweiterung, insbesondere wenn runkit.internal_override aktiviert ist, können wir auch die nativen Funktionen von PHP ändern. Aber wenn Sie es unbedingt benutzen müssen, dann sind seine Funktionen sehr nützlich. Genau wie beim Besuchermuster: „Meistens braucht man das Besuchermuster nicht, aber wenn man das Besuchermuster braucht, braucht man es wirklich.“ Das Gleiche gilt für diesen Satz von Runkit-Erweiterungen.

推荐学习:php视频教程

测试代码:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202006/source/%E4%B8%80%E8%B5%B7%E5%AD%A6%E4%B9%A0PHP%E7%9A%84runkit%E6%89%A9%E5%B1%95%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8.php
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonSo verwenden Sie die Runkit-Erweiterung in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

CakePHP Datum und Uhrzeit CakePHP Datum und Uhrzeit Sep 10, 2024 pm 05:27 PM

Um in cakephp4 mit Datum und Uhrzeit zu arbeiten, verwenden wir die verfügbare FrozenTime-Klasse.

CakePHP-Datei hochladen CakePHP-Datei hochladen Sep 10, 2024 pm 05:27 PM

Um am Datei-Upload zu arbeiten, verwenden wir den Formular-Helfer. Hier ist ein Beispiel für den Datei-Upload.

Besprechen Sie CakePHP Besprechen Sie CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP ist ein Open-Source-Framework für PHP. Es soll die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich vereinfachen. CakePHP basiert auf einer MVC-ähnlichen Architektur, die sowohl leistungsstark als auch leicht zu verstehen ist. Modelle, Ansichten und Controller gu

CakePHP erstellt Validatoren CakePHP erstellt Validatoren Sep 10, 2024 pm 05:26 PM

Der Validator kann durch Hinzufügen der folgenden zwei Zeilen im Controller erstellt werden.

CakePHP-Protokollierung CakePHP-Protokollierung Sep 10, 2024 pm 05:26 PM

Die Anmeldung bei CakePHP ist eine sehr einfache Aufgabe. Sie müssen nur eine Funktion verwenden. Sie können Fehler, Ausnahmen, Benutzeraktivitäten und von Benutzern durchgeführte Aktionen für jeden Hintergrundprozess wie Cronjob protokollieren. Das Protokollieren von Daten in CakePHP ist einfach. Die Funktion log() wird bereitgestellt

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

CakePHP-Kurzanleitung CakePHP-Kurzanleitung Sep 10, 2024 pm 05:27 PM

CakePHP ist ein Open-Source-MVC-Framework. Es erleichtert die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich. CakePHP verfügt über eine Reihe von Bibliotheken, um die Überlastung der häufigsten Aufgaben zu reduzieren.

See all articles