Führen Sie PHP-Skripte auf dem Webserver von Node.j aus

73

Welche Schritte sind erforderlich, damit ein Node.js-Webserver wie Apache PHP-Skripte ausführt? Gibt es eine Möglichkeit, PHP in Node.js zu integrieren?

Hinweis: Ich möchte PHP-Skripte nicht direkt in Node.js ausführen, sondern über eine Apache-Instanz oder ähnliches "routen".

Daniel
quelle

Antworten:

70

Ich hatte die gleiche Frage. Ich habe versucht, PHP über die Shell-Oberfläche aufzurufen, und es wurde das gewünschte Ergebnis erzielt:

var exec = require("child_process").exec;
app.get('/', function(req, res){exec("php index.php", function (error, stdout, stderr) {res.send(stdout);});});

Ich bin mir sicher, dass dies nicht ganz oben auf der Liste der empfohlenen Praktiken steht, aber es schien zu tun, was ich wollte. Wenn Sie andererseits PHP-Skripte nicht direkt von Node.js ausführen möchten, sondern sie von einem anderen Webserver weiterleiten möchten, der dies tut, scheint dies den Trick zu tun:

var exec = require("child_process").exec;
app.get('/', function(req, res){exec("wget -q -O - http://localhost/", function (error, stdout, stderr) {res.send(stdout);});});
Dave Causey
quelle
3
Kluge Ideen. Vielen Dank.
Wie übergebe ich den Parameter von Node JS an das PHP-Skript?
Visal Sambo
exec ("php index.php 'param1' 'param2'")
Vivek Kapoor
7

Schauen Sie hier: https://github.com/davidcoallier/node-php

Aus ihrem lesen Sie mich:

Inline-PHP-Server, der auf Node.js ausgeführt wird

Sei besorgt, sei sehr besorgt. Der Name NodePHP hat seinen Namen von der Tatsache, dass wir einen netten Node.js-Server effektiv in eine FastCGI-Schnittstelle verwandeln, die mit PHP-FPM interagiert.

Dies ist ein Omega-Alpha-Super-Beta-Proof-of-Concept, aber es werden bereits einige einfache Skripte ausgeführt. Meistens für meine Vorträge auf Node.js für PHP-Entwickler gemacht, stellt sich heraus, dass dies ein ziemlich interessantes Projekt ist, das wir höchstwahrscheinlich mit Orchestra verwenden werden, wenn wir uns entscheiden, unseren Inline-PHP-Server freizugeben , mit dem Leute PHP ohne Apache ausführen können. Nginx oder ein beliebiger Webserver.

Ja, dies widerspricht allen Ideen und Konzepten von Node.js, aber die Idee ist, einen Webserver direkt aus jedem Arbeitsverzeichnis erstellen zu können, damit Entwickler noch schneller als zuvor loslegen können. Sie müssen keine vhosts oder Serverblöcke mehr erstellen oder Ihre / etc / hosts ändern.

Nathan JB
quelle
Das Node-PHP auf npm ist ein völlig anderes Projekt: github.com/mkschreder/node-php , das für mich großartig funktioniert.
Bryan Larsen
6

Sie können PHP wie jeden Webserver mit dem SPHP-Modul für Knoten ausführen.
Es ist kompatibel, aber nicht abhängig von Express.
Es unterstützt auch Websockets-Anforderungen am HTTP-Port.
Es ist auf Geschwindigkeit unter kleiner Last ausgerichtet, anstatt Ressourcen zu sparen.

So installieren Sie im Knoten:

npm install sphp

in deiner App:

var express = require('express');
var sphp = require('sphp');

var app = express();
var server = app.listen(8080);

app.use(sphp.express('public/'));
app.use(express.static('public/'));

Weitere Informationen finden Sie unter https://github.com/paragi/sphp

Ich bin auch leicht voreingenommen, weil ich der Autor bin :)

Simon Rigét
quelle
Beim mehrmaligen Wechseln der Seiten (Gehe zu PHP <=> Gehe zu HTML) am Beispiel: Schwerwiegender Fehler: Die maximale Ausführungszeit von 30 Sekunden wurde in node_modules \ sphp \ php_worker.php in Zeile 30 überschritten
Codebeat
Bitte senden Sie Bug-Rapports auf Github. Ich helfe gerne.
Simon Rigét
4

Sie können versuchen, Direct Link Node -> Fastcgi -> PHP zu implementieren. In der vorherigen Antwort bedient nginx PHP-Anforderungen über http-> Fastcgi-Serialisierung-> Unix-Socket-> PHP- und Knotenanforderungen als http-> Nginx-Reverse-Proxy-> Knoten-http-Server.

Es scheint, dass Node-Fastcgi-Paser derzeit verwendet werden kann, jedoch nur als Node-Fastcgi-Backend. Sie müssen es übernehmen, um es als Fastcgi-Client für den PHP-Fastcgi-Server zu verwenden.

Andrey Sidorov
quelle
2

Ein einfacher, schneller Ansatz wäre meiner Meinung nach, dafür dnode-php zu verwenden.

Eine kurze Einführung finden Sie hier . Einfach, schnell und einfach!

Mick
quelle
0

Sie müssen auschecken node-php-fpm.

Ivan Filho
quelle