Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Einführung in die Leistung von PHP7 und HHVM (Bild und Text)

Detaillierte Einführung in die Leistung von PHP7 und HHVM (Bild und Text)

黄舟
黄舟Original
2017-03-24 10:07:524473Durchsuche

Änderungen im Ranking der PHP-Sprache

Laut dem „TIOBEProgramming Language Ranking“ (obwohl die Liste weist Einschränkungen bei den statistischen Methoden auf, ist aber dennoch eine gute Referenz. Im Jahr 2010 belegte PHP den dritten Platz unter den Programmiersprachen der Welt. Es ist ersichtlich, dass die PHP-Sprache im PC-Internetzeitalter die leistungsstärkste Sprache im Webbereich ist.        

PHP7和HHVM的性能之争介绍 - 徐汉彬Hansion - 技术行者

Unter PHP-Programmierern kursierte ein Witz: Wenn alle anfangen, Lärm zu machen, esse ich mit dir zu Abend. ​​ ​

PHP-Programmierer: PHP ist die beste Sprache der Welt!
Ein Forum-Brattopf, allerhand Streit ... Eine Frau: Nimm dich, lass uns gehen!
PHP-Programmierer: Nicht heute, ich muss sie davon überzeugen, dass PHP die beste Sprache sein muss.


Okay, kommen wir zur Sache. Die Sprache an sich ist nicht gut oder schlecht, sie löst nur verschiedene Probleme in den Szenarien, in denen sie verwendet wird. Das Internet-Zeitalter schreitet mit der Einführung des mobilen Internets in nur kurzer Zeit voran In mehr als vier Jahren hat die Entwicklung mobiler Technologien die Welt erobert. Gleichzeitig entstehen verschiedene Sprachen, und das einst so glorreiche PHP ist von der ursprünglichen Liste der Programmiersprachen (Liste vom Dezember 2014) auf den sechsten Platz zurückgefallen eins). Infolgedessen tauchten nach und nach Stimmen auf, die PHP schlecht redeten.

       PHP7和HHVM的性能之争介绍 - 徐汉彬Hansion - 技术行者

Bruder Niao (Hui Xinchen, einer der PHP-Sprachentwickler) teilte jedoch 2014 bei Qcon Daten mit. Unter den 1 Million Websites der Welt sind es 81,3 % Die verwendete Webserver-Skriptsprache ist PHP, was im gleichen Zeitraum des Jahres 2013 bei 78,3 % lag. Mit anderen Worten: PHP ist in Bezug auf Webdienste nicht zurückgegangen, hat aber in der Welle des mobilen Internets stark zugenommen. Die Anwendung anderer Sprachtechnologien wird dadurch verwässert.

In letzter Zeit ist der Leistungsvergleich zwischen PHP7 und HHVM zu einem heißen und kontroversen Thema geworden. Jeder diskutiert und achtet darauf, welches die Zukunft der PHP-Leistungsverbesserung ist.

Der Ursprung von HHVM (HipHop Virtual Machine)

HHVM ist eine Open-Source-PHP-Virtual-Machine, die JIT-Kompilierung und andere Technologien erheblich nutzt Verbessern Sie die Ausführungsleistung von

PHP-Code

. Gerüchten zufolge kann die Ausführungsleistung der aktuellen Version des nativen PHP-Codes um das Fünf- bis Zehnfache verbessert werden. HHVM stammt von Facebook. Viele der frühen Codes von Facebook wurden jedoch mit der rasanten Geschäftsentwicklung implementiert Die betriebliche Effizienz ist zu einem immer offensichtlicheren Thema geworden. Um die Ausführungseffizienz zu optimieren, begann Facebook 2008 mit der Verwendung von HipHop, einer PHP-Ausführungs-Engine, für die es ursprünglich entwickelt wurde Konvertieren Sie eine große Menge Facebook-PHP-Code in                             C++ zur Verbesserung der Leistung und Einsparung von Ressourcen. Die Leistung von PHP-Code mit HipHop wird mehrfach verbessert. Später stellte Facebook die HipHop-Plattform als Open-Source-Lösung zur Verfügung und entwickelte sie nach und nach zur aktuellen Plattform weiter HHVM.

