Daten aus Datei auslesen und anzeigen

  • Für meine Haussteuerung habe ich einen Raspberry mit Monitor wo ich den aktuellen Zustand sehen kann. Über das Display kann ich auch drekt steuern.

    Das läuft auch alles sehr gut. Nun habe ich nur ein Problem. Wollte den Monitor um die Zeiten von Sonnenauf- und Untergang anzeigen lassen.

    Dazu hole ich die Daten vom Wetterdienst. Damit steuere ich auch zb. die Rollors.

    Die Daten befinden sich im gleichen Verzeichnis unter "Sonne.dat"


    Die Indexdatei des Monitor sieht so aus:

    Die Datei Footer_Sonne.php soll den Skript für die Anzeige enthalten.


    Sonne.dat:

    hier steht die Sonnenaufgangszeit, die jede Nacht aktualisiert wird.

    Code
    05:12 Uhr

    Footer_Sonne.php:

    hier soll das Skript für die Anzeige drin stehen

    Code
    $Anzeige = file_get_contents("Sonne.dat");
    echo $Anzeige;

    ich habe es mit fopen, file, file_get_contents, probiert, aber bekomme es nicht hin.

    Habe die Datei wie hier angegeben nur auf die eine Zeile vereinfacht.

    Rufe ich die Datei über der Konsole auf, bekomme ich die Uhrzeit angezeigt. Ist egal welche Funktion ich nehme.

    Aber über den Browser wenn ich die index.php aufrufe wird mir die Uhrzeit nicht angezeigt.

    Wenn ich die Variable $Anzeige direkt einen Wert zuweise, erscheint der Wert auch im Browser.


    Habe schon Google stundenlang durchwühlt alles ausprobiert, aber alles funktioniert nicht.

    Weiß von euch einer, wo der Fehler liegen könnte?


    Wenn ich die Datei "Footer_Sonne.php" über der Konsole angezeigt bekomme, dann bekomme ich die Uhrzeit angezeigt.

  • Berechtigungsproblem? Der Webserver läuft wahrscheinlich als User www-data, darf der auf die Datei zugreifen?

    ls -l Sonne.dat

    Menschen die keine Ironie verstehen finde ich super!

    • Official Post

    Rufe ich die Datei über der Konsole auf, bekomme ich die Uhrzeit angezeigt.

    Das glaube ich nicht, es sein denn, dass Sonne.dat im Verzeichnis footer liegt.


    Hast Du es mal mit dem absoluten Pfad zu Sonne.dat versucht?

  • @IIutz

    Ja die Berechtigungen passen, alle stehen auf www-data


    aber jetzt verstehe ich gar nichts mehr

    habe mal ein test gemacht in der Index.php

    PHP
            <div id="Footer_Sonne">
    <?php
    echo file_get_contents('Sonne.dat');
    ?>
            </div>

    Habe die include Zeile rausgenommen und dafür den Skript an der Stelle der include Zeile gesetzt. Jetzt wird mir die Uhrzeit auch angezeigt.

    Nur verstehe ich jetzt nicht warum wenn ich die in einer eigene Datei schreibe und die include das es dann nicht geht


    hyle

    um das alles auszuschließen habe ich die Sonne.dat im gleichen Verzeichnis gepackt.

    Im Verzeichns /footer und jetzt wo es direkt in der Index.php steht auch unter /html

  • hyle


    Danke für dein Tip, der war Gold Wert. Daran lag es.

    Habe nicht mehr dran gedacht, das wenn man included, das man in das entsprechende Verzeichnis der Haupt Datei ist.

    Es funktioniert jetzt

  • Zu früh gefreut,


    ein Problem habe ich trotzdem noch. Und zwar werden die Daten in /tmp/Sonne.dat geschrieben, da die Abfrage über Phyton läuft.

    Nur komme ich über php nicht in das Verzeichnis /tmp.

    Habe das beim anderen Rasberry aber am laufen, hatte damals auch lange suchen müssen. Habe geglaubt mir das genau notiert zu haben aber leider habe ich das nicht. Habe mir nur unter visudo für www-data nopassword notiert. Aber da war noch etwas damit das geht.

    Könnt ihr mir danoch einmal helfen, wie ich von php auf das Verzeichnis /tmp zugreifen kann?

  • Daran scheint es nicht zu liegen, die sieht bei mir so aus:


    [Service]

    Type=forking

    Environment=APACHE_STARTED_BY_SYSTEMD=true

    ExecStart=/usr/sbin/apachectl start

    ExecStop=/usr/sbin/apachectl stop

    ExecReload=/usr/sbin/apachectl graceful

    PrivateTmp=true

    Restart=on-abort

  • PrivateTmp=true

    Doch genau daran liegt es. Apache2 sieht dadurch nur sein eigenes TMP und das ist nicht /tmp sondern

    /tmp/systemd-private-<hash>-apache2.service-<random>

    Menschen die keine Ironie verstehen finde ich super!

  • OK dann habe ich das falsch interpretiert.

    Nur weiß ich jetzt nicht wie ich das ändern muss. Denn so tief stecke ich in Linux nicht drin.

    Und ich möchte mir nicht unbedingt das System abschießen.

    Ich währe dir sehr Dankbar wenn du mir sagen könntest was ich wo genau ändern muss.

    Oder reicht das aus wenn ich das true no eintrage?

  • Du kannst das private-Temp abschalten.

    sudo systemctl edit apache2.service (leere Datei öffnet sich),

    dort eintragen (das erzeugt eine override-Datei)

    Code
    [Service]
    PrivateTmp=false

    sudo systemctl daemon-reload && sudo systemctl reload apache2.service sollten den Webserver wieder das "normale " /tmp nutzen lassen.


    "Über Risiken und Nebenwirkungen befragen sie sie Suchmaschine ihrer Wahl"

    Auf einem Heimserver ist das verbundene Risiko der Änderung imho gering.

    Menschen die keine Ironie verstehen finde ich super!

    Edited once, last by llutz ().

  • llutz

    Danke für deine Hilfe und Geduld.

    Leider hatte ich nach deine Änderungen wieder das gleiche Problem wie am Anfang

    In der Konsole ging es und über Webbrowser nicht.

    Habe dann versucht im "Apache2.Service" den Wert von Yes auf no direkt geändert. Danach geht es jetzt.


    Trotzdem herzlichen Dank für deine Hilfe.

    Und mit der Sicherheit hast du Recht, aber ich habe von außen kein Zugriff auf mein Raspberry.

    Daher wie du schon sagst, in das Risiko verträglich.

    • Official Post

    Ich habe mal eine Frage dazu:

    Und zwar werden die Daten in /tmp/Sonne.dat geschrieben, da die Abfrage über Phyton läuft.

    Wäre es nicht sinnvoller (und vielleicht auch sicherer), wenn Sonne.dat gleich nach /var/www/html (oder Unterverzeichnis) geschrieben werden würde? Dann könnte der Apache2 in seinem Sandkasten bleiben. :conf:

  • Sicherer wäre es wahrscheinlich einfach ein neutrales Verzeichnis für den Datenaustausch zu nutzen, also weder /tmp noch $DocumentRoot (da sollten andere Prozesse nicht schreiben dürfen).

    Menschen die keine Ironie verstehen finde ich super!

    Edited once, last by llutz ().

  • hyle

    da hast du vollkommen Recht. Wie gesagt die Geschichte hat keine Verbindung nach draußen bleibt nur innerhalb des Hauses.

    Aber das ist bei mir zur gewohnheit geworden, denn ich habe noch etliche Sachen die ich steuere, wie Rasensprengung, Fischteich usw.

    Da habe ich einige Daten, die Temporär gespeichert werden müssen und sich laufend ändern. Deswegen das Verzeichnis /temp. Der Grund war um den Speicherchip zu schonen.

    Aber in diesen Fall, habt ihr Recht. Da es nur einmal am Tag geändert wird, kann es somit ruhig auf den Chip abgelegt werden.

    Werde es änden.