index.php
:Ausführen von R-Skript von PHP
<?php
echo exec("Rscript foo.R");
?>
foo.R
:
#!/usr/bin/env Rscript
print("Before!")
#library(rJava);
print("After!");
Ausgabe auf der Webseite:
[1] "After!"
Nun ist dies eine erwartete Ausgabe als exec
die letzte Zeile kehrt aus das Ergebnis des Befehls. Jetzt, da ich auf die mongodb-Datenbank zugreifen möchte, die rJava
und RMongo
Bibliotheken benötigt, habe ich den obigen Code ein wenig geändert.
foo.R
:
#!/usr/bin/env Rscript
print("Before!")
library(rJava);
print("After!");
Ausgabe auf der Webseite:
[1] "Before!"
nun diese Ausgabe Ich verstehe nicht. Ich erwartete die gleiche Ausgabe wie zuvor, d.h. [1] "After!"
. Es ist so, als ob der R-Code, der von der Bibliotheks-Importlinie ausgeht, überhaupt nicht existiert. Ich habe den obigen Code (und den ausgelassenen, wo ich kmeans
auf die Daten von mongodb
greifen) in R shell
verwendet und es funktioniert wie erwartet.
Was ist falsch beim Importieren einer Bibliothek in einem R
Skript, das von PHP
ausgeführt werden soll?
Update 1:
Interessanterweise wird die modifizierte foo.R
aufgerufen und nach meiner Erwartung ausgeführt, wenn ich index.php
von der Kommandozeile aufrufen.
$ php index.php
Loading required package: methods
[1] "After!"
Also mein Fazit ist, dass mein normales Benutzerkonto index.php
ausführen kann, die in foo.R
Bibliotheken wiederum laden können, aber es scheint www-data
Benutzerkonto keine Berechtigungen hat Bibliotheken in R
zu laden.
Jetzt ist die Frage, wie gebe ich Berechtigungen www-data
zu laden R
Bibliotheken?
Update 2:
löste ich dieses Problem vorübergehend von Apache-Benutzer zu meinem aktuellen Benutzer von www-data
ändern, aber ich bin mir bewusst, das ein enormes Sicherheitsrisiko ist, und ich bin für eine alternative Lösung.
Haben Sie genau überprüft, welchen Fehler Sie in Ihren Apache-Protokollen erhalten, wenn 'www-user'' R'-Bibliotheken nicht laden kann? Insbesondere denke ich, dass Sie herausfinden müssen, wo diese R-Bibliotheken leben. – merlin2011
Die andere Möglichkeit ist, dass der Bibliothekssuchpfad für den Benutzer "www-data" nicht korrekt ist, sondern ein Berechtigungsproblem. Sind die Bibliotheken systemweit installiert oder wurden sie für Ihren lokalen Benutzer installiert? – merlin2011
@ merlin2011 Oh! Ich denke, es ist der spätere! Jetzt erinnere ich mich daran, dass ich Bibliotheken in meinem Home-Verzeichnis installiert habe. Ich werde sie jetzt systemweit installieren und werde mit dem Standard-Apache-Benutzer versuchen. Bitte posten Sie dies als Antwort, damit ich akzeptieren kann, wenn es funktioniert :) – rootkea