• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[GELÖST] PHP unter NodeJs via ExpressJS nutzen

xorg1990

New member
Hallo Leute, ich komme absolut nicht weiter.
Ich möchte das Analyse tool piwik unter Nodejs nutzen.
Das benötigt aber php.

Habe da mal bei npm geguckt was es da so gibt und habe mich für das Modul node-php entschinden, da ist zumindest von Wordpress die rede und das ist ähnlich komplex wie piwik.

Problem ich erhallte immer die selbe Fehlermeldung

Uncaught exception: The configuration file {/home/xorg1990/workspace/http_server/phpdocs/piwik/config/config.ini.php} has not been found or could not be read. If the file exists, please check that /home/xorg1990/workspace/http_server/phpdocs/piwik/config/config.ini.php is readable by the user 'xorg1990'. in /home/xorg1990/workspace/http_server/phpdocs/piwik/core/Application/Kernel/EnvironmentValidator.php line 63 #0 /home/xorg1990/workspace/http_server/phpdocs/piwik/core/Application/Kernel/EnvironmentValidator.php(44): Piwik\Application\Kernel\EnvironmentValidator->checkConfigFileExists('/home/xorg1990/...', false) #1 /home/xorg1990/workspace/http_server/phpdocs/piwik/core/Application/Environment.php(185): Piwik\Application\Kernel\EnvironmentValidator->validate() #2 /home/xorg1990/workspace/http_server/phpdocs/piwik/core/Application/Environment.php(94): Piwik\Application\Environment->validateEnvironment() #3 /home/xorg1990/workspace/http_server/phpdocs/piwik/core/dispatch.php(28): Piwik\Application\Environment->init() #4 /home/xorg1990/workspace/http_server/phpdocs/piwik/index.php(27): require_once('/home/xorg1990/...') #5 {main}
Selbe show auch bei php-express

Das Modul express-php schaft es wenigstens was auszugeben, aber dann kann ich meine normalen routes nicht nutzen, 2tens bei den Formularen wo man sein DB Daten eingeben muss geht es nicht mehr weiter - Timeout.

Ich arbeite unter Linux/Debian mit express 4.x

Die Express konfiguration ist wie folgt:
app.use("/piwik", php.cgi(__dirname+"/phpdocs/piwik"))

Irgendwelche ideen?

Im Prinzip ist es mir egal welche Modul genutzt wird, funktionieren muss es.
 
Zuletzt bearbeitet von einem Moderator:
Die Datei config.ini.php existiert nicht im Ordner config. Schon in den zip, den man bei piwik.org zieht existiert die Datei nicht, das ist ja das komische. So wie ich ich das gelesen habe wird die Datei erst angelegt. Der Ordner hat die höchsten rechte chmod 755.

Wie gesagt das Modul express-php schaft es wenigsten bis zur Ausgabe, kann aber keine Formulardaten verarbeiten. Kommt immer Timeout nach 10min Laden:(

Habe such schon mehrfach die Ordner phpdocs/piwik neu angelegt im Fall das da schon config Dateien rumliegen -erfolglos.
 
Zuletzt bearbeitet:
Dann muss die config.ini.php innerhalb irgendeiner Installationsroutine angelegt werden. Gibt es da nicht irgendein Installationsscript?
 
Die Installationsroutine startet eigentlich beim erstmaligen Aufruf von piwik.
Habe schon an exec gedacht und via stdout zu arbeiten qick and dirty.
 
Nicht ganz, die spawnen php als child. Habe exec probiert selbes Problem. Habe nochmal express-php rum gespielt kann jetzt php und meine node routes parallel nutzen aber Formulare gehen immer noch nicht . Verstehe nicht war das eine geht und das andere nicht, der Quellcode ist fast identisch.
 
Gelöst.
Geht einwandfrei mit den modul express-php.
Wichtg ist das man das cgi vor den bodyParser initalisert. Dann gehen auch die Formulare.
Code:
app.use("/piwik/plugins", express.static(__dirname + "/phpdocs/piwik/plugins"))
app.use("/piwik/libs", express.static(__dirname + "/phpdocs/piwik/libs"))
app.all(/.+\.php$/, php.cgi("./phpdocs"))
//....
app.use(bodyParser());

Manchmal kann es passiren das die Ports durcheinader kommen, dann steht da x.x.x.x:8011. dann muss man im modul in der index.js den eintrag SERVER_PORT: auf den port ändern denn expressjs nutzt.

Achtung niemals expressjs auf port 80 laufen lassen, dann muss man nodejs als root starten, damit wären alle einstellung fürn Ar*** . Die Pfade stimme dann auch nicht mher, lieber eine Portweiterleiung einrichten.

Fast vergessen,
Die Pfade sehen so aus DOCUMENT_ROOT//phpdocs/piwik/ <- darin ist die index.php
die URL ist dann x.x.x.x:2000/piwik/index.php

THX to: HansHammel für den hinweis mit der Initialisierung
https://github.com/HansHammel
 
Zuletzt bearbeitet:
Hi!

Versuche auch gerade express-php zum Laufen zu bekommen. Leider ist der Beispiel-Code auf der Seite für mich nicht sehr hilfreich -> da ich mich damit überhaupt nicht auskenne. Und auch keine Ahung habe ob ich sonst noch irgendwas installieren muss bevor das unter VS Code + Express läuft. Vielleicht könnte mir hier wer weiterhelfen ??

Express-php habe ich installiert und meine app.js sieht soweit so aus:
Code:
var express = require('express');
var app = express();
[COLOR="#008000"]var php = require('express-php');[/COLOR]
var bodyParser = require('body-parser');
var port = process.env.PORT || 8080;
...
var environment = process.env.NODE_ENV;

app.use(bodyParser.urlencoded({
  extended: true
}));
app.use(bodyParser.json());

...

switch (environment) {
  case 'build':
    console.log('** BUILD **');
    app.use(express.static('./build/'));
    app.use('/*', express.static('./build/index.html'));
    break;
  default:
    console.log('** DEV **');
    app.use(express.static('./src/client/'));
    [COLOR="#008000"]app.use(php.cgi('./src/client/')); // ist das hier richtig ?[/COLOR]
    app.use(express.static('./'));
    app.use(express.static('./tmp'));
    app.use('/*', express.static('./src/client/index.html'));
    break;
}
...

In meiner SPA ( mit AngularJS ) greif ich auf eine PHP Datei zu, die mir Daten aus einer DB ( MySQL ) zurückgibt:
Code:
var $promise = $http.post('php/login.php', user);

Wenn ich die Anwendung unter XAMP laufen lasse bekomme ich Feedback aus der PHP - aber wenn ich in VS Code den Express Server starte bekomme ich 404-Status für die PHP Datei.

  • Stimmt überhaupt die Stelle an der ich app.use(php.cgi('./src/client/')); einsetze ?
  • Mein angegebener Pfad dafür ist das Root-Verzeichnis meiner SPA.
  • Habe das mit dem BodyParser hinter das switch-case gestellt -> löst aber das Problem nicht
  • Muss ich noch irgendetwas zusätzlich installieren um PHP zu 'aktivieren'?

Wäre auf jeden Fall für jeden Hinweis dankbar :)
 
Zuletzt bearbeitet:
Muss das .cgi nicht vor das .static? Aber wenn da ein 404er kommt, heißt das, das deine PHP-Dateien gar nicht gefudnen werden. Also irgendeine Pfadangabe falsch ist.
 
Oha, das kommt jetzt ein wenig unerwartet, da ich schon länger nix mehr mit nodejs gemacht habe.

Aber was ich sehe, die Reihenfolge ist falsch und de Befehl heißt app.all().

Also das app.use(php.cgi('./src/client/')); // ist das hier richtig ? ist flasch.

Richtig : app.all(/.+\.php$", php.cgi("./phpdocs"))
Heist soviel wie alle Dateien die mit .php enden und im Ordner phpdocs liegen werden von php.cgi ausgeführt.

Erst danach darfst du den BodyParser aufrufen.

Bei einem Windows System kann es hier zu Problemen führen. Native Module also welche die in c oder php geschrieben sind buggen rum.

alphakanal schrieb:
Habe das mit dem BodyParser hinter das switch-case gestellt
Ich weiß ja nicht was du da genau treibst, aber das switch brachst du eigentlich nicht. Das express.static() sagt ja deinem Server nur unter welchem Pfad er die Statischen Dateien findet.

Bsp:
app.use("/styles", express.static(__dirname + "/css"));

Dein Browser findet die css Dateien nun unter /styles statt /css.

alphakanal schrieb:
greif ich auf eine PHP Datei zu, die mir Daten aus einer DB ( MySQL ) zurückgibt:
Warum nutzt du für die DB abfragen php? Habe das bei mir alles in nodejs geschrieben.
 
Zurück
Oben