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);
→ 以下エラーが表示された。
※ 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 件のコメント:
コメントを投稿