1. PHP インストール
1-1. OS を確認
[ec2-user@ip-172-31-10-77 ~]$ uname -r 6.1.66-91.160.amzn2023.x86_64 [ec2-user@ip-172-31-10-77 ~]$ cat /etc/system-release Amazon Linux release 2023 (Amazon Linux)
1-2. セキュリティパッチなど更新
$ sudo dnf update -y
1-3. 必要なツールをインストール
$ sudo dnf install -y httpd php
インストールした Apache のバージョン:
[ec2-user@ip-172-31-8-236 ~]$ httpd -v Server version: Apache/2.4.58 (Amazon Linux) Server built: Oct 24 2023 00:00:00
インストールした PHP のバージョン:
[ec2-user@ip-172-31-8-236 ~]$ php -v PHP 8.2.9 (cli) (built: Aug 3 2023 11:39:08) (NTS gcc x86_64) Copyright (c) The PHP Group Zend Engine v4.2.9, Copyright (c) Zend Technologies with Zend OPcache v8.2.9, Copyright (c), by Zend Technologies
1-4. Apache 起動
$ sudo systemctl enable httpd $ sudo systemctl start httpd
1-5. PHP ファイル作成
$ cd /var/www/html $ sudo vi hello.php
以下を貼り付ける。
<!DOCTYPE html> <html> <head> <title>PHP Test</title> </head> <body> <?php echo '<p>Hello World</p>'; ?> <?php phpinfo(); ?> </body> </html>
上記のコードは以下を参考にした。
1-6. 動作確認
http:/xxx.xxx.xxx.xxx/hello.php
にアクセス。
2. PHP でデータベース接続
2-1. MySQL クライアントインストール
インストールは以下を参考にした。
$ sudo dnf install -y mariadb105
インストール後、バージョン確認。
[ec2-user@ip-172-31-10-77 html]$ mysql --version mysql Ver 15.1 Distrib 10.5.20-MariaDB, for Linux (x86_64) using EditLine wrapper
2-2. 動作確認用テーブル作成、データ追加
データベース接続。
$ mysql -h tutorial-db-instance.c3a7vynvhtxw.ap-northeast-1.rds.amazonaws.com -P 3306 -u tutorial_user -p
使用するデータベースに切り替える。
MySQL [(none)]> use sample;
データベース切り替え後、テーブル作成。
> CREATE TABLE PHP_DEMO ( ID int(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY, NAME VARCHAR(45), ADDRESS VARCHAR(90) );
テーブル作成後、データ追加。
> insert into PHP_DEMO (name, address) values ('test-name-1', 'test-address-1');
2-3. PHP でデータベース接続
クライアントインストール。
$ sudo dnf install -y php-mysqli
クライアントについて:
データベース接続情報ファイル /var/www/inc/dbinfo.inc
を以下の内容で作成。ドキュメントルートフォルダの外に作成すること。
<?php define('DB_SERVER', 'tutorial-db-instance.c3a7vynvhtxw.ap-northeast-1.rds.amazonaws.com'); define('DB_USERNAME', 'tutorial_user'); define('DB_PASSWORD', 'tutorial_user'); define('DB_DATABASE', 'sample'); define('DB_PORT', 3306); ?>
※Apache のドキュメントルートフォルダの確認
[ec2-user@ip-172-31-10-77 html]$ grep '^DocumentRoot' /etc/httpd/conf/httpd.conf DocumentRoot "/var/www/html"
PHP ファイル /var/www/html/SamplePage.php
を作成。
<?php include "../inc/dbinfo.inc"; ?> <html> <body> <h1>Sample page</h1> <!-- データベース接続 --> <?php $connection = mysqli_connect( DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_DATABASE, DB_PORT ); ?> <table border="1" cellpadding="10" cellspacing="1"> <tr> <td>ID</td> <td>NAME</td> <td>ADDRESS</td> </tr> <!-- クエリ --> <?php // 全行取得 $result = mysqli_query($connection, "SELECT * FROM PHP_DEMO"); // クエリ結果をレコードごとに処理 while($query_data = mysqli_fetch_row($result)) { echo "<tr>"; echo "<td>",$query_data[0], "</td>", "<td>",$query_data[1], "</td>", "<td>",$query_data[2], "</td>"; echo "</tr>"; } ?> </table> <!-- データベース切断 --> <?php // メモリ解放 mysqli_free_result($result); // データベース切断 mysqli_close($connection); ?> </body> </html>
2-4. 動作確認
3. メモ
関数について
mysqli_connect
MySQLサーバに接続する関数。詳細は以下:
この関数の定義は次の通り:
mysqli_connect( ?string $hostname = null, ?string $username = null, ?string $password = null, ?string $database = null, ?int $port = null, ?string $socket = null ): mysqli|false
: mysql|false
は、戻り値の型を表す。データベースの接続に成功した場合は mysqli
オブジェクトを返し、失敗した場合は false
を返すという意味。
?string $hostname = null
は型宣言とデフォルト引数値を表す。詳細は次の通り:
?string
:変数$hostname
は文字列型。型の前にクエスチョンマークをつけると、null 型も許容する$hostname
:PHP の変数はドル記号の後に変数名を書く= null
:デフォルト引数であり、引数の省略が可能。デフォルト値はnull
であることを表す
この関数のデフォルト引数に渡された値が null
だった場合、/etc/php.ini
の値が適用される。例えばポート番号の変数 $port
は以下の値が適用される。
[ec2-user@ip-172-31-10-77 html]$ grep 'mysqli.default_port' /etc/php.ini mysqli.default_port = 3306
※ php.ini
を変更した場合、変更内容を反映させるにはphp-fpm.service
を再起動する。
$ sudo systemctl restart php-fpm.service
※ FPM(FastCGI Process Manager)について: