PHP7 Erweiterung und Treiber für MongoDB installieren

Für den Zugriff von PHP7 auf eine MongoDB 3.2.10 Datenbank braucht man einen Client Treiber. Die Installation unter Ubuntu Server 16.04 LTE möchte ich hier beschreiben.

1. Pakete installieren

sudo apt install php-pear php7.0-dev

2. Treiber MongoDB installieren

sudo pecl install mongodb

Quelle:Github

Handbuch

3. Konfigurationsdatei erstellen

sudo sh -c 'echo "extension=mongodb.so" > /etc/php/7.0/mods-available/mongodb.ini'

4. Konfiguration aktivieren

sudo phpenmod mongodb

5. Funktion prüfen

php -i |grep mongodb

Jetzt sollte der MongoDB Treiber in PHP geladen werden.

Hier ein PHP Beispiel für den Verbindungsaufbau.

<?php
$manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");
 
$keyword = "dvd";
$filter = ['$text' => ['$search' => $keyword]];
$options = ['limit' => 3];
 
$query = new MongoDB\Driver\Query($filter, $options);
$cursor = $manager->executeQuery('mydb.search', $query);
$result = $cursor->toArray();
 
var_dump($manager);
print_r($result);
?>

Jetzt hat man den Treiber für PHP installiert. Für die Entwicklung ist der Treiber sehr Grundlegend. Mit einer Erweiterung ist die Entwicklung sehr viel einfacher.

6. Composer Installieren

Auf der Seite von Composer gibt es ein kurze Anleitung wie man den Downloader „composer-setup.php“ verwendet und installiert.

// Download installer
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
 
// Check HASH value from download
php -r "if (hash_file('SHA384', 'composer-setup.php') === 'e115a8dc7871f15d853148a7fbac7da27d6c0030b848d9b3dc09e2a0388afed865e6a3d6b3c0fad45c48e2b5fc1196ae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
 
// Composer installation and download
php composer-setup.php --install-dir=/path/
 
// Delete setup files
php -r "unlink('composer-setup.php');"

Download

7. Composer Erweiterung installieren

Jetzt kann man mit dem Composer die MongoDB Erweiterung installieren.

php composer.phar require "mongodb/mongodb=^1.1.0"

Quelle, Releases

8. Composer Erweiterung verwenden

<?php
// This path should point to Composer's autoloader
require 'vendor/autoload.php';
 
$client = new MongoDB\Client("mongodb://localhost:27017");
$collection = $client->db->collection;
 
$result = $collection->find(['name' => 'DVD']);
 
foreach ($result as $entry) {
    echo $entry['_id'], ': ', $entry['name'], "\n";
}
 
?>

Dokumentation

Geschwindigkeit von PHP mit MySQL Sockets optimieren

In Ubuntu 16.04 ist die Version MySQL 5.7 und PHP7 enthalten. Vielen Anwendungen verwenden für die Kommunikation von PHP zu MySQL das Netzwerk über die Adresse 127.0.0.1 (localhost). Läuft der MySQL Server auf dem gleichen System wie die PHP Anwendung, dann gibt es auch die Möglichkeit der Kommunktion über eine Unix Socket Verbindung.

Die MySQL Socket befindet sich unter /var/run/mysqld/mysqld.sock. Prüfen kann es mit diesem Kommando.

netstat -nl |grep mysql

MySQL 5.7 ermöglicht die Authentifizierung per Netzwerk oder Socket (Plugin).

Um einen Benutzer (user) mit einem Kennword (password) den Zugriff per Netzwerk (localhost) zu erlauben, ist das Kommando notwendig.

CREATE USER 'user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Der Zugriff per MySQL Socket ist ohne Kennwort möglich. Der Apache Server läuft in Ubuntu unter dem Benutzer ‚www-data‘.

CREATE USER 'www-data'@'localhost' IDENTIFIED WITH auth_socket;

Jetzt müssen wir dem Benutzer noch die notwendigen Rechte geben. Hier ein Beispiel für alle Rechte (ALL) auf allen Datenbanken (%) und Tabellen (*) zu gewähren.

GRANT SELECT ON `mysql`.* TO 'www-data'@'localhost';
GRANT ALL PRIVILEGES ON `%`.* TO 'www-data'@'localhost';

Eine höhere Sicherheit gibt es, wenn der Benutzer (www-data) nur Zugriff auf die Datenbank (database) mit bestimmten Kommandos (SELECT, INSERT, usw.) erhält.

GRANT SELECT, INSERT, UPDATE, DELETE PRIVILEGES ON 'database'.* TO 'www-data'@'localhost';

Jetzt müssen die Benutzerrechte neu gelesen werden.

FLUSH PRIVILEGES;

Zum entfernen der Rechte kann man diese Kommando verwenden.

REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'www-data'@'localhost';

Um die Einstellungen zu Prüfen kann man diese Befehle verwenden.

SHOW GRANTS FOR 'www-data'@'localhost';
SELECT Host,USER,Plugin,Authentication_string FROM `mysql`.`user`;

Die Socket Verbindung kann man mit dem MySQL Client prüfen.

sudo -u www-data mysql -u www-data