Zugriff von PHP-Script auf absoluten Pfad / Datenaustausch mit Hintergrundskript

  • Hallo,

    nachdem ich inzwischen das Hochladen von Dateien beherrsche, möchte ich (Linux Einsteiger) die nächste Herausforderung meistern.


    Beim Start des Raspberry starte ich ebenfalls ein bash-Skript, welches jede Sekunde aufwacht und ein wenig Schickschnack macht.

    Ums genau zu sagen, das Script schaut sich jede Sekunde an, ob in irgendeiner Druckerqeue ein Druckjob angekommen ist, und aktiviert

    gegebenenfalls über einen GPIO ein Relais, welches die Steckdose für meine Drucker unter Spannung setzt.

    Dieses Skript läuft im Zusammenspiel mit CUPS einwandfrei.


    Für eine Erweiterung der Funktion soll dieses Skript nun auch über eine kleine Webseite vom Apache via PHP gesteuert werden.

    Dazu benötige ich einen Datenaustausch zwischen meinem Script und dem PHP / Apache.

    Mein erster Gedanke war, dass das PHP in meiner Ramdisk unter /tmp/ eine Datei anlegt, die von meinem Skript ausgelesen wird.

    Da fangen meine Probleme an.


    Wenn ich unter PHP im Verzeichnis /var/www/html/ eine Datei mit einem lokalen Pfad erzeuge, klappt das.

    Ich möchte aber nicht die Datei auf der SD-Karte liegen haben, sonder in der Ramdisk unter /tmp/, da ich die SD-Karte größtenteils schreibgeschützt betreiben möchte.

    Wenn mein PHP eine Datei aber unter einem absoluten Pfad, z.B. in /tmp/ ablegen will, wird dies offensichtlich vom Apache umgebogen in

    /tmp/systemd-private-2ab69e9d15e24bb2aafd46ad67cc0a1e-apache2.service-aBMKes/tmp/<Dateiname>

    Offensichtlich kapselt Apache den Webzugriff auf das Filesystem.

    Auf dieses Verzeichnis hat aber mein Skript keinen Zugriff, vor allem fürchte ich, dass sich dieser Pfad auch mit jeder Sitzung ändert.


    Daher meine Fragen:

    - wie kann ich unter Apache / PHP auf einen absoluten Pfad außerhalb von /var/www/html zugreifen?

    ODER

    - gibt es einen anderen einfachen Mechnismus für den Datenaustausch, den ich als Linux-Newbie hinkriege? (Mailboxing, Semaphoren etc...)??

  • Hallo,


    Quote

    Offensichtlich kapselt Apache den Webzugriff auf das Filesystem.

    So ähnlich: Apache läuft aus guten Gründen mit geringen Benutzerrechten bzw. als Benutzer `www-data`. Der darf halt nicht viel (aus Sicherheitsgründen), u.a. hat dieser Benutzer keine Rechte auf viele Verzeichnisse.


    Was auf jeden Fall ginge, wäre über eine Datenbank, ein KV-Store oder eine MessageQueue zu kommunizieren. Ob PHP + Bash nicht auch über Named Pipes oder Sockets kommunizieren können kann ich dir nicht sagen, kenne mich mit PHP nicht wirklich aus.


    Gruß, noisefloor

  • Wer ist "ich", und welchen Gruppen gehört der jeweils beteiligte User an ?


    Laut /etc/mtab hat jeder User sein eigenes tmpfs.


    Wenn es nur darum geht, dass der User www-data das Schnickschnack-Script ausführen können soll, kann der Eigentümer dem User www-data dies über "setfacl", also die Access Control List, erlauben.


    Servus !

    RTFM = Read The Factory Manual, oder so

  • Named pipes hab ich mal versucht, leider landet die wieder entweder mit einem lokalen Pfad auf der SD-Karte oder mit einem absoluten Pfad in dem krptischen apache-Verzeichnis im /tmp/.

    Damit ist mir leider noch nicht geholfen.




    ... Wer ist "ich", und welchen Gruppen gehört der jeweils beteiligte User an ?

    Laut /etc/mtab hat jeder User sein eigenes tmpfs. ...

    So wie ich das sehe, hat bei mir jeder User unterhalb vom /tmp sein eigenes tmpfs,, dennoch gibt es das /tmp, in dem jeder rumwerkeln kann,

    sofern er nicht auf geschützte fremde Date stößt...

    Mein Script hat ja mittels /tmp/<datei> Zugriff auf die datei, und jeder andere auch, dem ich die Rechte einräume.

    Nur von Apache / PHP hab ich gar nicht die Möglichkeit auf diesen absoluten Pfad zuzugreifen.



    wie wäre es mit einem entsprechenden Link von /www/xx nach irgendwo ?

    Habs versucht. Habe im /tmp ein Verzeichnis "apache" mit Rechten für alle eingerichtet und einen Link darauf als /var/www/html/tmp

    Von meinen PHP kann ich in allen lokalen Pfaden unterhalb von /var/www/html Dateien erzeugen, aber nicht im Link /var/www/html/tmp.

  • Ich glaub, ich hab nun die Lösung:

    Wenn ich in /var/www/html/tmp ein temporäres Filesystem mounte, kann PHP / Apache dort Dateien ablegen oder PIpes generieren.

    Code
         sudo mount -t tmpfs none /var/www/html/tmp
  • Genau, das wäre jetzt auch mein spontaner Vorschlag gewesen.... Per mount oder symb. Link. Oder vielleicht noch per rsync ins www dir.

    Gruss, Jürgen


    "Wer Fehler findet, kann sie behalten."
    "Wenn ich blöd frage, hat die Suche bisher nichts gebracht."