読者です 読者をやめる 読者になる 読者になる

ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

PHP 7.0とApahce 2.4の組み合わせのXAMPPを利用して学んだこと

XAMPP Apache PHP
スポンサーリンク

データベースにデータを登録しなければならず、2年前に利用したプログラムを確認しました。
確認した結果、PHPだけあればいいと思っていところ、ApachePHPが動作するWebの環境が必要なことがわかりました。

手っ取り早くApachePHPが動作する環境を構築するために、XAMPPを使えばいいと判断しました。
www.apachefriends.org

ダウンロードできるのがPHPのバージョン違いで3種類あります。
www.apachefriends.org
PHPのバージョンが違うだけで、他は一緒のようです。
PHP 7.0は使ったことがありませんが、今回をきっかけに使うのもいいかと考え、xampp-win32-7.0.13-1-VC14-installer.exeをダウンロードしてインストールしました。

データベースにデータを登録できるようになるまでに、次の事象が発生し対処しました。

f:id:AJYA:20170112154416p:plain

ApacheのAlias設定先にアクセスできない

ApacheのDocument Rootを書き換えて、データベースにデータを登録するPHPを動作させる方法もありますが、今後のことも考えて、Aliasで動作するようにhttpd.donfを変更しました。

アクセスすると、403エラーが発生して表示されません。
error.logを確認すると、

[Wed Jan 11 17:14:09.416530 2017] [authz_core:error] [pid 4392:tid 1644] [client 127.0.0.1:50467] AH01630: client denied by server configuration: C:/2017/php_tool/dbentry/index.php

と表示されます。

httpd.confの書き方を間違えたのかと、コマンドプロンプトからhttpd.confのチェックをしました。
チェックの結果は、以下のとおり表示され、問題は無さそうです。

c:\xampp\apache\bin>httpd.exe -t
Syntax OK

c:\xampp\apache\bin>httpd.exe -S
VirtualHost configuration:
*:443                  www.example.com (C:/xampp/apache/conf/extra/httpd-ssl.conf:121)
ServerRoot: "C:/xampp/apache"
Main DocumentRoot: "C:/xampp/htdocs"
Main ErrorLog: "C:/xampp/apache/logs/error.log"
Mutex ssl-stapling-refresh: using_defaults
Mutex rewrite-map: using_defaults
Mutex ssl-stapling: using_defaults
Mutex proxy: using_defaults
Mutex ssl-cache: using_defaults
Mutex default: dir="C:/xampp/apache/logs/" mechanism=default
PidFile: "C:/xampp/apache/logs/httpd.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG

理由がわからないのでApacheのバージョンを指定して、httpd.confの書き方を検索した結果、Apache 2.4からは書き方が変わっていることがわかりました。

Apahce 2.2までは、

    Alias /2017-dbentry "C:/2017/php_tool/dbentry/"
    <Directory "C:/2017/php_tool/dbentry">
        Order allow,deny
        Allow from all
    </Directory>

だったのが、Apache 2.4では、

    Alias /2017-dbentry "C:/2017/php_tool/dbentry/"
    <Directory "C:/2017/php_tool/dbentry">
        Require all granted
    </Directory>

としなければならないとありました。

このとおりにhttpd.confを修正してApacheを再起動したところ、403エラーは解消されました。

PHP 7.0で関数が削除されているためにエラー

データベースに登録するプログラムにアクセスできるようになったので、実行したところsplit()関数が削除されたのでエラーになりました。
PHPのマニュアルを見ると、3種類の関数が代替として用意されています。
PHP: split - Manual

今回は、文字列を切り分けるだけだったので、explode()関数に書き換えたところ、エラーは解消されました。

PHP 7.0でCOMコンポーネントが利用できずエラー

Excelファイルからデータを読み取ってデータベースにデータを登録するプログラムのため、COMコンポーネントを利用します。
COMコンポーネントが利用できず、エラーが発生しました。
PHP 5.3/5.4の途中のバージョンから、無効になっていました。
PHP: インストール手順 - Manual

php.iniに

extension=php_com_dotnet.dll

を追加したところ、エラーは解消されました。

改めて感じたこと

これらを事象の解決するために、時間を随分使ってしまいました。
日頃から新しい環境を利用して経験しておけば、覚えていなくても知っていれば、修正作業は必要になっても短い時間で終わらせられた可能性があります。
技術者として勉強不足を痛感しました。