Heim Backend-Entwicklung PHP7 Werfen wir einen Blick auf die detaillierte Erklärung und Beispiele für Golang-Aufrufe von PHP7

Werfen wir einen Blick auf die detaillierte Erklärung und Beispiele für Golang-Aufrufe von PHP7

Jul 18, 2020 pm 05:32 PM
golang php7 Anruf

Werfen wir einen Blick auf die detaillierte Erklärung und Beispiele für Golang-Aufrufe von PHP7

PHP-Datei ausführen

func Test_exec(t *testing.T) {
  engine.Initialize()
  ctx := &engine.Context{
    Output: os.Stdout,
  }
  err := engine.RequestStartup(ctx)
  if err != nil {
    fmt.Println(err)
  }
  defer engine.RequestShutdown(ctx)
  err = ctx.Exec("/tmp/index.php")
  if err != nil {
    fmt.Println(err)
  }
}

Der Inhalt von /tmp/index.php ist

<?php
echo("hello\n");

Eval, Rückgabewert

func Test_eval(t *testing.T) {
  engine.Initialize()
  ctx := &engine.Context{}
  err := engine.RequestStartup(ctx)
  if err != nil {
    fmt.Println(err)
  }
  defer engine.RequestShutdown(ctx)
  val, err := ctx.Eval("return &#39;hello&#39;;")
  if err != nil {
    fmt.Println(err)
  }
  defer engine.DestroyValue(val)
  if engine.ToString(val) != "hello" {
    t.FailNow()
  }
}

Der Lebenszyklus-Eigentümer des zurückgegebenen Werts ist das Golang-Programm, daher sind wir für DestroyValue verantwortlich

Einrichten globaler Variablen zur Übergabe von Parametern

func Test_argument(t *testing.T) {
  engine.Initialize()
  ctx := &engine.Context{}
  err := engine.RequestStartup(ctx)
  if err != nil {
    fmt.Println(err)
  }
  defer engine.RequestShutdown(ctx)
  err = ctx.Bind("greeting", "hello")
  if err != nil {
    fmt.Println(err)
  }
  val, err := ctx.Eval("return $greeting;")
  if err != nil {
    fmt.Println(err)
  }
  defer engine.DestroyValue(val)
  if engine.ToString(val) != "hello" {
    t.FailNow()
  }
}

Der Lebenszyklus der übergebenen Parameter wird von PHP gesteuert und der Speicher wird freigegeben, wenn die Anforderung beendet wird.

PHP-Rückruf Golang

type greetingProvider struct {
  greeting string
}

func (provider *greetingProvider) GetGreeting() string {
  return provider.greeting
}

func newGreetingProvider(args []interface{}) interface{} {
  return &greetingProvider{
    greeting: args[0].(string),
  }
}

func Test_callback(t *testing.T) {
  engine.Initialize()
  ctx := &engine.Context{}
  err := engine.RequestStartup(ctx)
  if err != nil {
    fmt.Println(err)
  }
  defer engine.RequestShutdown(ctx)
  err = engine.Define("GreetingProvider", newGreetingProvider)
  if err != nil {
    fmt.Println(err)
  }
  val, err := ctx.Eval(`
  $greetingProvider = new GreetingProvider(&#39;hello&#39;);
  return $greetingProvider->GetGreeting();`)
  if err != nil {
    fmt.Println(err)
  }
  defer engine.DestroyValue(val)
  if engine.ToString(val) != "hello" {
    t.FailNow()
  }
}

PHP-Fehlerprotokoll

func Test_log(t *testing.T) {
  engine.PHP_INI_PATH_OVERRIDE = "/tmp/php.ini"
  engine.Initialize()
  ctx := &engine.Context{
    Log: os.Stderr,
  }
  err := engine.RequestStartup(ctx)
  if err != nil {
    fmt.Println(err)
  }
  defer engine.RequestShutdown(ctx)
  _, err = ctx.Eval("error_log(&#39;hello&#39;, 4); trigger_error(&#39;sent from golang&#39;, E_USER_ERROR);")
  if err != nil {
    fmt.Println(err)
  }
}

Der Inhalt von /tmp/php.ini ist

error_reporting = E_ALL
error_log = "/tmp/php-error.log"

Fehler werden nach /tmp/php-error.log ausgegeben. Beim direkten Aufruf von error_log wird auch eine weitere Kopie an stderr ausgegeben

HTTP-Eingabe und -Ausgabe

