php-to-python

Eine Variable mit PHP an Python übergeben

In dieser Anleitung wollen wir eine Variable mit PHP an Python übergeben. PHP ist der Standard in der Webentwicklung und eine sehr mächtige Programmiersprache. Möchte man allerdings auf seinem Server größere Aufgaben erledigen, bietet es sich an Python zu nutzen. Daher ist das Zusammenspiel der beiden Sprachen sehr interessant. Ich habe mir dazu ein kleines Projekt überlegt. Wir bauen uns einen Taupunkt-Rechner. Die Eingabe der Temperatur und Feuchtigkeit soll über eine Webseite erfolgen, die mit PHP arbeitet. Das Ausrechnen überlassen wir aber einem Python Skript, anschließend soll das Ergebnis auf der Webseite angezeigt werden.

Info: Für die Berechnung des Taupunkts ist Python nicht zwingend notwendig, sowohl PHP oder Js können das auch ohne Probleme. Das Projekt dient lediglich zur besseren Veranschaulichung für die Weitergabe von Variablen.

In dieser Anleitung werde ich nicht darauf eingehen, wie Raspberry Pi OS oder PHP installiert wird. Ich arbeite mit einem Windows 10 PC und einem Raspberry Pi 3 auf dem Raspberry Pi OS Lite läuft.

Wir benötigen:

  • Webserver mit PHP 7 oder höher
  • Python 2 oder 3
  • Texteditor wie Notepad++

01. Das Prinzip

Um eine Variable mit PHP an Python zu übergeben, benötigt es nicht viel. Unter Umständen können aber die Benutzerrechte des Systems Probleme bereiten. Bei meinem Raspberry Pi musste ich allerdings nichts zusätzlich einstellen.

1.1 PHP

Im PHP Code nutzen wir die Methode “post” zum Abschicken der Variable. Mit “escapeshellcmd” definieren wir einen “shell” Befehl, der uns das Python-Skript starten soll und am Ende heften wir noch eine Variable an. Das PHP-Skript wartet so lange, bis das Python-Skript abgearbeitet ist. Danach wandeln wir die Ausgabe des Python-Skripts mit “exec” in eine neue Variable um. In der Praxis sieht das so aus:

<!doctype html>
<html lang="de">
<head>
	<meta charset="utf-8">	
    <title>PHP to Python</title>			
</head>	
<body>
	<form action="#" method="post">
		<input type="text" name="demo" placeholder="Name"><br>		
		<input type='submit' name='submit' value='Submit'>
		<?php 
			$var1 = $_POST["demo"];
			
			$command = escapeshellcmd("sudo /usr/bin/python /home/pi/demo.py $var1");
			$result = exec($command);
			
			echo "<p>".$result."</p>";
		?>
	</form>
</body>
</html>

1.2 Python

Mit der Bibliothek “sys” fangen wir die Variable auf, die das PHP-Skript versendet hat. Wichtig dabei ist, dass die Variable definiert wird. In diesem Beispiel definieren wir die Variable “sys.argv[1]” als “string”. Mit “print” geben wir den neuen Wert aus, der vom PHP-Skript empfangen wird.

import sys

hello = str(sys.argv[1])
world = "Welcome " + hello

print (world)

02. Der Taupunkt-Rechner

Der Taupunkt gibt an, ab wann die Luftfeuchtigkeit kondensiert. Das kann gerade im Winter hilfreich sein, um Wände mit schlechter Dämmung zu identifizieren. Ist eine Wand kälter als die Taupunkttemperatur, so kondensiert die Luftfeuchtigkeit an dieser Stelle und es besteht Schimmelgefahr. Wir errechnen uns den Taupunkt aus der Raumtemperatur und der relativen Feuchte in Prozent.

php-to-python

2.1 PHP

Das Python-Skript arbeitet nur mit einem Punkt als Trennzeichen für Dezimalzahlen, daher ersetzen wir zuerst jedes Komma durch einen Punkt. Danach senden wir schon die zwei Werte an das Python-Skript.

<!doctype html>
<html lang="de">
<head>
	<meta charset="utf-8">	
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<meta name="author" content="Andreas Schmidt">
	<link href="css/style.css" rel="stylesheet">
    <title>Taupunkt Rechner</title>			
</head>	
<body>
	<div class="container">
		<div class="form">
			<h1>Taupunkt Rechner</h1> 
			<form action="#" method="post">
				<input type="text" name="temp" placeholder="Temp. °C"><br>
				<input type="text" name="humi" placeholder="r.F. %"><br>
				<input type='submit' name='submit' value='Berechnen'>
				<?php 
					$var1 = str_replace(",", ".", $_POST["temp"]);
					$var2 = str_replace(",", ".", $_POST["humi"]);
					
					$command = escapeshellcmd("sudo /usr/bin/python /home/pi/dewpoint.py $var1 $var2");
					$result = exec($command);
	
					if(isset($_POST['submit']) && !empty($result)) {
                        echo '<p class="message">Temp.: <b>' . str_replace(".", ",", $_POST["temp"]) . '</b>°C | r.F.: <b>' . str_replace(".", ",", $_POST["humi"]) . '</b>%</p>';						
						echo '<p class="message">Der Taupunkt liegt bei <b>' . str_replace(".", ",", $result) . '</b>°C</p>';
						echo '<p class="exit"><a href="/">✕</a></p>';
					}	
				?>
			</form>
		</div>
		<p class="wikipedia">Erfahre mehr über den <a href="https://de.wikipedia.org/wiki/Taupunkt">Taupunkt</a></p>
	</div>
</body>
</html>

2.2 Python

Bei unserem Taupunkt-Rechner arbeiten wir nur mit Zahlen, daher definieren wir dieses mal die Variablen als “float”. Die Rechnung könnte dir bekannt vorkommen, bei unserem Smarten Temperaturfühler mit dem”ESP8266″ wird der Taupunkt genauso berechnet.

#!/usr/bin/python
import sys
import math

temp = float(sys.argv[1])
humi = float(sys.argv[2])

a = float(17.67)
b = float(243.5)
alpha = (a * temp) / (b + temp) + (math.log(humi / 100))
dewpoint = round((b * alpha) / (a - alpha), 2)

print (dewpoint)

2.3 CSS

Natürlich soll unser neues Tool auch schick aussehen. Wir legen einen neuen Ordner an und nennen diesen “css”. Danach können wir folgenden Code in die “style.css” Datei kopieren.

body {
	background: #85c1e9;
	font-family: "Roboto", sans-serif;
}
a {
	text-decoration: none;
}
.container {
	position: relative;
	max-width: 480px;
	padding: 8% 0 0;
	margin: auto;
}
.form {
	position: relative;
	background: #FFFFFF;
	border: 0;
	border-radius: 6px;
	max-width: 360px;
	margin: 0 auto 100px;
	padding: 45px;
	text-align: center;
	box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.2), 0 5px 5px 0 rgba(0, 0, 0, 0.24);
}
h1 {	
	font-size: 24px;	
	margin: 0px 0px 22px 0px;	
}	
input[type=text] {
	background: #f2f2f2;
	width: 100%;
	border: 0;
	border-radius: 6px;
	margin: 0 0 15px;
	padding: 15px;
	box-sizing: border-box;
	font-size: 14px;
}
input[type=submit] {
	background: #85c1e9;
	width: 100%;
	border: 0;
	border-radius: 6px;
	padding: 15px;
	color: #FFFFFF;
	font-size: 14px;
	cursor: pointer;
	transition: 0.3s;
	margin: 0px 0px 30px 0px;
}
input[type=submit]:hover {	
	background: #46a2e0;	
}
.message {
	border: 2px solid #85c1e9;
	border-radius: 51px;
	padding: 15px;
	color: #85c1e9;
	font-size: 14px;
	margin: 6px 0px 0px 0px;	
}
.message a {
	color: #a4c8e0;
}  
.wikipedia {
	text-align: center;	
	margin: -50px 0px 0px 0px;	
	color: #FFFFFF;
	font-size: 14px;
}
.wikipedia a {
	color: #1a5276;
} 
.exit a {
	height: 25px;
	width: 25px;
	line-height: 25px;
	background-color: #f2f2f2;
	border-radius: 50%;
	display: inline-block;
	text-align: center;
	margin: 4px 0px 0px 0px;	
	color: #a3a3a3;	
	font-size: 14px;
}	

03. Download

Ich habe hier nochmal alle Files zusammengestellt, damit das Einrichten nochmal etwas schneller von der Hand geht. Ich hoffe, ihr habt genauso viel Spaß mit dem Projekt wie ich und jetzt wünsche ich euch gutes Gelingen.

zip-file-icon

artsblog-php-to-python-master.zip

Filesize: 0,1 mb
Related Posts