■ Docker学習 #21:Mariadb連携 (2)

前回からの続き…
Docker #20 Mariadb連携


環境


Windows 10 1909 (18363.959)
Docker Toolbox : Docker version 19.03.1
コンテナ CentOS:8.2.2004
Apache 2.4.37
PHP 7.2.24


エラー原因調査


エラー分からないため、PHPファイルを修正しエラーを表示させてみる。
前回のdb.phpの先頭に以下2行を追加。
error_reporting(-1);
ini_set("display_errors", 1);

→ 以下エラーが表示された。
Fatal error: Uncaught Error: Call to undefined function mysql_connect() in /var/www/html/db.php:12 Stack trace: #0 {main} thrown in /var/www/html/db.php on line 12
https://www.php.net/manual/ja/function.mysql-connect.php
「この拡張モジュールは PHP 5.5.0 で非推奨になり、PHP 7.0.0 で削除されました。」とのこと。
この関数の代替は、
・mysqli_connect()
・PDO::__construct()

とりあえず mysqli を使う方向として、PHPのページを参考にdb.phpを以下のように修正。
<?php
error_reporting(-1);
ini_set("display_errors", 1);

// 環境変数の取得
$host = getenv("MY_MARIADB1_PORT_3306_TCP_ADDR");
$db   = getenv("MY_MARIADB1_ENV_MYSQL_DATABASE");
$user = getenv("MY_MARIADB1_ENV_MYSQL_USER");
$pass = getenv("MY_MARIADB1_ENV_MYSQL_PASSWORD");
    
// Mariadbへの接続
$link = new mysqli($host, $user, $pass, $db);

ブラウザで http://192.168.99.102/db.php を表示
→ エラー発生
Warning: mysqli::__construct(): (HY000/2002): No such file or directory in /var/www/html/db.php on line 12

db.phpで取得している環境変数の値を確認してみる。
db.phpに以下行を追加し ブラウザで http://192.168.99.102/db.php を表示
var_dump($host, $db, $user, $pass);
→ getenv関数で環境変数が取得できていない?
bool(false) bool(false) bool(false) bool(false)
https://www.php.net/manual/ja/function.getenv.php によると、指定した環境変数名が存在しない場合は false を返す、とのこと。
$host, $db, $user, $pass すべて値は false だった。

getenv関数は引数を省略すると、すべての環境変数を取得できる。(PHP 7.1.0以降)
https://www.php.net/manual/ja/function.getenv.php
なので、db.phpを修正、先ほど追記した var_dumpの行を削除し、新たに2行追加
$var = getenv();
var_dump($var);
→ 取得できた環境変数は USER と HOME の2つだけだった。
array(2) { ["USER"]=> string(6) "apache" ["HOME"]=> string(16) "/usr/share/httpd" }

よくわからん…

続く・・・


Docker学習

0 件のコメント:

その他の記事