func Test_http(t *testing.T) {
  engine.Initialize()
  recorder := httptest.NewRecorder()
  ctx := &engine.Context{
    Request: httptest.NewRequest("GET", "/hello", nil),
    ResponseWriter: recorder,
  }
  err := engine.RequestStartup(ctx)
  if err != nil {
    fmt.Println(err)
  }
  defer engine.RequestShutdown(ctx)
  _, err = ctx.Eval("echo($_SERVER[&#39;REQUEST_URI&#39;]);")
  if err != nil {
    fmt.Println(err)
  }
  body, err := ioutil.ReadAll(recorder.Result().Body)
  if err != nil {
    fmt.Println(err)
  }
  if string(body) != "/hello" {
    t.FailNow()
  }
}

Alle superglobalen PHP-Variablen werden mit dem Wert der übergebenen Anforderung initialisiert. Einschließlich des Inhalts von

$_SERVER
$_GET
$_POST
$_FILE
$_COOKIE
$_ENV

echo werden HTTP-Code und http-Header an den eingehenden ResponseWriter zurückgeschrieben

fastcgi_finish_request

PHP- Eine sehr häufig verwendete Funktion von FPM ist fastcgi_finish_request, mit der einige asynchrone Dinge in PHP ausgeführt werden. Diese spezielle globale Funktion muss

func Test_fastcgi_finish_reqeust(t *testing.T) {
  engine.Initialize()
  buffer := &bytes.Buffer{}
  ctx := &engine.Context{
    Output: buffer,
  }
  err := engine.RequestStartup(ctx)
  if err != nil {
    fmt.Println(err)
  }
  defer engine.RequestShutdown(ctx)
  ctx.Eval("ob_start(); echo (&#39;hello&#39;);")
  if buffer.String() != "" {
    t.FailNow()
  }
  ctx.Eval("fastcgi_finish_request();")
  if buffer.String() != "hello" {
    t.FailNow()
  }
}

unterstützen. Ihre eigentliche Funktion besteht darin, die Ausgabe im Voraus an ResposneWriter auszugeben, um den Aufrufer über das Ergebnis zu informieren. Es hat eigentlich keinen Einfluss auf die Ausführung des aktuellen Prozesses, sondern nur auf die Ausgabe.

Verwandte Lernempfehlungen: PHP7-Tutorial

Das obige ist der detaillierte Inhalt vonWerfen wir einen Blick auf die detaillierte Erklärung und Beispiele für Golang-Aufrufe von PHP7. 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

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

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.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Rimworld odyssey wie man fischt
1 Monate vor By Jack chen
Kann ich zwei Alipay -Konten haben?
1 Monate vor By 下次还敢
Anfängerleitfaden zu Rimworld: Odyssey
1 Monate vor By Jack chen
Variabler PHP -Bereich erklärt
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)

Heiße Themen

PHP-Tutorial
1508
276
Golang und C: Parallelität gegen Rohgeschwindigkeit Golang und C: Parallelität gegen Rohgeschwindigkeit Apr 21, 2025 am 12:16 AM

Golang ist in Gleichzeitigkeit besser als C, während C bei Rohgeschwindigkeit besser als Golang ist. 1) Golang erreicht durch Goroutine und Kanal eine effiziente Parallelität, die zum Umgang mit einer großen Anzahl von gleichzeitigen Aufgaben geeignet ist. 2) C über Compiler -Optimierung und Standardbibliothek bietet es eine hohe Leistung in der Nähe der Hardware, die für Anwendungen geeignet ist, die eine extreme Optimierung erfordern.

Golang gegen Python: Die Vor- und Nachteile Golang gegen Python: Die Vor- und Nachteile Apr 21, 2025 am 12:17 AM

GolangissidealforbuildingsCalablesSystemduetoitseffizienz und Konsumverkehr, whilepythonexcelsinquickScriptingandDataanalyseduetoitssimplication und VacevastEcosystem.golangsDesineScouragesCouragescournations, tadelcodedeanDitsGoroutaTinoutgoroutaTinoutgoroutaTinoutsGoroutinesGoroutinesGoroutsGoroutins, t

Detaillierte Konfigurationsschritte für Apache, die eine Verbindung zur MySQL -Datenbank herstellen Detaillierte Konfigurationsschritte für Apache, die eine Verbindung zur MySQL -Datenbank herstellen May 16, 2025 pm 10:12 PM

Konfigurieren von Apache, um eine Verbindung zur MySQL -Datenbank herzustellen, sind die folgenden Schritte erforderlich: 1. Stellen Sie sicher, dass Apache und MySQL installiert sind. 2. Konfigurieren von Apache, um PHP zu unterstützen, indem Sie LoadModule hinzufügen und Anweisungen in httpd.conf oder apache2.conf hinzufügen; 3. Konfigurieren Sie PHP, um eine Verbindung zu MySQL herzustellen. Aktivieren Sie die MySQLI -Erweiterung in php.ini; 4. Erstellen und testen Sie die angeschlossene PHP -Datei. Durch diese Schritte kann die Verbindung zwischen Apache und MySQL erfolgreich implementiert werden.

Konfigurieren Sie Apache, um eine Verbindung zur PostgreSQL -Datenbank herzustellen Konfigurieren Sie Apache, um eine Verbindung zur PostgreSQL -Datenbank herzustellen May 21, 2025 pm 10:48 PM

Die Schritte zur Konfiguration von Apache zur Verbindung zur PostgreSQL -Datenbank umfassen: 1) Stellen Sie sicher, dass Apache das PHP -Modul installiert und in der Konfigurationsdatei aktiviert hat. 2) Code schreiben, um eine Verbindung zu PostgreSQL in PHP -Skripten herzustellen. 3) Verwenden Sie ORM -Tools wie Doktrin, um Datenbankvorgänge zu vereinfachen. In diesen Schritten können Sie Apache erfolgreich so konfigurieren, dass sie die Bindex-Verbindungen postGresql-Verbindungen anwenden und dieses Wissen in realen Projekten anwenden.

Warum Golang verwenden? Vorteile und Vorteile erläutert Warum Golang verwenden? Vorteile und Vorteile erläutert Apr 21, 2025 am 12:15 AM

Gründe für die Auswahl von Golang umfassen: 1) Leistung mit hoher Genauigkeit, 2) statisches System, 3) Mechanismusmechanismus, 4) Reiche Standardbibliotheken und Ökosysteme, die es zu einer idealen Wahl für die Entwicklung einer effizienten und zuverlässigen Software machen.

Strategien zur Integration von Golang -Diensten in die vorhandene Python -Infrastruktur Strategien zur Integration von Golang -Diensten in die vorhandene Python -Infrastruktur Jul 02, 2025 pm 04:39 PM

ToInteGrategolangServicesWithExistingPythoninFrastructure, benutzerdepisorgrpcforinter-serviceCommunication, erlaubtgoandhonAppStoInteractSeamlos-ThroughStandardizedProtocols.1.Userestapis (VICREFRAME-LIKEIGININGOANDOANDOSFLASHINGYTHON) ORGRPC

Konfigurieren Sie die Fehlerseite von NGINX, um benutzerdefinierte Inhalte anzuzeigen Konfigurieren Sie die Fehlerseite von NGINX, um benutzerdefinierte Inhalte anzuzeigen May 19, 2025 pm 07:30 PM

Das Konfigurieren der Nginx -Fehlerseite zum Anzeigen benutzerdefinierter Inhalte kann in den folgenden Schritten erreicht werden: 1. Verwenden Sie die ERROR_PAGE -Anweisung, um die Fehlerseite zu definieren, z. B. Fehler_Page404/404.html; 2. Stellen Sie die interne Anweisung fest, um die Seitenzugriffsberechtigungen einzuschränken, um sicherzustellen, dass nur über IRRAUS_PAGE zugegriffen werden kann. 3.. Verwenden Sie die Umleitung und die dynamische Erzeugung von Fehlerseiten, um Fehlerbehandlungsfunktionen zu verbessern. 4. Überprüfen Sie, ob die Fehlerseitendatei vorhanden ist, um neue Fehlerseiten zu vermeiden. 5. Optimieren Sie die Ladegeschwindigkeit der Fehlerseiten über den Cache -Mechanismus. Diese Methoden können die Benutzererfahrung und Fehlerverwaltung effektiv verbessern.

Best Practices und Tipps zur Reduzierung des Docker -Bildvolumens Best Practices und Tipps zur Reduzierung des Docker -Bildvolumens May 19, 2025 pm 08:42 PM

Methoden zur Reduzierung des Docker -Bildvolumens umfassen: 1. Verwenden Sie .Dockerignore -Dateien, um unnötige Dateien auszuschließen; 2. Wählen Sie ein optimiertes grundlegendes Bild wie die alpine Version; 3.. Optimieren Sie Dockerfile, fusionieren Sie die Befehle aus, und verwenden Sie die Option-no-cache; V. 5. Verwalten Sie abhängige Versionen und säubern Sie regelmäßig Abhängigkeiten, die nicht mehr verwendet werden. Diese Methoden reduzieren nicht nur das Bildvolumen, sondern verbessern auch die Anwendungs ​​-Startgeschwindigkeit und die Betriebseffizienz.

See all articles