Letztes Mal hat eine Webanwendungsumgebung erstellt, indem PHP7.4 auf Apache2.4 kompiliert wurde. Dieses Mal werden wir jedoch weiterhin einen Datenbankserver erstellen. (⑅ • ᴗ • ⑅)
Der Datenbankserver kann vom Webserver selbst getrennt werden, diesmal ist es jedoch einfach. Daher erstellen wir zusammen mit dem Webserver MySQL für die Datenbank.
--Webserverprogramm: Apache 2.4.43 + PHP 7.4.6 + MySQL 8.0 --Client: Windows10 Pro
--Benutzer als root installiert (bei meiner Überprüfung handelt es sich um ein Administratorkonto namens admin, das von sudo von dort aus verarbeitet wird)
Andere erforderliche Pakete werden mit den Standardpaketbefehlen der Distribution (dnf, apt usw.) installiert und müssen nicht einzeln heruntergeladen werden.
Zum Herunterladen können Sie auf die offizielle Website zugreifen, von dort herunterladen und per FTP übertragen oder mit wget abrufen, wenn Sie die URL der Download-Datei kennen, die Erfassungsmethode jedoch weggelassen wurde.
MySQL in den Standardpaketbefehlen der Distribution ist häufig eine ältere oder kompatible MariaDB. Wenn Sie also eine explizite Version von MySQL einführen möchten, müssen Sie das Repository von der offiziellen MySQL herunterladen.
Wenden Sie das heruntergeladene Repository an und installieren Sie MySQL.
CentOS8.1
# dnf -y install mysql80-community-release-el8-1.noarch.rpm
# dnf -y install mysql-server
Im Fall von MySQL 8.0 ** unterstützt die Authentifizierungsinfrastruktur möglicherweise Hashwerte, und die auf Hashwerten basierende Authentifizierungsinfrastruktur ist möglicherweise standardmäßig aktiviert **. Es scheint jedoch, dass dies auch in PHP7 nicht unterstützt wird (ich habe nicht gehört, dass es in 7.4 noch unterstützt wird), und wenn Sie in PHP mit einem einfachen Passwort darauf zugreifen, funktioniert die Authentifizierung nicht. Daher muss /etc/my.cnf geändert werden (für CentOS 8.1 ist es in /etc/my.cnf /etc/my.cnf.d/mysql-default-authentication-plugin.cnf enthalten Bearbeiten)
openSUSE15.1. Ubuntu20.04
# vi /etc/my.cnf
CentOS8.1
# vi /etc/my.cnf.d/mysql-default-authentication-plugin.cnf
my.cnf oder mysql-default-authentication-plugin.cnf
default-authentication-plugin = mysql_native_Passwort ← "#Entfernen
# systemctl start mysqld
# systemctl enable mysqld
# systemctl status mysqld
Überprüfen Sie das MySQL-Protokoll nach dem Start von MySQL
# less -r /var/log/mysqld.log
Wenn zu diesem Zeitpunkt ** "[Hinweis] Ein temporäres Kennwort für root @ localhost: ~" generiert wird, wird das anfängliche Kennwort festgelegt **. Wenn nicht, ist es nicht gesetzt (MySQL 8.0 von CentOS 8.1 ist nicht gesetzt). Führen Sie die MySQL-Befehlszeile mit diesem Kennwort aus
python
[Kein MySQL-Anfangskennwort]
# mysql -u root
[MySQL-Anfangskennwort verfügbar]
# mysql -u root -p ← Geben Sie das ursprüngliche Passwort ein, um sich anzumelden
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '<MySQL-Root-Passwort(Kein Linux-Root-Passwort)>';
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Legen Sie hier das Passwort für den tatsächlichen Betrieb von MySQL fest. Beachten Sie also, dass root nicht ** Linux root ist, sondern ** root in MySQL **.
Wenn "Abfrage OK, 0 betroffene Zeilen (0,00 Sek.)" Ausgegeben wird, ist die Einstellung des MySQL-Root-Passworts abgeschlossen. Beenden Sie also mit exit.
Versuchen Sie nun, sich nach dem Einstellen mit dem MySQL-Root-Passwort anzumelden
# mysql -u root -p
Enter password:← Geben Sie das MySQL-Root-Passwort ein
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.17 Source distribution
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
In diesem Fall ist die MySQL-Root-Anmeldung erfolgreich. Oder Sie könnten es unten überprüfen
# mysqladmin ping -u root -p
Enter Password:← Geben Sie das MySQL-Root-Passwort ein
mysqld is alive
OK, wenn "mysqld lebt" steht
Da MySQL funktioniert hat, erstellen wir tatsächlich eine Datenbank mit Benutzern.
Melden Sie sich zuerst als MySQL-Root an.
# mysql -u root -p
Enter password:← Geben Sie das MySQL-Root-Passwort ein
mysql> CREATE DATABASE manutest CHARACTER SET utf8;
↑ Zeichencode UTF für Datenbank "manutest"-Erstellen Sie in 8
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| manutest |← Die erstellte Datenbank wird angezeigt
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
mysql> CREATE USER 'test'@'localhost' IDENTIFIED BY 'test0';
↑ Benutzername "test" mit Passwort "test0" erstellen
mysql> GRANT ALL ON manutest.* TO 'test'@'localhost';
↑ Benutzer "test" darf alle Funktionen für die Datenbank "manutest" verwenden.
Wenn keine Fehler vorliegen und "Abfrage OK, 0 Zeilen betroffen" angezeigt wird, wurden die Datenbank und der Benutzer erstellt.
** Wenn ein Kennwortrichtlinienfehler auftritt **
Wenn Sie eine Fehlermeldung erhalten, wenn Sie gegen die Kennwortrichtlinie verstoßen, können Sie den Richtlinienstatus anscheinend überprüfen und ändern.
mysql> SHOW VARIABLES LIKE 'validate_password%';
↑ Wenn es sich um einen leeren Satz handelt, gibt es keine Richtlinie. Wenn dies jedoch der Fall ist, wird dies zunächst der Fall sein
validate_password_Länge ist 8, validieren_password.Politik ist "MITTEL"
mysql> SET GLOBAL validate_password.length=4;
mysql> SET GLOBAL validate_password.policy=LOW;
↑ Jetzt können Sie zu Testzwecken ein Passwort mit bis zu 4 Zeichen oder ein einfaches Passwort festlegen.
mysql> SET GLOBAL validate_password.length=8;
mysql> SET GLOBAL validate_password.policy=MEDIUM;
↑ Bei der Rückkehr
Probieren wir nun aus, ob MySQL mit dem erstellten Testbenutzer und der Datenbank verwendet werden kann.
mysql> exit
Bye
# mysql -u test -p
Enter password:← Geben Sie das Passwort "test0" ein
(Unterlassung)
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| manutest |← Erfolgreich, wenn die erstellte Datenbank angezeigt wird
+--------------------+
2 rows in set (0.00 sec)
Jetzt erstellen wir eine Tabelle in der erstellten Datenbank und fügen Daten darin ein!
Dieses Mal erstellen wir diese Tabelle zum Testen. Tabellenname: ** testtb **
id | name | memo | |
---|---|---|---|
Schimmel | INT | VARCHAR(64) | VARCHAR(256) |
Erforderliche Attribute | PRIMARY KEY | NOT NULL | Anfangswert NULL |
Andere Attribute | AUTO_INCREMENT | - | - |
mysql> USE manutest;
mysql> CREATE TABLE testtb (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(64) NOT NULL, memo VARCHAR(256) DEFAULT NULL);
Query OK, 0 rows affected (0.11 sec)
mysql> SHOW TABLES;
+--------------------+
| Tables_in_manutest |
+--------------------+
| testtb |
+--------------------+
1 row in set (0.00 sec)
Nachdem Sie die Tabelle erfolgreich erstellt haben, geben Sie die Daten tatsächlich ein. In der Testtabelle testtb wird die ID automatisch nummeriert und der Name ist erforderlich. Geben Sie daher die folgenden Werte als Beispiel ein.
--id: (Wegen automatischer Nummerierung weggelassen) --name: test
mysql> INSERT INTO testtb (name, memo) VALUES ('Prüfung', 'Only for test.');
mysql> SELECT * FROM testtb;
+----+-----------+----------------+
| id | name | memo |
+----+-----------+----------------+
| 1 |Prüfung| Only for test. |
+----+-----------+----------------+
1 row in set (0.00 sec)
Die auf diese Weise registrierten Daten wurden in der Datenbank registriert, ohne verstümmelt zu werden ♪ Es ist ein Erfolg!
Nachdem ich die Installation und den Betrieb von MySQL ohne Probleme bestätigt habe, möchte ich MySQL endlich von PHP aus handhaben.
MySQL wird beendet und eine PHP-Seite erstellt.
Erstellen Sie zunächst ein empfangendes PHP, das die von POST mit PHP empfangenen Daten in der MySQL-Datenbank registriert! Vorher müssen Sie sicherstellen, dass Sie mit PHP eine Verbindung zu MySQL herstellen können (\ * ˘ᗜ˘ \ *;)
Erstellen Sie eine Verbindungsbestätigungsseite
# cd ~
# vi connect.php
connect.php
<?php
$dsn = 'mysql:dbname=manutest; host=127.0.0.1';
$usr = 'test';
$pass = 'test0';
try {
$db = new PDO($dsn, $usr, $pass);
print 'Connection successful.';
$db = NULL;
}
catch(PDOException $e){
die('Connect error : '.$e->getMessage());
}
?>
Verschieben wir dies an den Speicherort / usr / local / apache2 / htdocs / der Zielwebseite, die in [Apache-Installation] installiert ist (https://qiita.com/kazumi75kitty/items/daaf8ff8feb50ad04f41)!
# mv connect.php /usr/local/apache2/htdocs/
Da die PHP-Seite angeordnet ist, muss Apache nicht neu gestartet werden. Geben Sie daher zur Bestätigung https: // [IP-Adresse des Linux-Servers] /connect.php ein. Diesmal lautet die IP-Adresse des Linux-Servers 192.168.1.18. Greifen Sie also auf 192.168.1.18 / connect.php zu, indem Sie die URL nach https: ~ im Browser eingeben.
Wenn connect.php erfolgreich eine Verbindung herstellen kann, wird die obige Meldung ausgegeben, sodass das obige Bild zeigt, dass die Verbindung erfolgreich war! !!
Überprüfen Sie anschließend, ob die Daten registriert werden können. Erstellen Sie erneut eine Webseite.
Zunächst aus dem Anmeldeformular.
# vi test_form.html
test_form.html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Testseite- Test page</title>
</head>
<body>
<form method="POST" action="test_form.php">
<input type="text" name="name" />
<input type="text" name="memo" />
<input type="submit" value="Submit" />
</form>
</body>
</html>
Erstellen Sie als Nächstes PHP, das die vom Formular empfangenen Daten zur MySQL-Datenbank hinzufügt.
# vi test_form.php
test_form.php
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Testeingabe- Test insert</title>
</head>
<body>
<?php
function getDb(){
$dsn = 'mysql:dbname=manutest; host=127.0.0.1';
$usr = 'test';
$pass = 'test0';
try {
$db = new PDO($dsn, $usr, $pass);
$db->exec('SET NAMES utf8');
}
catch(PDOException $e){
die('Connect error : '.$e->getMessage());
}
return $db;
}
try {
$db = getDb();
$stt = $db->prepare('INSERT INTO testtb (name, memo) VALUES (:one, :two)');
$stt->bindValue(':one', $_POST['name']);
$stt->bindValue(':two', $_POST['memo']);
$stt->execute();
print $_POST['name'].' - '.$_POST['memo'].' : Insert OK.';
$stt = $db->query("SELECT * FROM testtb");
?>
<table border="1">
<?php
while($row = $stt->fetch(PDO::FETCH_ASSOC)){
?>
<tr>
<td><?php print $row['name']; ?></td>
<td><?php print $row['memo']; ?></td>
</tr>
<?php
}
?>
</table>
<?php
$db = NULL;
}
catch(PDOException $e){
die('Process error : '.$e->getMesssage());
}
?>
</body>
</html>
Verschieben Sie die beiden oben genannten Dateien an den Speicherort der Apache-Webseitendaten.
# mv test_form.* /usr/local/apache2/htdocs/
Versuchen Sie nun, mit Ihrem Browser auf https: // [IP-Adresse] /test_form.html zuzugreifen.
Fügen Sie die Zeichenfolgen entsprechend in die linke und rechte Form ein ... (vorzugsweise auf Japanisch) und drücken Sie Senden
Erfolgreich! Die eingegebenen Daten wurden an PHP gesendet und in der MySQL-Datenbank registriert. Lassen Sie es uns auch über die Befehlszeile überprüfen.
In PHP stellt der Benutzertest eine Verbindung zu einer Datenbank namens manutest her, sodass Sie sich auch mit test from a command bei MySQL anmelden können.
# mysql -u test -p
Enter password:← Geben Sie das Passwort "test0" ein
mysql> USE manutest;
mysql> SELECT * FROM testtb;
+----+-----------------+----------------+
| id | name | memo |
+----+-----------------+----------------+
| 1 |Prüfung| Only for test. |
| 2 |Pfannkuchen|will essen|
+----+-----------------+----------------+
2 rows in set (0.00 sec)
Es wurde richtig hinzugefügt! !! (\ * ˘ᗜ˘ \ *) ...: \ * ♡
Apache und PHP + MySQL wurden in diesem Muster häufig verwendet, sowohl in meiner bisherigen Berufserfahrung als auch in großen Unternehmen. Im Gegenteil, ich glaube, Java war knapp.
PHP ist billiger und offener als Javas kommerzielle Lizenz, daher denke ich, dass es für große Unternehmen und natürlich kleine und mittlere Einzelpersonen einfacher ist, es einzuführen.
Was die Kosten für die Einführung von Apache + PHP + MySQL unter Linux angeht, benötige ich keine Lizenz. Ich bin daher der Meinung, dass die Lohnkosten für das Gehalt und die Kosten für die Ausrüstung unabhängig vom verwendeten PC oder Raspelkuchen sind.
Wenn die Installationskosten 2500 Yen pro Stunde betragen, dauert der Aufbau eines neuen Webservers und Dateiservers 2 Stunden, und die Gesamtsumme beträgt 5000 Yen. Wenn eine neue Kombination aus gebrauchtem PC oder Raspeltorte und Festplatte oder SSD 30.000 bis 40.000 Yen kostet, betragen die Kosten für die Neuinstallation weniger als 50.000 Yen. Daher dauert es 6 Minuten, anstatt einen teuren Windows Server-Computer für 300.000 Yen zu kaufen. Ich bin der Meinung, dass IT-Lösungen auch für kleine und mittlere Unternehmen sowie für das individuelle Management bereichert werden.
Insbesondere im Fall von IoT wie Raspeye wird erwartet, dass es auf hybride Weise mit physikalischen Eigenschaften wie Sensoren kombiniert und in Daten umgewandelt werden kann. Daher möchte ich in Zukunft meinen Horizont erweitern und auf Qiita (˙꒳) setzen. ˙ᐢ)
Zusätzlich zum Erstellen eines Web-App-Servers mit PHP möchte ich auf das Erstellen eines Web-App-Servers mit Java (OpenJDK) eingehen.
Recommended Posts