1. Warum ist PHP langsam?

                                                                       

PHP ist langsamer als Sprachen auf C/C++-Ebene. Tatsächlich wurde die PHP-Sprache ursprünglich nicht für die Lösung rechenintensiver Anwendungsszenarien entwickelt. Wir können ungefähr verstehen, dass PHP die Ausführungseffizienz opfert, um die Entwicklungseffizienz zu verbessern.

Wir wissen, dass eine große Funktion von PHP die schwache Typfunktion ist. Mit anderen Worten, ich kann eine Variable nach Belieben definieren und sie dann einer beliebigen zuweisen Wert nach Belieben. Am Beispiel einer int-Ganzzahl in der C-Sprache :

int num = 200;//通常是4字节

Wenn PHP jedoch dieselbe Variable definiert, ist die tatsächliche entsprechende Speicherstruktur :


                                                                                                                                                Speicher mit viel mehr Variablen wird in PHP wie folgt definiert:

In Tatsächlich wird für PHP unabhängig von der Art der gespeicherten Daten das oben erwähnte „Pass Killing“ verwendet Strukturimplementierung. Um mit dem Variablentyp „Intrusion“ von PHP-Programmierern kompatibel zu sein, tut PHP dies Es ist freundlich zu den Entwicklern, aber grausam zur Ausführungs-Engine. Der Speicherverbrauch einer einzelnen Variablen ist möglicherweise noch nicht offensichtlich. Sobald das -Array

usw. von PHP verwendet wird, steigt die Komplexität exponentiell (die Implementierung des Arrays ist HashTable). Wenn dann die Zend-Engine ausgeführt wird, werden diese PHP-Codes in Opcode (PHPs Zwischenbytecode, das Format ähnelt in gewisser Weise dem Assembler) kompiliert, der Zeile für Zeile von der Zend-Engine verarbeitet wird. Erklärung und Ausführung.
$a = 200;//这变量将实际占用对比C变量很多倍的存储空间。

Ob es sich um die Verbindungsoperation von String oder die einfache Änderung des Arrays usw. handelt, fast alle davon sind „ein Wort eines PHP-Programmierers, und die Zend-Engine wird das Bein brechen" Rhythmus. Daher verbraucht PHP für denselben Vorgang mehr Systemressourcen wie CPU und Speicher als C. Darüber hinaus gibt es automatisches Speicherrecycling, Variablentypbeurteilung usw., was den Verbrauch von Systemressourcen erhöht.

Zum Beispiel habe ich die Schnellsortierungsfunktion und die in reinem PHP implementierte native Sortierfunktion verwendet, um 10.000 Ganzzahlen zu sortieren und einen zeitaufwändigen Vergleich durchzuführen. Die Ergebnisse sind wie folgt:

PHP7和HHVM的性能之争介绍 - 徐汉彬Hansion - 技术行者Die native Sortierung dauert 3,44 ms, während unsere eigene Implementierung der PHP-Funktion
Sortierung dauert 68,79 MS. Wir haben festgestellt, dass zwischen beiden eine große Lücke in der Ausführungseffizienz besteht. Meine Art zu testen besteht darin, das Zeitintervall vor und nach der Ausführung der Funktion zu berechnen, und nicht die Zeit vom Anfang bis zum Ende des gesamten PHP-Skripts. PHP-Skript zum Starten und Herunterfahren Der Prozess selbst erfordert eine Reihe von Initialisierungs- und Bereinigungsarbeiten, die ebenfalls viel Zeit in Anspruch nehmen.                                                                                        

       

       

                                                                              PHP7和HHVM的性能之争介绍 - 徐汉彬Hansion - 技术行者

Normalerweise ist die Rangfolge der PHP-Ausführungseffizienz:

                 

Am schnellsten sind die PHP-Sprachstrukturen (isset, echo usw.), die Teil der PHP-Sprache sind (sie sind überhaupt keine Funktionen).

