Deswegen will ich IMMER NOCH den QUELLTEXT sehen, den der Browser vom Server geliefert bekommt, nicht den TEXT, der Angezeigt wird! Denn was angezeigt wird, hat der Browser verstanden, was nicht, das eben nicht. Heißt aber nicht, dass es nicht im Quellcode ist. Bei mir geht das mit Rechtsklick, „Quelltext anzeigen“. (Bzw. auf Englisch...)
Mit php anzeigen, ob etwas aktiviert/deaktiviert ist
-
Clerico -
16. Juli 2018 um 23:27 -
Unerledigt
Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
-
-
Mit php anzeigen, ob etwas aktiviert/deaktiviert ist? Schau mal ob du hier fündig wirst!
-
Ihr seid zu schnell
Also, wenn ich die gerade eben geposteten einfachen codes als test.php statt test.html abspeichere, erhalte ich als Ausgabe im Webbrowser
test
Die Variable ist5test
bei diesem Quellcode klappt es aber weder bei .html noch .php
PHP
Alles anzeigen<!DOCTYPE html> <html lang="de"> <head> <meta charset="utf-8" /> <style> body { background-color: #3f48cc; background-image: url("http://minnieshouse/u-zim1/u-zim1.png"); background-size: auto; background-repeat: no-repeat; } </style> </head> <body> <?php if (file_exists('bl.txt')) { "<a href="bl-aus.php"><img src="http://minnieshouse/u-zim1/button/led an.png" width="75" height="75"/><$ } else { "<a href="bl-an.php"><img src="http://minnieshouse/u-zim1/button/led aus.png" width="25" height="25"/><$ } ?> </body> </html>
bei .php wird lediglich weißer Bildschirm ohne irgendetwas angezeigt.
Bei .html wird Folgendes angezeigt.
-
PHP
Alles anzeigen<!DOCTYPE html> <html lang="de"> <head> <meta charset="utf-8" /> <style> body { background-color: #3f48cc; background-image: url("http://minnieshouse/u-zim1/u-zim1.png"); background-size: auto; background-repeat: no-repeat; } </style> </head> <body> <?php if (file_exists('bl.txt')) { "<a href="bl-aus.php"><img src="led an.png" width="75" height="75"/></a>"; } else { "<a href="bl-an.php"><img src="led aus.png" width="25" height="25"/></a>"; } ?> </body> </html>
PHP
Alles anzeigen<!DOCTYPE html> <html lang="de"> <head> <meta charset="utf-8" /> <style> body { background-color: #3f48cc; background-image: url("http://minnieshouse/u-zim1/u-zim1.png"); background-size: auto; background-repeat: no-repeat; } </style> </head> <body> <!-- Passive Lichter --> <?php $filename = '/var/www/html/bl.txt'; if (file_exists($filename)) : ?> <!-- Oman --> <a href="bl-aus.php"><img style="position: absolute; top:455px; left:120px;" src="http://minnieshouse/u-zim1/button/led an.png" width="75" height="75"/></a> <!-- TV --> <a href="bl-aus.php"><img style="position: absolute; top:650px; left:335px;" src="http://minnieshouse/u-zim1/button/led an.png" width="75" height="75"/></a> <!-- Wein --> <a href="bl-aus.php"><img style="position: absolute; top:650px; left:745px;" src="http://minnieshouse/u-zim1/button/led an.png" width="75" height="75"/></a> <?php else : ?> <!-- Oman --> <a href="bl-an.php"><img style="position: absolute; top:455px; left:120px;" src="http://minnieshouse/u-zim1/button/led aus.png" width="75" height="75"/></a> <!-- TV --> <a href="bl-an.php"><img style="position: absolute; top:650px; left:335px;" src="http://minnieshouse/u-zim1/button/led aus.png" width="75" height="75"/></a> <!-- Wein --> <a href="bl-an.php"><img style="position: absolute; top:650px; left:745px;" src="http://minnieshouse/u-zim1/button/led aus.png" width="75" height="75"/></a> <?php endif; ?> <!-- Lampe --> <img style="position: absolute; top:420px; left:390px;" src="http://minnieshouse/u-zim1/button/licht aus.png" width="75" height="75"/> <!-- PIR --> <?php $filename1 = '/var/www/html/pir.txt'; if (file_exists($filename1)) : ?> <a href="pir-aus.php"><img style="position: absolute; top:650px; left:830px;" src="http://minnieshouse/u-zim1/button/pir an.png" width="75" height="75"/></a> <?php else : ?> <a href="pir-an.php"><img style="position: absolute; top:650px; left:830px;" src="http://minnieshouse/u-zim1/button/pir aus.png" width="75" height="75"/></a> <?php endif; ?> <!-- Leselampe --> <?php $filename2 = 'lese.txt'; if (file_exists($filename2)) : ?> <a href="lese-aus.php"><img style="position: absolute; top:255px; left:600px;" src="http://minnieshouse/u-zim1/button/led w.png" width="75" height="75"/></a> <?php else : ?> <a href="lese-an.php"><img style="position: absolute; top:255px; left:600px;" src="http://minnieshouse/u-zim1/button/led w aus.png" width="75" height="75"/></a> <?php endif; ?> <!-- Einstellungen --> <a href="einstellung.html"><img style="position: absolute; top:250px; left:765px;" src="http://minnieshouse/u-zim1/button/pc.png" width="150" height="150"/></a> <!-- zurueck --> <a href="http://minnieshouse/unten.html" target="_top"><img style="position: absolute; top:50px; left:25px;" src="button/zurueck.png" width="100" height="100"/></a> </body> </html>
-
Du musst deine doppelten Anführungszeichen im String escapen, denk mal drüber nach, wie der PHP Interpreter den Anfang und das Ende von Strings ermittelt...
Ich bin kein PHP-Experte, aber geht Ausgabe echt ohne echo?
-
- Offizieller Beitrag
Ich bin kein PHP-Experte, aber geht Ausgabe echt ohne echo?
Nö, geht se nich!
-
Es klappt!
Aber nur, wenn ich die Datei als .php benenne und nicht als .html!
Vielen Dank! Danke!
Ich mach mal weiter und habe sicher wieder Probleme und Fragen ...
Kann mir jemand erklären, warum ich, wenn ich php in html einbinde, das dann unter .php benennen muss?
-
- Offizieller Beitrag
Aber nur, wenn ich die Datei als .php benenne und nicht als .html!
Naja klar!
Kann mir jemand erklären, warum ich, wenn ich php in html einbinde, das dann unter .php benennen muss?
Steht das nicht in Deinem Buch? Dann kannste das wegwerfen!
-
Kann mir jemand erklären, warum ich, wenn ich php in html einbinde, das dann unter .php benennen muss
Das ist auf dem Server so eingestellt. Kannst Du an den Servereinstellungen nichts ändern, hilft auch der Eintrag
in der .htaccess
-
So, jetzt hat es wieder ne ganze Weile gut geklappt... ich konnte auf meiner Weboberfläche mit php ein Formularfeld machen (<form...>) und dann die Variable mit post an die pir-zeit.php senden. Die Variable soll die Zeit bestimmen, wie lange mein Nachtlicht/pir laufen soll, bevor es sich dann abschaltet.
In der pir-zeit.php wird also einiges gemacht:
- pir-zeit.py wird beschrieben. Da wird auch die Variable eingefügt in sleep($zeit) und nach Ablauf der Zeit wird pir.txt gelöscht.
- pir.txt wird erstellt. Diese Datei sagt der eigentlichen pir.py (die das Nachtlicht ist), dass sie laufen soll.
- pir.py wird gestartet.
- led-aus.py und unlink bl.txt spielen für mein Problem keine Rolle.
Problem:
Je nachdem wo ich die shell-exec-Befehle bei der pir-zeit.php hinpacke wird eines von beidem pir.py und pir-zeit.py nicht ausgeführt. Alle anderen Befehle werden egal wo sie stehen durchgeführt (also z.B. shell-exec led-aus.py) Immer das untere wird nicht ausgeführt:
- Steht pir.py unter pir-zeit.py, dann erhält pir-zeit.py seine passende variable und löscht nach dieser Zeit pir.txt - pir.py wird jedoch niemals ausgeführt.
- Steht pir-zeit.py unter pir.py dann erhält pir-zeit.py seine variable, wird aber scheinbar nie ausgeführt und löscht auch nicht pir.txt - pir.py wird jedoch ausgeführt.
Führe ich beide Programme per ssh gleichzeitig aus, funktioniert es: pir.py läuft, pir-zeit.py löscht pir.txt (manuell erstellt) nach manuell eingegebener $zeit und pir.py wird dadurch beendet.
Was mache ich bei der php falsch?
Folgenden Code habe ich geschrieben...
PHP
Alles anzeigen<?php $zeit = $_POST["zeit"]; $py = fopen("/var/www/html/pir-zeit.py", 'w'); fwrite($py, "import os import time time.sleep($zeit) os.remove(\"/var/www/html/pir.txt\")"); fclose($py); if (file_exists("/var/www/html/bl.txt")) : unlink("/var/www/html/bl.txt"); endif; $txt = fopen("/var/www/html/pir.txt", 'w'); fwrite($txt, "1"); fclose($txt); shell_exec ('sudo python /var/www/html/led-aus.py'); shell_exec ('sudo python /var/www/html/pir.py'); shell_exec ('sudo python /var/www/html/pir-zeit.py'); header("Location:einstellung.php"); ?> <?php $zeit = $_POST["zeit"]; $py = fopen("/var/www/html/pir-zeit.py", 'w'); fwrite($py, "import os import time time.sleep($zeit) os.remove(\"/var/www/html/pir.txt\")"); fclose($py); if (file_exists("/var/www/html/bl.txt")) : unlink("/var/www/html/bl.txt"); endif; $txt = fopen("/var/www/html/pir.txt", 'w'); fwrite($txt, "1"); fclose($txt); shell_exec ('sudo python /var/www/html/led-aus.py'); shell_exec ('sudo python /var/www/html/pir-zeit.py'); shell_exec ('sudo python /var/www/html/pir.py'); header("Location:einstellung.php"); ?>
-
In den Zeilen 9 und 41 klaffen riesige Sicherheitslücken.
-
Okay, das ist schlecht, warum? Ich weiß zur Zeit jedoch keinen anderen Weg, wie ich pir.py nach einer auf der Website (nicht im Internet verfügbar) eingetragenen Zeit beenden kann. Soweit bin ich noch nicht, aber vielleicht kannst du mir ja den Code dafür sagen - ich kann es halt nur über diese Umwege...
Für mich wäre aber auch für das Verständnis interessant: Warum funktioniert der Umweg nicht?
pir.py:
Code
Alles anzeigenimport RPi.GPIO as GPIO import time import Adafruit_WS2801 import Adafruit_GPIO.SPI as SPI import os.path import sys SENSOR_PIN = 23 GPIO.setmode(GPIO.BCM) GPIO.setup(SENSOR_PIN, GPIO.IN) SENSOR_PIN2 = 24 GPIO.setmode(GPIO.BCM) GPIO.setup(SENSOR_PIN2, GPIO.IN) PIXEL_COUNT = 24 SPI_PORT = 0 SPI_DEVICE = 0 pixels = Adafruit_WS2801.WS2801Pixels(PIXEL_COUNT, spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE), gpio=GPIO) filename = "/var/www/html/pir.txt" if (os.path.isfile(filename)): def lights(order='up', mode='on'): if (os.path.isfile(filename)): start = 0 stop = pixels.count() direction = 1 if order == 'down': start = 23 stop = -1 direction = -1 hue1 = 0 hue2 = 0 hue3 = 0 if mode == 'on': hue1 = 40 hue2 = 40 hue3 = 0 for i in range(start, stop, direction): pixels.set_pixel(i, Adafruit_WS2801.RGB_to_color(hue1, hue2, hue3)) pixels.show() time.sleep(0.05) else: print('Ende') sys.exit(0) def up(channel): print('Lia kommt zu uns') pixels.clear() lights() time.sleep(45) lights(mode='off') def down(channel): print('Lia geht in ihr Bett') pixels.clear() lights(order='down') time.sleep(45) lights(order='down', mode='off') if (os.path.isfile(filename)): try: GPIO.add_event_detect(SENSOR_PIN , GPIO.RISING, callback=up) GPIO.add_event_detect(SENSOR_PIN2 , GPIO.RISING, callback=down) while True: time.sleep(0.001) except KeyboardInterrupt: print "Beende..." pixels.clear() GPIO.cleanup() else: print('ende') sys.exit(0)
-
Deine Lösung über irgendwelche Dateien werde ich nicht weiter unterstützen - dazu also kein Kommentar von mir.
Sicherheitslücke deshalb, weil du die vom User übergebenen POST Daten nirgends prüfst. Selbes Prinzip wie bei einer SQL injection. Stell dir als vergleichsweise harmlosen Inhalt "1); print('Hacked!'" vor...
-
hm, okay, wollte die Eingabe eh auf 1 Zeichen/Zahl reduzieren, sobald es klappt. Hilft das, Linus oder welche Prüfung wäre da nötig?
Ich merke wieder mal, das ausgeliehen php-Buch ist nicht soooo gut. Gibt's Empfehlungen von euch für php und Python?
An die anderen: habt ihr eine Idee?
- Was ist mein Fehler bei der php?
- gibt's ne Möglichkeit das über die pir.py direkter auszuschalten, wenn ich im Webserver die Zeit angebe?
Vielen Dank!!!
-
Ich würde als Validierung der Eingabe versuchen, sie als positive Zahl zu interpretieren. Geht das schief, wars Murks.
-
- Offizieller Beitrag
Gibt's Empfehlungen von euch für php
http://php.net/manual/en oder deutsch http://php.net/manual/de
-
hm, okay bin, weil ich das Ganze eh etwas erweitere und komplexer mache, dabei alles handsamer mit nur noch einer python-datei statt 20 usw. zu versuchen. (Bin auch grad an neuen Büchern )
Aber alles scheitert bei mir noch immer an dem Thema: etwas über ein Textfeld (html/css/php) einzugeben bzw. Vordefinierte Werte dort anzuklicken und diese dann als Variablen in einer bestehenden Python-Datei zu ändern.
Kann mir da keiner helfen?
-
- Offizieller Beitrag
Komplexer? Dann mach doch gleich alles mit Python und such mal nach Bottle, Tornado oder Sanic (der heiße Scheiß wie noisefloor schrieb)!
-
Hallo,
ZitatAber alles scheitert bei mir noch immer an dem Thema: etwas über ein Textfeld (html/css/php) einzugeben bzw. Vordefinierte Werte dort anzuklicken und diese dann als Variablen in einer bestehenden Python-Datei zu ändern.
Wirf' PHP weg und setz' alles mit Python um, dann hast du das Problem nicht. Zusätzich zur Liste von hyle sollte noch Flask erwähnt werden, weil das zusammen mit Django wohl das meistgenutze Webframework für Python ist.
hyle: aber der ganz "heiße Scheiß" ist Quart, ein Flask-Clone, welcher auf ASGI statt WSGI setzt. Wenn du das nutzt, dann bist du soweit vorne, das glaubst du gar nicht
Gruß, noisefloor
-
wenn ich jetzt trotzdem noch dabei bleibe, würde es dann übertragen auf meinen Code damit funktionieren? (Bin die ganze Woche über Pc-los)
PHP<?php $l = 1.5; $b = 0.8; $result = array(); exec("/home/pi/rechteck.py $l $b", $result); echo "<p>Flächeninhalt: ", $result[0]; echo "<p>Umfang: ", $result[1]; ?>
Python#!/usr/bin/python3 # Datei /home/pi/rechteck.py import sys; l = float(sys.argv[1]); b = float(sys.argv[2]); print(l*b); print((l+b)*2);
Von der Seite
-
Hallo,
der Python-Code sollte funktionieren, zum PHP kann ich nichts sagen.
Die Semikolons am Zeileende sind bei Python überflüssig -> weg damit.
Gruß, noisefloor
-
Jetzt mitmachen!
Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!