Logo

http://www.gdra.de - Projektseite

RaspberryPi, BananaPi, Programmierung, Let's Play

InfoPi - Statusübersicht für den Pi
verfasst am 03.10.2019 in Programmierung: InfoPi

InfoPi ist mein neues Projekt. Dieses verfolgt die Absicht, wichtigste Informationen (wie z.B. Temperatur, Auslastung, Speicher) über die Pi in einer Weboberfläche darzustellen. Ich selber besitze mehrere verschiedene Pi's (u.a. BananaPi M1, RaspberryPi 3B+, RaspberryPi 4) und diese haben auch verschiedene Aufgaben. Ich habe bisher kein geeignetes Programm gefunden, daher programmiere ich selber eines. Dieses werde ich auch kostenlos zur Verfügung stellen, sobald es die wichtigsten Grundfunktionen hat.

Aktuell ist es schon möglich, den freien Speicher aller angeschlossen Geräte anzuzeigen (wichtig für Dateiserver), dass sieht im Moment so aus:
Bild

Es entwickelt sich Stück für Stück. Mit dem Ziel der Version 0.10 (Auslastung, Speicher, nutzbare Oberfläche) werde ich das Programm hier zur Verfügung stellen. Weitere Informationen folgen.



eigener Kurz-URL-Dienst
verfasst am 24.09.2019 in Programmierung: php

Was ist die Idee dahinter? Ganz einfach, man möchte sich sehr lange URL's einfach mal abkürzen. Im Idealfall kann man sich die Kurz-URL-Links so gestalten, dass man sich diese einfach merken kann.

Was braucht man dazu?
- eine Domain
- einen Server oder Hoster mit php
- ggf. eine MySQL-Datenbank
- ein wenig Zeit

Getestet ist das ganze mit php7.3, sollte auch mit php5.6 funktionieren.

Als erstes benötigt man eine Ansicht zum erstellen, nennen wir sie "url.html".

<html>
        <head>
        </head>
        <body>
                <table align="center">
                        <tr>
                                <td><input type="text" id="link" size="64"></td>
                                <td><input type="button" value="URL erstellen" onclick="url()"></td>
                        </tr>
                        <tr>
                                <td align="center" colspan="2"><br/><br/><u><b>URL:</u></b> <input type="text" id="url" onmouseover="select();" size="64" readonly></td>
                        </tr>
                </table>
        </body>
</html>

Nun haben wir erstmal eine Ansicht, mit der man arbeiten kann. Oben schreibt man die komplette URL rein, unten soll dann der Kurzlink angezeigt werden.
Als nächste benötigen wir ein Javascript, welches die Anfrage weiter gibt und die Antwort erwartet.

<script>
        function url()
                {
                        var req = null;
                        try
                                {
                                        req = new XMLHttpRequest();
                                }
                        catch (ms)
                                {
                                        try
                                                {
                                                        req = new ActiveXObject("Msxml2.XMLHTTP");
                                                }
                                        catch (nonms)
                                                {
                                                        try
                                                                {
                                                                        req = new ActiveXObject("Microsoft.XMLHTTP");
                                                                }
                                                        catch (failed)
                                                                {
                                                                        req = null;
                                                                }
                                                }
                                }

//"&" umformen, macht ein wenig Probleme beim übertragen
                        var amp = document.getElementById("link").value;
                        var anzahl = amp.split("&").length-1;
                        for (i=0;i<anzahl;i++)
                                {
                                        amp = amp.replace("&","-Ampersand-");
                                }
                        req.open("GET","url.php?link="+amp,true);
                        req.onreadystatechange = function()
                                {
                                        switch(req.readyState)
                                                {
                                                        case 4:
                                                                if (req.status == 200)
                                                                        {
//deine.url ersetzen
                                                        document.getElementById("url").value = "http://deine.url/?id="+req.responseText;
                                                                        }
                                                        break;
                                                        default:
                                                                return false;
                                                        break;
                                                }
                                }
                        req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
                        req.send(null);
                }
</script>

Jetzt ist das html erstmal fertig. Jetzt kommt das php, hier die "url.php", zum Einsatz. Ich habe mich für eine Variante mit MySQL-Datenbank im Hintergrund entschieden.
Die Datenbank besteht aus 3 Spalten: id, link, url

<?php

        define("SQL_HOST","MySQL-Server"); 
        define("SQL_USER","MySQL-Nutzer");
        define("SQL_DATABASE","MySQL-Datenbank");
        define("SQL_PASS","MySQL-Passwort"); 

        function sql($abfrage)
                {
                        return mysqli_query(mysqli_connect(SQL_HOST,SQL_USER,SQL_PASS,SQL_DATABASE),$abfrage);
                }
                
        function sql_assoc($abfrage)
                {
                        return mysqli_fetch_assoc(sql($abfrage));
                }

        function sql_num($abfrage)
                {
                        return mysqli_num_rows(sql($abfrage));
                }

        function sql_assign($abfrage,$wert)
                {
                        $abfrage = sql_assoc($abfrage);
                        return $abfrage[$wert];
                }
                
        function zahl($var)
                {
                        return preg_match("=^[0-9]+$=i",$var);
                }
                
        function sec_url($kb,$gb,$sz,$z,$u=0)
                {
                        if (!zahl($kb) or !zahl($gb) or !zahl($sz) or !zahl($z) or !zahl($u))
                                {
                                        return false;
                                }
                        else
                                {
                                        $url = array();
                                        $var["kb"] = array("a","b","c","d","e","f","g","h","i","j","k","l","m","n",
                                                                                "o","p","q","r","s","t","u","v","w","x","y","z");
                                        $var["gb"] = array("A","B","C","D","E","F","G","H","I","J","K","L","M","N",
                                                                                "O","P","Q","R","S","T","U","V","W","X","Y","Z");
                                        $var["sz"] = array("_","-");
                                        $var["z"] = array("1","2","3","4","5","6","7","8","9","0");
                                        for ($a=0;$a<$kb;$a++)
                                                {
                                                        $url[] = $var["kb"][rand(0,count($var["kb"])-(($u==1) ? 1 : 4))];
                                                }
                                        for ($a=0;$a<$gb;$a++)
                                                {
                                                        $url[] = $var["gb"][rand(0,count($var["gb"])-(($u==1) ? 1 : 4))];
                                                }
                                        for ($a=0;$a<$sz;$a++)
                                                {
                                                        $url[] = $var["sz"][rand(0,count($var["sz"])-(($u==1) ? 1 : 2))];
                                                }
                                        for ($a=0;$a<$z;$a++)
                                                {
                                                        $url[] = $var["z"][rand(0,count($var["z"])-1)];
                                                }
                                        $var = array();
                                        shuffle($url);
                                        for ($a=0;$a<count($url);$a++)
                                                {
                                                        $url_ret .= $url[$a];
                                                }
                                        $url = array();
                                        return $url_ret;
                                }
                }
                
        if (isset($_GET["link"]))
                {
//3-fache Prüfung ob Kurzlink eventuell existiert, verschiedene Variablen
                        $_GET["link"] = str_replace("-Ampersand-","&",$_GET["link"]);
                        $sec_url = sec_url(3,3,1,1,1);
                        if (sql_num("SELECT * FROM `url` WHERE `url` = '".$sec_url."'") > 0)
                                {
                                        $sec_url = sec_url(3,2,1,2,1);
                                        if (sql_num("SELECT * FROM `url` WHERE `url` = '".$sec_url."'") > 0)
                                                {
                                                        $sec_url = sec_url(2,2,1,3,1);
                                                }
                                }
//Prüfung ob der selbe Link schon existiert um doppelte Einträge zu vermeiden wird der alte Kurzlink ausgelesen
                        $da = sql_assign("SELECT `url` FROM `url` WHERE MD5(`link`) = '".md5($_GET["link"])."'","url");
                        if ($da == "")
                                {
                                        sql("INSERT INTO `url` (`link`,`url`) VALUES ('".mysql_real_escape_string($_GET["link"])."','".$sec_url."')");
                                        $da = sql_assign("SELECT `url` FROM `url` WHERE MD5(`link`) = '".md5($_GET["link"])."'","url");
                                }
                        echo $da;
                }
        else
                {
                        echo "Anweisung nicht verstanden.";
                }

?>

Damit wäre die Möglichkeit zur Erstellung von Kurz-URL-Links fertig. Jetzt muss man diese nur noch auslesen. Dafür brauchen wir eine "index.php" welche wir mit "?id=" ansprechen können.

<?php

        define("SQL_HOST","MySQL-Server"); 
        define("SQL_USER","MySQL-Nutzer");
        define("SQL_DATABASE","MySQL-Datenbank");
        define("SQL_PASS","MySQL-Passwort"); 

        function sql($abfrage)
                {
                        return mysqli_query(mysqli_connect(SQL_HOST,SQL_USER,SQL_PASS,SQL_DATABASE),$abfrage);
                }
                
        function sql_assoc($abfrage)
                {
                        return mysqli_fetch_assoc(sql($abfrage));
                }

        function sql_assign($abfrage,$wert)
                {
                        $abfrage = sql_assoc($abfrage);
                        return $abfrage[$wert];
                }
                
        if (isset($_GET["id"]))
                {
                        $da = sql_assign("SELECT `link` FROM `url` WHERE MD5(`url`) = '".md5($_GET["id"])."'","link");
                        if ($da == "")
                                {
//Fehlerseite das Link nicht da ist
                                        header("Location: http://deine.url/404");
                                }
                        else
                                {
                                        header("Location: ".$da);
                                }
                }
        else
                {
//Fehlerseite das keine Anfrage bzgl. Kurzlink angegeben wurde (?id= fehlt)
                        header("Location: http://deine.url/404");
                }
                
?>

Das wars im Prinzip schon. Funktioniert sehr gut, probiert es einfach mal aus.

Das Script zum downloaden:



sichere Passwörter mit php
verfasst am 22.09.2019 in Programmierung: php

Jeder kennt das, man programmiert, macht eine neue Datenbank und möchte ein sicheres Passwort vergeben, aber sich jedes mal eines ausdenken, oder gar immer das selbe vergeben? Nein, das ist keine Option. Daher einfach einen kleinen Generator bauen und mit php ist das sehr einfach.

<?php

        function sec_pass($kb,$gb,$sz,$z)
                {
                        $pass = array();
// Variablen definieren, Kleinbuchstaben, Großbuchstaben, Zahlen und Sonderzeichen
                        $var["kb"] = array("a","b","c","d","e","f","g","h","i",
                                                "j","k","l","m","n","o","p","q","r","s","t",
                                                "u","v","w","x","y","z","ä","ö","ü");
                        $var["gb"] = array("A","B","C","D","E","F","G","H","I",
                                                "J","K","L","M","N","O","P","Q","R","S","T",
                                                "U","V","W","X","Y","Z","Ä","Ö","Ü");
                        $var["sz"] = array("!","§","%","/","(",")","=","{","[","]","}","*","+","-","_",".",",","<",">","ß");
                        $var["z"] = array("1","2","3","4","5","6","7","8","9","0");
// jetzt alles gut per Zufall entscheiden lassen
                        for ($a=0;$a<$kb;$a++)
                                {
                                        $pass[] = $var["kb"][rand(0,count($var["kb"])-1)];
                                }
                        for ($a=0;$a<$gb;$a++)
                                {
                                        $pass[] = $var["gb"][rand(0,count($var["gb"])-1)];
                                }
                        for ($a=0;$a<$sz;$a++)
                                {
                                        $pass[] = $var["sz"][rand(0,count($var["sz"])-1)];
                                }
                        for ($a=0;$a<$z;$a++)
                                {
                                        $pass[] = $var["z"][rand(0,count($var["z"])-1)];
                                }
                        $var = array();
// jetzt alles gut durchschütteln
                        shuffle($pass);
                        for ($a=0;$a<count($pass);$a++)
                                {
                                        $pass_ret .= $pass[$a];
                                }
                        $pass = array();
                        return $pass_ret;
                }

        echo sec_pass(12,6,2,12); // ergibt ein Passwort mit 12 Kleinbuchstaben, 6 Großbuchstaben, 2 Sonderzeichen, 12 Zahlen

?>


Die Passwörter gut abspeichern, diese kann man sich nicht merken. Die Länge ist variabel, ebenso die Anzahl der jeweiligen Komponenten. Probiert euch aus.


InfoPi - Statusübersicht für den Pi

eigener Kurz-URL-Dienst

sichere Passwörter mit php

xapf.de

Impressum

Allgemein (3)

Programmierung (3)
~~> InfoPi (1)
~~> php (2)

[+] Oktober 2019 (1)

[+] September 2019 (2)

[+] August 2019 (1)

[+] Juli 2019 (2)

Datenschutzerklärung

Impressum

xapf.de

©2004-2019 Peter Höche | http://www.gdra.de | Version: 2019-1.02 | Impressum | Datenschutz