Dann sind die nativen und erweiterten Funktionen von PHP die schnelleren. Die auf der Zend-API basierende PHP-Erweiterung implementiert Funktionen in C und ihre Ausführungseffizienz liegt in der gleichen Größenordnung wie C++/Java.

  • Was wirklich langsam ist, ist der Code und die Funktionen, die wir selbst über PHP schreiben. Wenn wir beispielsweise ein relativ umfangreiches Framework verwenden, das in reinem PHP implementiert ist, verringert dies offensichtlich die Ausführungseffizienz auf Sprachebene und belegt mehr Speicher, da das Framework selbst über viele Module verfügt. (Das inländische Yaf-Framework wird erweitert implementiert, sodass die Ausführungseffizienz viel schneller ist als das in reinem PHP geschriebene Framework.)

  •                          

    PHP7和HHVM的性能之争介绍 - 徐汉彬Hansion - 技术行者
           

    Unter normalen Umständen empfehlen wir nicht, PHP zur Implementierung komplexer logischer Berechnungsfunktionen zu verwenden, insbesondere in Szenarien, in denen der Websystemverkehr relativ groß ist. Daher sollten PHP-Programmierer Verfügen Sie über ein relativ umfassendes Verständnis der verschiedenen nativen Funktionen und Erweiterungen von PHP. Suchen Sie in bestimmten Funktionsimplementierungsszenarien nach mehr nativen Lösungen (native Schnittstelle ) anstatt selbst jede Menge komplexe Lösungen zu schreiben PHP-Code zur Implementierung dieser Art von Funktionalität.

    Wenn Sie über genügend Entwicklungsfunktionen für PHP-Erweiterungen verfügen, wird das Umschreiben dieser Art von Geschäftsfunktion als PHP-Erweiterung auch die Effizienz der Codeausführung erheblich verbessern. Dies ist eine sehr gute Methode und wird auch häufig in der PHP-Optimierung eingesetzt. Allerdings liegen auch die Mängel der selbst geschriebenen PHP-Geschäftsentwicklung auf der Hand:

    1. Erweiterungsentwicklung dauert lange, und Änderungen sind kompliziert, wenn sich Anforderungen ändern, und es ist schwer zu schreiben. Es kann die Stabilität von Webdiensten beeinträchtigen. (Wenn es beispielsweise im Worker-Modus von Apache in einem Multithread-Szenario hängt, wirkt es sich auf andere normale Unterthreads im selben Prozess aus. Wenn es sich um einen Multithread-Webmodus handelt, muss das Schreiben von Erweiterungen auch Thread Sicherheit )

    2. Wenn die PHP-Version aktualisiert wird, muss die Erweiterung möglicherweise zusätzliche Kompatibilitätsarbeiten durchführen.

    3. Auch die Wartungs- und Übernahmekosten nach Personalwechseln sind relativ hoch.

    Tatsächlich besteht die gängigere Lösung bei First-Line-Internetunternehmen nicht darin, PHP-Erweiterungen hinzuzufügen, sondern C/ zu verwenden. C++ schreibt unabhängig einen Dienstserver, und dann kommuniziert PHP über einen Socket mit dem Dienstserver, um die Geschäftsverarbeitung abzuschließen, ohne PHP selbst mit dem Geschäft zu koppeln.

    Die meisten Leistungsengpässe von Webdiensten liegen jedoch in der zeitaufwändigen Netzwerkübertragung und anderen Dienstservern (wie MySQL usw.) und Der Zeitaufwand für die PHP-Ausführung ist insgesamt sehr gering, sodass die Auswirkungen aus geschäftlicher Sicht möglicherweise nicht offensichtlich sind.

    2. Die Art und Weise, wie HHVM die PHP-Ausführungsleistung verbessert                        Ersetzt die Zend-Engine, um den Zwischenbytecode von PHP zu generieren und auszuführen (HHVM generiert sein eigenes Format des Zwischenbytecodes Code), ausgeführt durch JIT (Just                             Zeit

    , Just-in-Time-Kompilierung ist eine Softwareoptimierungstechnologie, was bedeutet, dass der Bytecode zur Laufzeit in Maschinencode kompiliert und zur Ausführung in Maschinencode umgewandelt wird. Die Standardmethode der Zend-Engine besteht darin, sie zuerst in Opcode zu kompilieren und sie dann einzeln zu kompilieren. Bei der Ausführung entspricht normalerweise jede Anweisung einer Funktion auf C-Sprachebene. Wenn wir eine große Anzahl wiederholter Opcodes (in reinem PHP geschriebene Codes und Funktionen) generieren, führt Zend diese C-Codes einzeln und mehrmals aus. Code. JIT geht noch einen Schritt weiter und kompiliert zur Laufzeit eine große Anzahl wiederholt ausgeführter Bytecodes in Maschinencode, um die Ausführungseffizienz zu verbessern. Normalerweise ist die Bedingung, die JIT auslöst, dass der Code oder die Funktion vorhanden ist wiederholte Anrufe.

           

                                                                                                                                                                                    

    Gewöhnlicher PHP-Code: Da der Typ der Variablen nicht festgelegt werden kann, muss zusätzlicher Logikcode zur Bestimmung des Typs hinzugefügt werden. Ein solcher PHP-Code ist der CPU-Ausführung und -Optimierung nicht förderlich von. Daher muss HHVM normalerweise PHP-Code mit der Hack-Schreibmethode (zusätzlicher technischer Code hinzugefügt, um mit bestimmten Funktionen kompatibel zu sein) verwenden, um zu „kooperieren“, um den Variablentyp festzulegen und die Virtualisierung zu erleichtern. Maschinell kompiliert und ausgeführt. PHP versucht, alle Typen in einer Form unterzubringen, während Hack alles markieren kann, was einem bestimmten Typ entspricht.

    Beispiel für eine Hack-Schreibmethode von PHP-Code:                                                                                                                                                                                                                                                                                             ​ ​ ​  

    Im obigen Beispiel wird der PHP-Code hauptsächlich mit Variablentypen hinzugefügt. Die allgemeine Richtung des Hack-Schreibens besteht darin, die bisherige „dynamische“ Schreibmethode in eine „

    statische

    “-Schreibmethode zu ändern, um mit HHVM zusammenzuarbeiten. PHP7和HHVM的性能之争介绍 - 徐汉彬Hansion - 技术行者
    HHVM hat aufgrund seiner hohen Leistung viel Aufmerksamkeit auf sich gezogen, und auch einige erstklassige Internetunternehmen haben begonnen, diesem Beispiel zu folgen. Den Ergebnissen des reinen Sprachausführungsleistungstests nach zu urteilen, ist HHVM der in der Entwicklung befindlichen PHP7-Version weit voraus.

    , die Lücke zwischen HHVM und PHP7 ist in den Ergebnissen des Testszenarios mit der WordPress-Open-Source-Blog-Homepage nicht so groß Lücke ist nicht offensichtlich.                                                                                                                                                                                               ​ ​  

    Allerdings befindet sich PHP7 noch in der Entwicklung. Den verfügbaren technischen Lösungen nach zu urteilen, ist das aktuelle HHVM etwas besser. Es gibt jedoch einige Probleme bei der Bereitstellung und Anwendung von HHVM:

    Die Bereitstellung von Diensten ist kompliziert und mit gewissen Wartungskosten verbunden.
    unterstützt nativen PHP-Code nicht vollständig und PHP-Erweiterungen müssen ebenfalls ordnungsgemäß kompatibel sein.


    HHVM ist eine neue virtuelle Maschine und kann bei längerer Ausführung zu Speicherverlusten führen. (Man sagt, wenn erstklassige Internetunternehmen diese Technologie anwenden, beheben sie Speicherlecks, indem sie sich selbst patchen.)

                       Für ein relativ neues Open-Source-Projekt dauert es noch einige Zeit, bis es ausgereift ist.
    Leistungsinnovation von PHP7

    Die Leistungsprobleme, für die PHP seit langem kritisiert wird, werden in dieser Version erheblich verbessert. In der Mitte der Version gibt es kein PHP6. Es wird gesagt, dass diese Version ein Projekt hat und die meisten Funktionen später in der 5.x-Version implementiert wurden. Um Verwirrung zu vermeiden, wird die nächste Hauptversion direkt PHP7 sein . (Vor ein paar Jahren habe ich auch Bücher über PHP6 gesehen.)

    1. Einführung in PHP7
    1.                                    >

      Obwohl die offiziell Da die Version von PHP7 möglicherweise erst im Oktober 2015 veröffentlicht wird, sollte eine Testversion im Juni nächsten Jahres verfügbar sein, gefolgt von einer 3-4-monatigen Qualitätssicherung.

    2. Der Projektplan der PHP-Community sieht wie folgt aus:

            


                                                                                                                                                                                                                                

      Tabelle

      , die Funktionsbeschreibungen, die angezeigt werden können, sind relativ vage. Es gibt definitiv noch weitere Features, diese wurden nur noch nicht angekündigt. Das Folgende stammt von der PHP-Community. Da es sich bei PHP7 um ein in der Entwicklung befindliches Projekt handelt, ist das Folgende möglicherweise nicht korrekt, hindert uns jedoch nicht daran, einen Blick darauf zu werfen.

        PHPNG (PHP Next Generation, Next Generation PHP), verschiedene Leistungsoptimierungen für die Zend-Ausführungs-Engine selbst, einschließlich JIT, können in Zend implementiert werden                                                           In der Opcache-Komponente.
      1. AST (Abstract Syntax Tree), der Zweck besteht darin, eine Middleware in den PHP-Kompilierungsprozess einzuführen, um die Art und Weise zu ersetzen, Opcode direkt aus dem Interpreter auszuspucken. Die Entkopplung von Interpreter und Compiler kann eine Menge Hack-Code reduzieren und gleichzeitig das Verständnis und die Wartung der Implementierung erleichtern.
      2. Einheitliche Variablensyntax (einheitliche Variablensyntax) führt eine intern konsistente und vollständige Variablensyntax ein, sodass der PHP-Parser verschiedene Variablentypen vollständiger unterstützen kann. Die Verwendung einiger Variablen muss angepasst werden, z. B. der Variablen $$a usw.
      3. Unterstützt Ganzzahlsemantik (Ganzzahlsemantik) wie NaN, Infinity, 071af19a55f4da1989e8c02b755ba052>, korrigiert die Konsistenz von list(), usw. warten.
      4. Unter den oben genannten Funktionen ist die Leistungsoptimierung von PHPng die am meisten erwartete. Die PHP-Community hat einige Leistungsgeschwindigkeitstestdaten veröffentlicht. Aus Datensicht ist PHPng Die Ausführungsleistung konnte im Vergleich zum Projektbeginn nahezu verdoppelt werden. Dieses Ergebnis ist bereits sehr gut. Darüber hinaus gibt es noch viele Optimierungspläne für PHP7, die noch nicht abgeschlossen sind. Warten Sie, bis alles fertig ist, Ich glaube, wir können eine höhere Leistung von PHP7 sehen.

      Diese Geschwindigkeitstestdaten stammen von der PHP-Community (wiki.php.net/phpng) und erfassen einen Teil der Daten:

                                                                                                               🎜>
                                                                                                                    


      Einfache Übersetzung:

                                              

      Die umfassende Testgeschwindigkeit wird um 35 % erhöht.

      In tatsächlichen Anwendungsszenarien gibt es eine Geschwindigkeitssteigerung von 20–70 % (die WordPress-Homepage weist eine Verbesserung von 60 % auf)

      • Weniger Speicherverbrauch

      • Unterstützt die am häufigsten verwendeten SAPIs

      • Unterstützt die meisten PHP-Erweiterungen, die an die Ressourcenzuweisung gebunden sind (69 abgeschlossen, 6 müssen migriert werden)

      • Bieten eine mit HHVM3.3.0 vergleichbare Ausführungsgeschwindigkeit

      •                             ​ ​  

      • 2. Kontroverse um den schwachen Typ von PHP
      •                                                                                                                                                                                 

        PHP verfügt über viele kontroverse Funktionen, aber mit der Veröffentlichung und Verbesserung der Sprachversion begann die Kritik an Funktionen und Features nachzulassen. Die Funktion „schwacher Typ“ von PHP ist jedoch offensichtlich umstrittener. Aus der Tatsache, dass HHVM die Funktion „schwacher Typ“ direkt durch Hack „entfernt“ hat, geht hervor, dass HHVM die Funktion „schwacher Typ“ nicht mag. In vielen unserer In den Augen von PHP-Programmierern ist dies einer der wichtigen Vorteile von PHP. Variablen in PHP sind so gestaltet, dass sie locker und elegant sind und alles umfassen. Macht es die Sprache nicht einfacher?

        ​ ​ ​  

        Tatsächlich halten einige Leute es für ein ernstes Problem, und die Kritik am „schwachen Tippen“ lautet ungefähr wie folgt:

                                    ​ ​ ​  

        1. In einer „strengen“ Sprache ist der Typ einer Variablen normalerweise von Anfang bis Ende festgelegt , und auch der Nutzungsumfang ist festgelegt. Was die PHP-Variable betrifft, können wir normalerweise nur ihren Namen sehen, und die meisten Typen können nicht vordefiniert werden und können nach Belieben geändert werden. (Die Speicherzuweisung ist nicht einfach zu verwalten)

        2. Um mit schwachen Typfunktionen kompatibel zu sein, muss PHP eine große Menge kompatiblen Codes implementieren, einschließlich Typ Beurteilung, Typkonvertierung, Speichermethoden usw. erhöhen die interne Komplexität der Sprache. (Geringe Ausführungseffizienz)

        3. Der Typ der Variablen ist unkontrollierbar. Während des Ausführungsprozesses gibt es viele „implizite Typkonvertierungen“, die leicht dazu führen können zu einem unvorhersehbaren Ergebnis. (Es muss hier betont werden, dass die PHP-Typkonvertierung ein Punkt ist, der gemeistert werden muss. Die Konvertierung verschiedener Typen ineinander kann viele Probleme verursachen, insbesondere für Studenten, die PHP noch nicht kennen.)

                                    ​ ​ ​  

        Sie glauben, dass diese nicht im Einklang mit der Einfachheit von „What you see is what you get“ stehen und dass Sprachen mit strenger Grammatik effizienter und effizienter sind einfacher zu „verstehen“.

                     

        Sprachen wie  Javascript wurden in ähnlicher Weise kritisiert, da ihre Leistung bei diesem Thema gleich ist. Damit eine Sprache jedoch irgendwann in großem Umfang verwendet werden kann, muss sie vorhanden sein Dafür gibt es Gründe. PHP ist zur bevorzugten Skriptsprache für die Entwicklung von Webdiensten geworden, und Javascript hat den Web-Frontend-Bereich direkt dominiert. Es kann kein Zufall sein, dass wir diesen Punkt erreicht haben Die Füße haben für sie gestimmt. Programmiersprache ist eine Brücke zwischen Mensch und Maschine, und das ultimative Ziel besteht darin, das große Ziel zu erreichen: „Jeder kann programmieren“.

        ​ ​ ​  

        Im Laufe der Geschichte der Sprachentwicklung, angefangen beim Maschinencode der Nullen und Einsen über die Assemblersprache, dann zur C-Sprache und dann zur dynamischen Skriptsprache PHP. Die Ausführungseffizienz nimmt exponentiell ab, aber auch die Lernschwelle sinkt exponentiell. Die PHP-Sprache schützt nicht nur die Komplexität der Speicherverwaltung und der Zeiger von C, sondern auch die Komplexität der Variablentypen. Es verbessert die Effizienz der Projektentwicklung und senkt die Lernschwelle, opfert aber gleichzeitig ein gewisses Maß an Ausführungsleistung. Dann gibt uns der Hack von HHVM ein „Rückkehr zum Primitivem“-Gefühl und führt die Komplexität von Variablen wieder ein. Natürlich lösen verschiedene Sprachen Probleme in unterschiedlichen Szenarien und können nicht verallgemeinert werden.

                                                                                                                                                                                                                                                                                                                       Beide sind hervorragende Open-Source-Projekte und werden ständig verbessert Vorwärtsgehen und weiterentwickeln. Da es noch lange dauert, bis die offizielle Version von PHP7 veröffentlicht wird, ist HHVM die aktuelle Wahl für die Lösung zur Leistungsoptimierung. Persönlich bevorzuge ich jedoch Ich bin hinsichtlich PHP7 optimistisch, da es abwärtskompatibel mit PHP-Code ist. Wenn zwischen den beiden kein großer Leistungsunterschied besteht, wähle ich die einfachere Variante.

    Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in die Leistung von PHP7 und HHVM (Bild und Text). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    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