Heim > Backend-Entwicklung > PHP-Tutorial > Jenkins neu steigern: automatisierte Tests mit Pipelines

Jenkins neu steigern: automatisierte Tests mit Pipelines

Christopher Nolan
Freigeben: 2025-02-10 15:01:09
Original
730 Leute haben es durchsucht

Re-Introducing Jenkins: Automated Testing with Pipelines

Kernpunkte

  • Jenkins ist ein beliebter Open -Source -Build -Server, der automatisierte Tests komplexer Anwendungen unterstützt und den Freigabeprozess beschleunigt, indem er vor der Bereitstellung Fehler entdeckt und auflöst.
  • Jenkins Pipeline (in Version 2.0 eingeführt) ist eine Reihe von anpassbaren Schritten, die in der Groovy -Skriptsprache zum Testen und zum Erstellen von Code geschrieben wurden. Wenn ein Schritt fehlschlägt, schlägt der gesamte Build fehl und Jenkins hört auf, auszuführen.
  • Jenkins können einfach mit Laravel Homestead installiert und konfiguriert werden. Sobald das Setup abgeschlossen ist, können Sie einen neuen Build -Job erstellen, um die neueste Version des Projekts zu überprüfen, die Abhängigkeiten zu installieren und Unit -Tests auszuführen.
  • Jenkins Pipeline kann als JenkinsFile -Skript im Stammverzeichnis der Codebasis geschrieben werden, wodurch die Versionskontrolle implementiert wird. Sie können auch Multi-Branch-Pipeline-Jobs einrichten, um verschiedene Vorgänge in verschiedenen Zweigen des Projekts auszuführen.
  • Jenkins unterstützt ein breites Ökosystem von Plug-Ins, das installiert und konfiguriert werden kann, um ihre Funktionen zu erweitern, einschließlich Test-Plug-Ins und Integration in Cloud-Dienste. Es kann so konfiguriert werden, dass es jedes Mal automatisch erstellt wird, wenn ein Commit in das Repository gedrückt wird und ordnungsgemäß gesichert werden sollte.

Wenn Anwendungen komplexer werden - einschließlich Abhängigkeiten der Komponisten, Webpack -Build -Skripte und jeder Umgebungsvariablen -, erreichen wir unweigerlich einen Punkt gesamte Umgebung. Ebenso können Codestile im Laufe der Zeit verzerren und ein Bereitstellungsarchiv erstellen, das für die Produktion verwendet werden kann, erfordert eine bestimmte Reihe von Schritten.

Angenommen, die Anwendung zu testen, sind folgende Schritte erforderlich:

  1. Ausführen composer install, um sicherzustellen, dass die Abhängigkeiten installiert sind
  2. in jeder PHP -Datei in der Codebasis php -l ausführen, um die Syntaxfehler
  3. zu überprüfen
  4. Phpunit für Unit -Tests
  5. ausführen
  6. Ausführen von Codecception für Funktionstests

Re-Introducing Jenkins: Automated Testing with Pipelines

Wenn einer dieser Schritte fehlschlägt, sollte die Software für die Bereitstellung als ungeeignet angesehen werden, bis der Fehler behoben ist. Wenn die Software komplexer wird und die Anzahl der Tests im Laufe der Zeit zunimmt, kann es einige Minuten dauern, bis eine vollständige Testsuite ausgeführt wird, die den Entwickler verlangsamt und wiederum den Freigabeprozess verlangsamt.

Um dieses Problem zu überwinden, können Build -Server in den Entwicklungsworkflow eingeführt werden. Der Build -Server führt eine Software aus, mit der Sie eine Reihe von Schritten wiederholt ausführen können. Wenn einer von ihnen fehlschlägt, kann der Build -Server Sie über das Problem informieren. Wenn Sie an Open -Source -Projekten beteiligt waren, haben Sie möglicherweise praktische Anwendungen für den Bau von Servern wie Travisci oder Circleci gesehen. Beispielsweise wird jede Pull -Anfrage für ein Laravel -Projekt von Travisci getestet, um sicherzustellen, dass Änderungen keine Tests durchbrechen, und Styleci stellt dann sicher, dass die Codeänderungen mit dem Projektcode -Stil übereinstimmen.

Re-Introducing Jenkins: Automated Testing with Pipelines

Jenkins ist ein beliebter Open Source Build -Server, der Version 2.0 in diesem Jahr veröffentlicht hat. Eine der Hauptmerkmale dieser neuen Version ist das (zuvor optionale) Pipeline -Plugin als Kernfunktion.

Pipeline ist eine Reihe vollständig anpassbarer Schritte, die nacheinander ausführen können, um Code zu testen und zu erstellen. Pipeline ist in einer groovigen Skriptsprache geschrieben und hat eine sehr einfache Syntax und ist einfach zu beginnen. Wenn Sie beispielsweise den früher als Pipeline beschriebenen Testschritt beschreiben möchten, könnte dies in etwa so aussehen:

node {
    stage("composer_install") {
        sh 'composer install'
    }

    stage("php_lint") {
        sh 'find . -name "*.php" -print0 | xargs -0 -n1 php -l'
    }

    stage("phpunit") {
        sh 'vendor/bin/phpunit'
    }

    stage("codeception") {
        sh 'vendor/bin/codecept run'
    }
}
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
In der Anweisung

node werden Jenkins angewiesen, einen separaten Build-Knoten zuzuweisen (Jenkins können im Einzelhilfe- oder Multi-Knoten-Einstellungen ausgeführt werden). node Es gibt mehrere Stufen im Block, jede Stufe führt einen bestimmten Vorgang durch. Jenkins leitet jede Stufe nacheinander, und wenn eine Stufe ausfällt, fällt der gesamte Build aus und Jenkins hört auf, auszuführen.

Aus diesem einfachen Beispiel können zusätzliche Phasen anderer Tests leicht hinzugefügt werden, wobei Jenkins aufforscht, erfolgreiche oder fehlgeschlagene Slack -Benachrichtigungen zu senden, den erfolgreich getesteten Code in die Veröffentlichungszweig zu bringen oder die Pull -Anfrage als Verschmelzung zu markieren.

Jenkins

installieren

Jenkins ist sehr einfach zu installieren, und in diesem Tutorial werden wir Laravel Homestead verwenden, um eine konsistente virtuelle Umgebung zu bieten, damit Sie Jenkins lokal verwenden können.

Der erste Schritt besteht darin, Laravel Homestead zu installieren - hier ist eine nützliche Anleitung. Sie müssen nur die virtuelle Maschine starten und ausführen, wir müssen keine Site in der Datei homestead.yaml konfigurieren.

Nachdem Sie aufgestanden sind und die Virtual Machine aus dem Gehöft ausgeführt haben, verwenden Sie vagrant ssh, um sich dafür anzumelden.

Homestead verfügt über alle Abhängigkeiten, die wir benötigen, nämlich Git, PHP und Komponist. Daher müssen wir nur Jenkins selbst installieren. Nach dem Jenkins Debian Package Guide müssen wir die folgenden Schritte ausführen.

run wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -. Dieser Befehl fügt die Codessignierschlüssel zu der Eignung hinzu, damit die Jenkins -Pakete aus diesem Repository vertrauenswürdig sind.

Als nächstes muss die Paketquellliste aktualisiert werden, damit die Fähigkeit das Jenkins -Paket -Repository kennt. Führen Sie echo "deb https://pkg.jenkins.io/debian-stable binary/" | sudo tee -a /etc/apt/sources.list aus.

Schließlich benötigen wir eine Eignung, um den Cache seiner verfügbaren Pakete zu aktualisieren und dann Jenkins zu installieren:

node {
    stage("composer_install") {
        sh 'composer install'
    }

    stage("php_lint") {
        sh 'find . -name "*.php" -print0 | xargs -0 -n1 php -l'
    }

    stage("phpunit") {
        sh 'vendor/bin/phpunit'
    }

    stage("codeception") {
        sh 'vendor/bin/codecept run'
    }
}
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Die Installation von Jenkins dauert ungefähr fünf Minuten, da es auch viele Abhängigkeiten hat, die installiert werden müssen.

Öffnen Sie nach der Installation von Jenkins http://192.168.10.10:8080 (oder der von Ihnen konfigurierten virtuellen Host -URL) in Ihrem Browser eine Seite mit dem Titel "Entsperren Sie Jenkins". homestead.app

Re-Introducing Jenkins: Automated Testing with Pipelines

Führen Sie in der virtuellen Maschine den folgenden Befehl aus -

, und eine Zufallszahl und eine alphabetische Zeichenfolge werden in die Konsole gedruckt. Kopieren und fügen Sie die Zeichenfolge in das Textfeld im Browser ein und drücken Sie weiter. sudo cat /var/lib/jenkins/secrets/initialAdminPassword

Re-Introducing Jenkins: Automated Testing with Pipelines

Sie sehen zwei Optionen: Wählen Sie "das vorgeschlagene Plugin installieren" und warten Sie einige Minuten, bis das Plugin heruntergeladen und installiert wird.

Re-Introducing Jenkins: Automated Testing with Pipelines

Geben Sie auf dem nächsten Bildschirm die Details des Administratorbenutzers ein und drücken Sie "Speichern und fertig".

Re-Introducing Jenkins: Automated Testing with Pipelines

Jenkins ist jetzt installiert und konfiguriert!

Erstellen Sie den ersten Job

Nach dem Einrichten von Jenkins werden wir einen neuen Build -Job erstellen, der Folgendes erledigt:

    Schauen Sie sich die neueste Version von
  1. laravel/framework
  2. an
  3. Installieren von Komponistenabhängigkeiten
  4. Phpunit
  5. ausführen

Klicken Sie auf den Link zum neuen Job erstellen (oder den neuen Projektlink erstellen - sie alle tun dasselbe).

Re-Introducing Jenkins: Automated Testing with Pipelines

Geben Sie einen Namen laravel ein, wählen Sie "Pipeline" und drücken Sie OK.

Sie sehen nun den Konfigurationseditor für den Job. Scrollen Sie zum Pipeline -Abschnitt und geben Sie das folgende Skript ein:

sudo apt-get update && sudo apt-get install jenkins
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

drücken Sie "speichern". Sie werden auf die Seite "Jobübersicht" umgeleitet und nach ein paar Sekunden sehen Sie den Job beginnen. Wenn es nicht startet, klicken Sie einfach im linken Menü auf den Link Build.

Re-Introducing Jenkins: Automated Testing with Pipelines

Die Phasenansicht wird aktualisiert, wenn jede Phase startet und endet, wie wir im Pipeline -Skript definieren.

Wenn Sie auf eine Bühne klicken, erscheint ein Overlay mit der Protokollausgabe für diese Phase, die zum Debuggen sehr nützlich ist. Alternativ können Sie im Menü links auf den Job klicken und auf Konsole klicken.

Alle Jenkins -Jobs verfügen über einen eigenen Arbeitsbereich, in dem Sie eine Zone sind, in der Sie sicher temporäre Dateien erstellen können, die Sie möglicherweise in der Build -Zone benötigen. Der Arbeitsbereich für diesen Job finden Sie in /var/lib/jenkins/workspace/laravel. Standardmäßig löscht Jenkins diesen Arbeitsbereich nicht für jeden Build. Wenn Sie dies tun müssen, können Sie dem Beginn des Pipeline -Skripts wie folgt eine Phase hinzufügen:

node {
    stage("composer_install") {
        sh 'composer install'
    }

    stage("php_lint") {
        sh 'find . -name "*.php" -print0 | xargs -0 -n1 php -l'
    }

    stage("phpunit") {
        sh 'vendor/bin/phpunit'
    }

    stage("codeception") {
        sh 'vendor/bin/codecept run'
    }
}
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

JenkinsFile

Für unseren ersten Job haben wir das Pipeline -Skript in der Schnittstelle zur Jobeinstellungen bearbeitet. Es wäre jedoch nützlicher, dieses Skript in der Versionskontrolle mit unserem Code zu speichern.

Verwenden von Jenkins 'Pipeline können Sie Pipeline als JenkinsFile -Skript im Stammverzeichnis des Code -Repositorys schreiben und es wird entdeckt und ausgeführt. Sein Konzept ähnelt einer Datei .travis.yml oder .circleci.yml, mit der Sie möglicherweise bereits vertraut sind.

Klicken Sie auf der Seite laravel/framework GitHub-Projekt auf die Schaltfläche "Fork" in der oberen rechten Ecke und dann im Popup-Fenster auf das Profil.

Erstellen Sie einen neuen Zweig mit dem Namen jenkinsfile und erstellen Sie dann eine neue Datei (Sie können dies direkt in GitHub tun und müssen das Repository nicht klonen, wenn Sie es nicht benötigen).

Re-Introducing Jenkins: Automated Testing with Pipelines

Geben Sie das folgende Skript ein und senden Sie die Datei:

sudo apt-get update && sudo apt-get install jenkins
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Kehren Sie nun zu Jenkins zurück und klicken Sie im Menü links auf die Schaltfläche "Konfiguration". Scrollen Sie zum Pipeline-Abschnitt nach unten und aktualisieren Sie das Dropdown-Menü Definition im Pipeline-Skript auf SCM.

Re-Introducing Jenkins: Automated Testing with Pipelines

Geben Sie Details des Repositorys ein, das Sie gegabelt haben, und klicken Sie auf Speichern.

Re-Introducing Jenkins: Automated Testing with Pipelines

Klicken Sie auf dem Bildschirm "Auftragsübersicht" jetzt im Menü links auf Erstellen. Sie sollten einen erfolgreichen Build haben.

Multi-Branch-Pipeline-Projekt

Die meisten Softwareprojekte verwenden mehrere Zweige im Repository, um verschiedene Phasen des Projekts zu definieren. Zum Beispiel:

  • Der Master -Zweig repräsentiert die aktuelle Produktionsversion
  • entwickeln Branch repräsentiert die aktuelle temporäre Version
  • Feature/Neu-Profil-Page-Zweig kann die laufenden Funktionen
  • darstellen

Für jeden Zweig möchten Sie möglicherweise viele benutzerdefinierte Vorgänge ausführen. Wenn Sie beispielsweise einen Commit aus dem Master- oder Entwicklungszweig gibt, möchten Sie vollständige Einheiten- und Integrationstests ausführen, während bei allen anderen Zweigen nur Einheiten -Tests sind genug.

JenkinsFile ist in der Groovy -Programmiersprache geschrieben, was bedeutet, dass wir eine vollständige Skriptsprache zu verwenden haben.

In diesem Beispiel habe ich eine IF -Anweisung hinzugefügt, um den Zweignamen zu überprüfen.

Nach

gibt es eine Switch -Anweisung, in der ein anderes Bereitstellungsarchiv erstellt wird und es basierend auf dem Zweignamen in den Code -Bereitstellungsdienst registriert (in diesem Beispiel habe ich gezeigt, wie dies mit dem CodEDePloy -Service von Amazon Web Service funktioniert).

node {
    stage("composer_install") {
        sh 'composer install'
    }

    stage("php_lint") {
        sh 'find . -name "*.php" -print0 | xargs -0 -n1 php -l'
    }

    stage("phpunit") {
        sh 'vendor/bin/phpunit'
    }

    stage("codeception") {
        sh 'vendor/bin/codecept run'
    }
}
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Multi-Franch-Pipeline-Jobs sind ebenfalls einfach einzurichten. Wenn Sie ein Projekt erstellen, wählen Sie "Multi-Franched-Pipeline" als Typ:

Re-Introducing Jenkins: Automated Testing with Pipelines

Stellen Sie dann im Konfigurationsbildschirm das Dropdown-Menü Pipeline Definition auf das Pipeline-Skript in SCM ein und geben Sie die Repository-Details ein.

Wann immer die Option "Brandindex" ausgeführt wird (sie ersetzt den Menüpunkt "now now" im Job), wird Jenkins rekursiv über jeden Zweig im Repository und für jeden Zweig mit einer kürzlich geänderten Jenkinsfile iteriert, die kürzlich geändert wurde, a Neubau für diesen Zweig wird ausgeführt.

gehen Sie noch einen Schritt weiter

Die Beliebtheit von

Jenkins ist hauptsächlich auf sein umfangreiches Plugin -Ökosystem zurückzuführen.

Klicken Sie auf dem Startbildschirm von Jenkins im Menü links auf Jenkins verwalten und dann klicken Sie dann auf Plugin -Manager.

Re-Introducing Jenkins: Automated Testing with Pipelines

Sie können Dutzende von Plug-Ins installieren und konfigurieren, von Test-Plug-Ins bis hin zur Integration in Cloud-Dienste.

Wenn Ihr Team beispielsweise Slack verwendet, können Sie das Slack -Benachrichtigungs -Plugin aktivieren. Es ist im Bildschirm der Haupteinstellungen für Jenkins -Einstellungen konfiguriert

sudo apt-get update && sudo apt-get install jenkins
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Wenn Jenkins auf dem Server in Betrieb ist, kann der Auftrag einfach so konfiguriert werden, dass jedes Mal, wenn ein Commit in das Repository gedrückt wird, automatisch erstellt (oder ausführen).

Für GitHub -Projekte stellen Sie sicher, dass das GitHub -Plugin installiert und aktiviert ist, und aktivieren Sie dann die Integration mit dem Service "Jenkins (Github Plugin)" in den GitHub -Repository -Einstellungen.

Für Bitbucket ist dies etwas komplizierter, und ich habe die erforderlichen Schritte in meinem Blog ausführlich beschrieben.

Sie sollten auch sicherstellen, dass der Jenkins -Server ordnungsgemäß geschützt ist. Benutzer können manuell in Jenkins erstellt, die Authentifizierung an GitHub oder Bitbucket mit OAuth oder verbundenem Jenkins mit dem LDAP -Verzeichnis Ihres Unternehmens angeschlossen werden. Auch hier sollte Jenkins immer über SSL geführt werden, damit der Zugang zu Jenkins nicht leicht abgefasst werden kann.

Die Jenkins -Installation wird außerdem mit einem "Code -Snippet -Generator" geliefert, mit dem Sie alle aktivierten Pipeline -Funktionen anzeigen können (z. B. wir haben bereits SH, Slacksend, Deletedir () und SCM verwendet. Sie finden einen Link dazu im linken Menü des Auftragsübersichtbildschirms.

Zusammenfassung

Jenkins ist ein sehr leistungsstarkes Tool, mit dem die Zuverlässigkeit Ihrer Software verbessert und Ihnen und Ihrem Team viel Zeit gespeichert werden kann. Menschen sind sehr schlecht darin, sich immer und immer wieder wiederholende Aufgaben auszuführen, aber Computer sind gut darin.

Wenn Ihr Team aufgrund von Tests, die länger als fünf Minuten laufen, langsamer wird, deinstallieren Sie den Test an Jenkins.

Jenkins können dies tun, wenn Sie automatisch Bereitstellungsarchive generieren möchten, wenn eine neue Produktions- oder Staging -Version verfügbar ist.

Wenn Sie die Codequalität im Auge behalten und Regressionen entdecken möchten, bevor die Kunden entdecken, ist Jenkins bereit zu helfen.

Bitte hinterlassen Sie unten Fragen oder Kommentare und teilen Sie uns Ihre kreativste Jenkins -Pipeline mit!

Wenn Ihnen dieser Artikel gefällt, finden Sie möglicherweise auch das folgende nützliche:

  • Cypress -Test: Eine Anleitung zum Ausführen von Webanwendungen
  • Python -Unit -Tests mit Unittest und PyTest
  • einführen
  • So testen Sie die Reaktionskomponenten mithilfe von JEST
  • End-to-End-Test mit Puppenspielern
  • lernen
Drei freihändige kontinuierliche Testmethoden

häufig gestellte Fragen zu Jenkins mit Pipeline für automatisierte Tests

Wie hoch sind die Vorteile der Verwendung von Jenkins für automatisierte Tests?

Jenkins ist ein beliebtes Open -Source -Tool, das viele Vorteile für automatisierte Tests bietet. Erstens bietet es eine kontinuierliche Integration und kontinuierliche Lieferung (CI/CD), sodass Entwickler Änderungen häufiger in Projekte integrieren können. Dies führt zu einer frühzeitigen Erkennung potenzieller Probleme und verkürzt die Reparaturzeit. Zweitens unterstützt Jenkins verschiedene Plug-Ins, wodurch sie sehr anpassbar und an verschiedene Projektanforderungen anpassbar sind. Drittens liefert es Echtzeit-Testergebnisse und detaillierte Berichte, mit denen Probleme schnell identifiziert und gelöst werden können. Schließlich unterstützt Jenkins Pipeline, eine Reihe von Tools, die eine einfache zu komplexe Zustellung von Pipeline „AS Code“ durch Pipeline -Domänenspezifische Sprache (DSL) ermöglichen.

Wie richte ich Jenkins für PHP -Tests ein?

Einrichten von Jenkins für PHP -Tests umfasst mehrere Schritte. Zuerst müssen Sie Jenkins auf dem Server installieren. Nach der Installation können Sie Plug-Ins installieren, die für PHP-Tests erforderlich sind, z. B. PHP-Plug-In, PHPUnit-Plug-In usw. Nach dem Installieren des Plugins können Sie einen neuen Jenkins -Job erstellen und für Ihr PHP -Projekt konfigurieren. Dies beinhaltet das Einrichten von Quellcodemanagement, das Erstellen von Auslöschern und das Erstellen von Schritten. Im Build -Schritt können Sie den Befehl angeben, um den PHP -Test auszuführen. Sobald die Konfiguration abgeschlossen ist, kann der Job ausgeführt werden, und Jenkins führt den Test aus und liefert einen detaillierten Bericht.

Wie testen Jenkins mit Phpunit?

Jenkins arbeitet mit Phpunit zusammen, indem sie Phpunit -Tests in Jenkins Jobs durchführen. Der Befehl phpunit kann im Build -Schritt des Jenkins -Jobs angegeben werden. Wenn der Job ausgeführt wird, führt Jenkins den Phpunit -Test durch und erfasst die Ergebnisse. Die Ergebnisse werden dann im Jenkins -Dashboard angezeigt, was einen detaillierten Bericht über die Testausführung enthält. Dies beinhaltet die Anzahl der getesteten, bestandenen, fehlgeschlagenen und übersprungenen Tests sowie die Codeabdeckung.

Was ist der richtige Workflow für eine Jenkins -PHP -Anwendung mit Phpunit?

Der richtige Workflow für eine Jenkins -PHP -Anwendung mit Phpunit enthält normalerweise die folgenden Schritte: Schauen Sie sich zunächst den Quellcode aus dem Versionskontrollsystem an. Installieren Sie als Nächstes alle Abhängigkeiten wie Komponisten für das PHP -Projekt. Führen Sie dann den Phpunit -Test aus. Die Testergebnisse werden dann gesammelt und im Jenkins -Dashboard angezeigt. Wenn ein Test fehlschlägt, ist der Build als fehlgeschlagen markiert. Andernfalls ist der Build als erfolgreich markiert. Dieser Workflow kann mit Jenkins Pipeline für die kontinuierliche Integration und Lieferung automatisiert werden.

Wie kann man Phpunit und Junit -Ergebnisse zu Jenkins analysieren?

Phpunit- und JUNIT -Ergebnisse können mit dem Junit -Plugin in Jenkins analysiert werden. Nach dem Ausführen des Phpunit -Tests können Sie einen JUNIT XML -Bericht erstellen. Das Junit -Plugin in Jenkins kann diesen Bericht dann analysieren. Im Nachbetriebsbetrieb eines Jenkins-Jobs können Sie den Operation "Jungit-Testergebnisse veröffentlichen" hinzufügen und den Ort des Junit XML-Berichts angeben. Jenkins analysiert dann den Bericht und zeigt die Ergebnisse im Dashboard an. Dies schließt die Anzahl der Tests ein, die durchgeführt, bestanden, gescheitert und übersprungen wurden, sowie die Testdauer und Trends.

Das obige ist der detaillierte Inhalt vonJenkins neu steigern: automatisierte Tests mit Pipelines. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage