Webstation, MariaDB10, PHP

Status
Für weitere Antworten geschlossen.

EuroPC

Benutzer
Mitglied seit
05. Jan 2020
Beiträge
133
Punkte für Reaktionen
15
Punkte
18
Hallo zusammen,

ich hoffe mal, dass ich im richtigen Unterforum schreibe:

Also ich habe auf meiner DS218+ die Webstation mit MariaDB10 und PHP 7.2.2 und PHP 5.6.40 installiert.
PHPMyAdmin 4.4.0.1 ist ebenfalls mit dabei.

Auf dem Raspi habe ich mir ein Notdienstschild geschrieben (Raspbian Buster, Apache, MySQL, PHP), welches sich 2x täglich via http Daten aus dem Internet holt und anzeigt.
Damit das Ganze ausfallsicher ist, benötige ich die Datenbank.
Als Backend sind Nginx und Apache 2.4 installiert.

Nun mein Problem. Das Ganze funktioriert auf der Diskstation nicht.
Weder mit Apache, noch Nginx.

Seit ich in der Webstation via "Kern"
mysqli.default_socket /run/mysqld/mysqld10.sock /run/mysqld/mysqld10.sock
und
mysqli.default_port 3307 3307
gesetzt habe, lädt das Skript ewig. Fehler 504 "Bei der Verarbeitung ... ist ein Fehler aufgetreten".
Aus Ordnungsgründen habe ich die Skripte in einen Unterornder von "web" gepackt.

Dabei ist der Default- Port von MariaDB 3307 und als Sockel wird auch "/run/mysqld/mysqld10.sock" angezeigt.
Bevor ich diese Änderungen gemacht habe, gab es wenigstens Fehlermeldungen (die mich zu dieser Anpassung bewegt haben).
Schalte ich auf PHP5.6 zurück, so meldet PHP nämlich (genau so wie php 7 ohne Anpassung)
"Warning: mysqli::mysqli(): (HY000/2002): No such file or directory in /volume1/web/notdienst/getvars.php on line 5 Warning: mysqli::query(): Couldn't fetch mysqli in /volume1/web/notdienst/getvars.php on line 8 Fehler beim Lesen der Variablen-Tabelle"

Ein Auszug aus besagter Datei anbei:

<?php

function wobinich($host,$user,$pwd,$db)
{
$mysqli = new mysqli($host,$user,$pwd,$db)
or die ("Fehler bei Herstellung der Verbindung: ".mysqli_connect_error());

$temp = $mysqli->query("SELECT * FROM tblVariablen ORDER BY WLAN DESC;")
or die ("Fehler beim Lesen der Variablen-Tabelle");
$knownssids = array();
$ergebnis = "UNBEKANNT";
while ($objekt = $temp->fetch_object())
...?>

Ich danke schon mal im Voraus für eure Hilfe,

EuroPC
 

EuroPC

Benutzer
Mitglied seit
05. Jan 2020
Beiträge
133
Punkte für Reaktionen
15
Punkte
18
Schon mal so viel:

Warum auch immer. Mit Nginx und PHP 7.2 läuft es. Auch wenn es sehr lange lädt.
Unter "Erweitert" habe ich mysqli und auch sockets aktiviert.

Nun fehlt noch sie simplexml- Schnittstelle, welche Synology wohl weggelassen hat.
Kann mur jemand beim "Unzug" nach Docker helfen? Dort sollte es dann mit einem frischen Linux laufen, hoffe ich.

Bei Docker sehe ich einige Images, habe aber nur 4 GB Ram auf der Diskstation.


Danke, EuroPC
 

MikeZulu

Benutzer
Mitglied seit
04. Mai 2016
Beiträge
101
Punkte für Reaktionen
2
Punkte
24
Hi EuroPC

Du brauchst die Webstation nicht umzukonfigurieren, am besten alles rückgängig machen.

Mit dem richtigen Aufruf kannst Du mdb5 und mdb10 auf dem gleichen system verwenden.

Hier das php-Beispiel (php 7) für den Aufbau der Verbindung:

function connectDB()
{
$this->handle = new mysqli($this->dbHost, $this->dbUser, $this->dbPswd, $this->dbName, intval($this->dbPort));

if(!$this->handle) {
die(mysqli_connect_error());
}
}


Ich verwende diesen Code (innerhalb einer eigenen DB-Klasse) für alle meine Web-Projekte.
Einfach die $this-> Variablen durch die einzelnen Werte ersetzen, dann sollte es funzen.
 

EuroPC

Benutzer
Mitglied seit
05. Jan 2020
Beiträge
133
Punkte für Reaktionen
15
Punkte
18
Servus,
zunächst sorry für die späte Antwort.
Aber fehlt dann nicht immer noch die simplexml- Schnittstelle?

Oder habe ich die MariaDB5 dabei?

Danke,
EuroPC
 
Zuletzt bearbeitet:

MikeZulu

Benutzer
Mitglied seit
04. Mai 2016
Beiträge
101
Punkte für Reaktionen
2
Punkte
24
xml-Dokumente lesen und schreiben kann man einfach über die DomDocument-Klasse siehe entsprechende PHP-Dokumentation. simplexml benötige ich nicht für das lesen und schreiben meiner xml-Dokumente.

Mit xml-Dateien arbeite ich immer über die DomDocument-Klasse.

MariaDB 5 muss über das Paket-Zentrum einfach installiert werden (wie MariaDB10) und dann kann man die Verbindung über den Port 3306 (MDB5) oder Port 3307 (MDB10) herstellen.
 

EuroPC

Benutzer
Mitglied seit
05. Jan 2020
Beiträge
133
Punkte für Reaktionen
15
Punkte
18
Ich brauche XML eigentlich nur zum Leseneiner Quelldatei
$xml= simplexml_load_file($url);

Sehe ich es richtig, dass ich für DomDocument keine weiteren Extras benötige?
 

MikeZulu

Benutzer
Mitglied seit
04. Mai 2016
Beiträge
101
Punkte für Reaktionen
2
Punkte
24
ja, eine entsprechende Klasse könnte z.B. so aussehen:

<?php
/*
XML-Klasse
*/
class XML
{
/**
Speichern einer XML-Datei
*/
function saveXML($infoTyp, $arrDaten, $datei)
{
/* Erstellen eines neuen DOM-Trees */
$domTree = new DOMDocument('1.0', 'UTF-8');
$domTree->formatOutput = true;

/* Erstellen des Root-Elements und zu DOM-Tree hinzufügen */
$xmlRoot = $domTree->appendChild($domTree->createElement($infoTyp));

/* Auslesen der Informationen aus arrDaten und erstellen xml Struktur */
foreach($arrDaten as $key => $wert) {
$xmlRoot->appendChild($domTree->createElement($key, $wert));
}

/* Speichern der XML-Daten */
return $domTree->save($datei);
}

/**
Lesen einer XML-Datei
*/
function lesenXML($datei) {
$dom = new DOMDocument;
if (file_exists($datei)) {
$dom->load($datei);

if (!$dom) {
die('XMLERR-ID0001: Die XMLDatei '.$datei.' kann nicht geladen werden oder ist nicht vorhanden!');
}

$xml = simpleXML_import_dom($dom) or die('XMLERR_ID0002: Das XML DOM-Objekt für '.$datei.' kann nicht erstellt werden!');

return $xml;
}
}
}
?>
 

EuroPC

Benutzer
Mitglied seit
05. Jan 2020
Beiträge
133
Punkte für Reaktionen
15
Punkte
18
Hallo MikeZulu,

Super. Da muss ich mich etwas reinfuxen. Ist etwas mehr als mein simple xml-Statement.
Im Programm wird eine xml Datei via Internet geladen und deren Inhalte dann in die Datenbank gepackt.

In etwa so:
$xml = simplexml_load_file($url);
if(!$xml)
{
foreach ($xml->notdienst as $dienst)
{
$datum = (string)$dienst->datum;
usw.

Dann folgt ein $sqlstr ="INSERT INTO ".$mysql_table." (wochentag,datum,...
mit $ergebnis = $mysqli->query($sqlstr);
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat