PHP Problem bitte um Hilfe

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo zusammen ,

    Ich bin gerate dran mir ein kleines Webinterface zu basteln . um zb. Status der gpio usw anzuzeigen , im zb. status.php geht das auch alles super


    jetzt stehe ich aber vor einen problem !
    ich poste mal den teil des codes

    [code=php]<?php

    $fileToInclude = "home.php";


    if (isset($_GET["site"]))

    {

    $site = $_GET["site"];

    if (strlen($site) != 0)

    {

    if ($site == "home")

    $fileToInclude = "home.php";


    if ($site == "status")

    $fileToInclude = "status.php";
         
    }

    }

    ?>


    <html xmlns="http://www.w3.org/1999/xhtml">


    <head>

    <meta http-equiv="content-type" content="text/html;charset=iso-8859-1" />

    <meta name="generator" content="Adobe GoLive" />

    <title>Diskus-Tempel NBG Diskuszucht N&uuml;rnberg Webinterface</title>

    </head>


    <body>

    <table width="995" border="0" cellspacing="2" cellpadding="0" height="908">

    <tr>

    <td align="left" valign="top" background="backr.jpg">

    <table width="987" border="0" cellspacing="2" cellpadding="0" height="862">

    <tr height="260">

    <td width="179" height="260"></td>

    <td align="left" valign="top" width="794" height="260">

    <table width="771" border="0" cellspacing="2" cellpadding="0" height="128">

    <tr height="19">

    <td width="290" height="19"></td>

    <td height="19"></td>

    </tr>

    <tr>

    <td width="290"><strong><font size="+2"> WEBINTERFACE</font></strong></td>

    <td align="center" valign="top"><br /><?php include ("aktuell.php"); ?>

    </td>

    </tr>

    </table>

    </td>

    </tr>

    <tr height="480">

    <td align="center" valign="top" width="179" height="480">
    <div align="center">
    <a href="index.php?site=home.php">Home</a><br />
    <br>
    Webinterfae<br />
    Start<br />
    <strong>AquaPC</strong><br />
    System Infos<br />
    Licht<br />
    Bel&uuml;ftung<br />
    Co2<br />
    Heizung<br />
    Wasserwechsel<br />
    <br />
    Aqua-Solar<a href="index.php?site=aquapc"><br />
    Solar Kollektor</a><br />
    W&auml;rme-Tausche <br />
    Heizk&ouml;rper<br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    </div>
    </td>

    <td align="left" valign="top" width="794" height="480">

    <table width="624" border="0" cellspacing="2" cellpadding="0" height="570">

    <tr>

    <td align="center" valign="top"><? include($fileToInclude); ?></td>

    </tr>

    </table>

    </td>

    </tr>

    <tr height="105">

    <td align="center" valign="top" width="179" height="105"></td>

    <td width="794" height="105"><font size="+2">&copy; Diskus-Tempel-N&uuml;rnberg (http://www.diskus-tempel.myftp.org)</font></td>

    </tr>

    </table>

    </td>

    </tr>

    </table>

    <p></p>

    </body>

    </html>
    [/php]

    hier wenn ich die seite so auf einen free hoster liegen habe läd er zb. zum start home.php

    aber auf meinen raspberry leider nicht ich habe php5 und apache2 drauf

    bei der abfrage " ip-pi/index.php kommt stat die home datei eine leere seite und auch die links dazu klappen nicht
    obwohl die datei home.php mit text vorhanden ist

    hoffe ihr könnt mir helfen

    lg sven

  • Du hast im obigen Teilscript in den if Anweisungen schonmal die geschweiften klammern vergessen..

    if(Bedingung == wert)
    {
    Auszuführender Code
    }

    Was steht denn in den zu icludierenden Files?
    Hast du „display errors“ auf „on“?

    Falls ja, gibt das schonmal diverse Hinweise, die du abarbeiten kannst...

    Gruß...

  • Hallo Sven,

    leg dir mal eine phpinfo.php mit dem Inhalt:

    [code=php]<?php
    phpinfo();

    ?>[/php]

    Auf deinen Raspi und auf den Freewebspace den du verwendet hast und vergleiche mal die Einstellungen die dir für beide Server angezeigt werden. Evtl. wird dein Code nicht richtig interpretiert, oder auf dem Freewebspace läuft z.B. PHP7.

    Meiner Meinung nach solltest du php-code mit dem Tag <?php beginnen und mit ?> enden lassen. So jedenfalls meine Kenntnisse aus PHP5 Zeiten.

    Tiieto: Display Errors scheint deaktiviert zu sein, sonst hätte er keine leere/weiße Seite. Allerdings du hast Recht mit den geschweiften Klammern, jedoch: Warum läuft der Code dann auf dem Free-Webspace *kopfkratzt* ?

    sven: Du solltest die http.conf des Apaches mal anfassen und DISPLAY_ERRORS auf E_ALL setzen. Dann werden dir Fehlermeldungen angezeigt anstatt dass dein Interpreter mit einer weißen Seite stoppt. Man sollte aber, wenn die Website in den Produktivbetrieb geht - also öffentlich einsehbar/verwendbar wird - DISPLAY_ERRORS wieder auf NONE setzen.

    Einmal editiert, zuletzt von Masterkennie (27. September 2017 um 15:32)

  • Zitat von &quot;Tiieto&quot; pid='301384' dateline='1506518518'


    Du hast im obigen Teilscript in den if Anweisungen schonmal die geschweiften klammern vergessen..

    if(Bedingung == wert)
    {
    Auszuführender Code
    }

    Was steht denn in den zu icludierenden Files?
    Hast du „display errors“ auf „on“?

    Falls ja, gibt das schonmal diverse Hinweise, die du abarbeiten kannst...

    Gruß...

    http://diskus-tempel.myftp.org/webinterface/index.php
    ist meine startseite in dieser sollte ja die home angezeigt werden , ich probiere schon die ganze zeit herrum
    evtl hilf der link in der datei home.php steht derzeit das selbe wie ich nun auf der index php zum start rein geschrieben habe

    ich poste nachher nochmal alle dateien und deren codes ,

    ich denke das es an den webserver/php liegt den apache hat keine error logs


    lg sven

  • Zitat von &quot;diskus-tempel&quot; pid='301380' dateline='1506515821'


    Ich bin gerate dran mir ein kleines Webinterface zu basteln . um zb. Status der gpio usw anzuzeigen

    Alles was GPIO betrifft sollte man lieber direkt über Python machen:
    FAQ => Nützliche Links / Linksammlung => [Python] Webserver, Websocket und ein bisschen AJAX


    Wenn es trotzdem unbedingt PHP sein muss:
    FAQ => Nützliche Links / Linksammlung => PHP: Anleitung zum schalten von GPIO

  • ich Poste jetzt mal die Codes!

    die index.php sieht wie folgt aus (aktuell)
    [code=php]<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <?php

    $fileToInclude = "home.php";


    if (isset($_GET["site"]))

    {

    $site = $_GET["site"];

    if (strlen($site) != 0)

    {

    if ($site == "home")

    $fileToInclude = "home.php";


    if ($site == "sys_inf")

    $fileToInclude = "system.php";
         
       
    }

    }

    ?>


    <html xmlns="http://www.w3.org/1999/xhtml">


    <head>

    <meta http-equiv="content-type" content="text/html;charset=iso-8859-1" />

    <meta name="generator" content="Adobe GoLive" />

    <title>Diskus-Tempel NBG Diskuszucht Nürnberg</title>

    </head>


    <body>

    <table width="995" border="0" cellspacing="2" cellpadding="0" height="908">

    <tr>

    <td align="left" valign="top" background="backr.jpg">

    <table width="987" border="0" cellspacing="2" cellpadding="0" height="862">

    <tr height="260">

    <td width="179" height="260"></td>

    <td align="left" valign="top" width="794" height="260">

    <table width="771" border="0" cellspacing="2" cellpadding="0" height="128">

    <tr height="19">

    <td width="290" height="19"></td>

    <td height="19"></td>

    </tr>

    <tr>

    <td width="290"></td>

    <td align="center" valign="top"><br /><?php include ("aktuell.php"); ?>

    </td>

    </tr>

    </table>

    </td>

    </tr>

    <tr height="480">

    <td align="center" valign="top" width="179" height="480"><a href="index.php?site=home">Home</a><br />

    <strong>Nürnberg<br>

    </strong><br>
    <a href="index.php?site=sys_inf">System-Info</a><br />
    </td>

    <td align="left" valign="top" width="794" height="480">

    <table width="624" border="0" cellspacing="2" cellpadding="0" height="570">

    <tr>

    <td align="center" valign="top"><? include($fileToInclude); ?></td>

    </tr>

    </table>

    </td>

    </tr>

    <tr height="105">

    <td align="center" valign="top" width="179" height="105"></td>

    <td width="794" height="105"></td>

    </tr>

    </table>

    </td>

    </tr>

    </table>

    <p></p>

    </body>

    </html>
    [/php]
    dann die home.php sieht wie folgt aus (aktuell)
    [code=php]<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


    <html xmlns="http://www.w3.org/1999/xhtml">


    <head>

    <meta http-equiv="content-type" content="text/html;charset=utf-8" />

    <meta name="generator" content="Adobe GoLive" />

    <title>home</title>

    </head>


    <body>

    <div align="center">

    <p><strong>Willkommen Sven ! </strong></p>
    <p><strong>Hier kannst du alles Steuern ! </strong></p>
    <p></p>
    <p>Infos zum System </p>
    <p><div align="center">
    <table width="481" border="0" cellspacing="0" cellpadding="0">
    <tr>
    <td><?php
    $output = shell_exec(' gpio -g read 15');

    if( $output == 1 )
    echo "<p><img src='/icon/licht_off.jpg' /></p>";
    else
    echo "<p><img src='/icon/licht_on.jpg' /></p>";
    ?></td>
    <td></td>
    <td><?php
    $output = shell_exec(' gpio -g read 8');

    if( $output == 1 )
    echo "<p><img src='/icon/ww_off.jpg' /></p>";
    else
    echo "<p><img src='/icon/ww_on.jpg' /></p>";
    ?></td>
    <td></td>
    <td><?php
    $output = shell_exec(' gpio -g read 27');

    if( $output == 1 )
    echo "<p><img src='/icon/Solar_off.jpg' /></p>";
    else
    echo "<p><img src='/icon/Solar_on.jpg' /></p>";
    ?></td>
    <td></td>
    <td><?php
    $output = shell_exec(' gpio -g read 17');

    if( $output == 1 )
    echo "<p><img src='/icon/heizung_off.jpg' /></p>";
    else
    echo "<p><img src='/icon/heizung_on.jpg' /></p>";
    ?></td>
    <td></td>
    <td><?php
    #Mit folgender Zeile kann man die Verzeichnisse der angeschlossenen Sensoren auslesen
    #Für jeden Sensor der angeschlossen wird, wird automatisch ein Unterverzeichnis erstellt
    #cat /sys/bus/w1/devices/w1_bus_master1/w1_master_slaves


    $sensors = array("Anlage"=>"28-0416a43a81ff");


    foreach ($sensors as $room => $directory)
    {
    $temp = exec('cat /sys/bus/w1/devices/'.$directory.'/w1_slave |grep t=');
    $temp = explode('t=',$temp);
    $temp = $temp[1] / 1000;
    $temp = round($temp,2);
    $temp = number_format($temp,1,',','.');

    echo "<div class=\"box\">";
    echo "<div class=\"room\">".$room.":</div>\n";
    echo "<div class=\"temp shadow\"> ". $temp . " C</div>\n";
    echo "<div style=\"clear:both;\"></div>\n";
    echo "</div>";
    }
    ?></td>
    </tr>
    </table>
    <br />
    </div>
    </p>
    <p></p>
    </div>

    </body>


    </html>[/php]

    so wenn ich die home.php allein aufrufe geht diese aber sie wird nicht in der index angezeigt , bereich bleibt leer (weis)

    link hänge ich auch mal mit an

    link zu normalen index
    link zu home.php ( die eigentlich in der index angezeigt werden müsste

  • Also wenn mich da nicht alles täuscht, dann fehlt an der Stelle wo die home.php includiert und angezeigt werden soll einfach:

    [code=php]<?php
    echo $filetoinclude;

    ?>[/php]


    Du includierst nur, lässt aber nicht darstellen.... würde ich jetzt mal vermuten.


    [code=php]<tr>

    <td align="center" valign="top"><? include($fileToInclude); ?></td>

    </tr>[/php]

    daher echo + variable

    Einmal editiert, zuletzt von Masterkennie (27. September 2017 um 16:08)


  • doch diese ist drin , und diese funtzt auch auf den free host server , nur das ich da die daten meines systems ned angezeigt bekomme
    Automatisch zusammengefügt:
    hier die selben datein , er zeigt fehler an is klar da er ned auf mein raspi zugreifen kann , aber er würde sie anzeigen

    link hier zum free hoster

    hier

    Einmal editiert, zuletzt von diskus-tempel (27. September 2017 um 16:20)

  • sven: Du solltest die http.conf des Apaches mal anfassen und DISPLAY_ERRORS auf E_ALL setzen. Dann werden dir Fehlermeldungen angezeigt anstatt dass dein Interpreter mit einer weißen Seite stoppt. Man sollte aber, wenn die Website in den Produktivbetrieb geht - also öffentlich einsehbar/verwendbar wird - DISPLAY_ERRORS wieder auf NONE setzen.

    Ich komme da immer durcheinander, also entweder in der Apache-Conf oder in der PHP.INI MUSS Error-Reporting auf E_ALL gesetzt werden. Dann siehst du einfach mehr was Synthaxfehler usw. angeht. Versuch das erst mal.

  • Zitat von &quot;Masterkennie&quot; pid='301399' dateline='1506522072'


    sven: Du solltest die http.conf des Apaches mal anfassen und DISPLAY_ERRORS auf E_ALL setzen. Dann werden dir Fehlermeldungen angezeigt anstatt dass dein Interpreter mit einer weißen Seite stoppt. Man sollte aber, wenn die Website in den Produktivbetrieb geht - also öffentlich einsehbar/verwendbar wird - DISPLAY_ERRORS wieder auf NONE setzen.

    Ich komme da immer durcheinander, also entweder in der Apache-Conf oder in der PHP.INI MUSS Error-Reporting auf E_ALL gesetzt werden. Dann siehst du einfach mehr was Synthaxfehler usw. angeht. Versuch das erst mal.

    Code
    error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT

    ist in der php.ini ich finde aber keine error log in var

  • Dazu muss man nicht die Konfigurationsdateien ändern, das kann man auch im jeweiligen PHP-Script: http://php.net/manual/de/function.error-reporting.php

    An seinem Code sieht man leider auch viel blindes copy&paste aber nicht dass verstanden wurde was da überhaupt passiert... Zum Beispiel macht die $sensors Schleife kein Sinn da eh nur ein Eintrag vorhanden ist.

    Er führt viel zu viele Konsolen Befehle aus, das kann man auch alles nativ direkt in PHP machen... Das ganze shell_exec(); Gedöns könnte man rauswerfen - finde ich eh eine schlechte Angewohnheit.
    Natives 1wire: https://github.com/meigrafd/Sampl…/_PHP/1wire.php
    Sein Stil erschwerts aber auch den Code zu verstehen - da vergeht mir schnell die Lust mich da durch zu wühlen. Angefangen bei den ganzen Leerzeilen, bis zu besagten shell_exec(); die übers ganze Script verteilt stehen...


    PS: Bitte nicht Beiträge vollständig quoten/zitieren, vor allem wenn diese genau da drüber stehen.

  • hallo meigrafd

    danke zu deiner Antwort !

    ich bin kein php scripter und versuche mich in der ganzen sache , ob jetzt aufbau usw gut oder schlecht ist lass ich mal so stehen , ich bin ja schon froh irgenwas im ganz zu bekommen
    was ich denoch nicht verstehe ist bei dem freehost würde es anzeigen auf den pi nicht also denke ich liegt es ja wohl an dem pi , bez. an php selbst . oder dessen beider configen !

    lg

  • [font="Arial"]Vermutlich ist auf deinem lokalen System in der php.ini die Direktive für das short_open_tag auf Off gestellt. PHP-Anweisung innerhalb von HTML-Code müssen dann mit <?php statt nur mit <? eingeleitet werden.[/font]

    [font="Arial"]In der index.php in der Zeile zum Inkludieren der ausgewählten Datei (Zeile 112) wird das short_open_tag verwendet. Ersetze dort [/font]

    [font="Arial"]

    Code
    <td align="center" valign="top"><? include($fileToInclude); ?></td>

    [/font]
    [font="Arial"]durch[/font]

    [font="Arial"]

    PHP
    <td align="center" valign="top"><?php include($fileToInclude); ?></td>

    [/font]

    [font="Arial"]Bei allen anderen PHP-Einbettungen wird korrekt <?php verwendet.[/font]

    [font="Arial"]Was letztlich an HTML-Code generiert wird, ist allerdings nicht wohlgeformt. Du bindest ein eigenständiges HTML-Dokument (also beginnend mit einem <html>-Tag) als Teil einer Tabellenzelle ein. Das gehört sich so nicht, auch wenn die Browser das offenkundig korrekt rendern.[/font]
    [font="Arial"] [/font]
    [font="Arial"]Korrekterweise sollte in der home.php nur der Part beginnend mit dem äußeren <div>-Element stehen. Oder du lädst das komplette HTML-Dokument in einen <iframe> innerhalb der index.php.[/font]

    Einmal editiert, zuletzt von wildspitze (27. September 2017 um 17:53)

  • Zitat von &quot;diskus-tempel&quot; pid='301415' dateline='1506528318'


    nun mach ich mir mal gedanken bez. der programmierung , wie ich diese noch verbessern kann

    Orientiere dich dabei an den Grundlagen hier => https://www.forum-raspberrypi.de/Thread-php-anl…79406#pid179406

    Wenn man im Prinzip gleichen Code mehrmals wiederholt definiert man dafür eine Funktion und ruft nur die mehrmals auf - hat auch den Vorteil das man nur die Funktion selbst ändern müsste, falls.... Das würde sich für deine GPIO Sachen anbieten - egal ob du nun Nativ oder weiter shell_exec verwenden willst, wobei ich persönlich shell_exec(); überhaupt nicht leiden kann :fies: Nutze stattdessen lieber exec();

    Bei PHP gibts quasi eine Besonderheit: Erst wird die gesamte Datei geladen, erst anschließend Zeile für Zeile (von oben nach unten) ausgeführt/verarbeitet. Das hat zur Folge das man Funktionen auch ganz am Ende der Datei definieren und viel früher ausführen kann. Bei zB. Python müssen Funktionen usw vor dem Aufruf definiert werden.
    Wenn du aber Ergebnisse gewisser Abfragen vorher benötigst um zB "das was dem Client angezeigt wird" flexibel zu gestalten, musst du das natürlich früher tätigen... Dazu sei gesagt: PHP läuft Serverseitig, der Client kriegt davon nichts zu Gesicht, nur Ausgaben wie html kriegt der Client zu sehen.

    Worauf ich hinaus will:

    Leg dir eine gewisse Struktur zu, indem du Funktionen gesammelt an einem Ort in der Datei definierst, unnötige Leerzeilen weg lässt, klar erkennbar <?php und ?> vom restlichen HTML-Code absetzt (neue Zeile) und auch wenn es für PHP & HTML nicht zwingen erforderlich ist: Einrückungen setzen, das steigert das erkennen von "was gehört zusammen".
    ...wenn das Projekt größer werden und die Funktionen auch in anderen Scripts verwendet werden sollen, dann legst du eine extra Datei an die dann nur importiert wird. Wie das geht siehst du zum Beispiel hier: https://github.com/meigrafd/Sampl…r/_PHP/Webradio
    ...wenn du nicht willst das bei jedem Click auf einen Button/Link die ganze Seite neu geladen wird musst du auf JavaScript wechseln - wie es auch beim "Webradio" genutzt wird

    Für die GPIO Geschichte sähen native Funktionen zum Beispiel so aus: https://github.com/meigrafd/Sampl…o_steuerung.php
    Damit das funktioniert muss der "www-data" Benutzer, über den der Webserver läuft, in der Systemgruppe "gpio" sein... ist aber auch in besagter Anleitung (Grundlagen) beschrieben.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!