データベースにデータを登録しなければならず、2年前に利用したプログラムを確認しました。
確認した結果、PHPだけあればいいと思っていところ、ApacheとPHPが動作するWebの環境が必要なことがわかりました。
手っ取り早くApacheとPHPが動作する環境を構築するために、XAMPPを使えばいいと判断しました。
www.apachefriends.org
ダウンロードできるのがPHPのバージョン違いで3種類あります。
www.apachefriends.org
PHPのバージョンが違うだけで、他は一緒のようです。
PHP 7.0は使ったことがありませんが、今回をきっかけに使うのもいいかと考え、xampp-win32-7.0.13-1-VC14-installer.exeをダウンロードしてインストールしました。
データベースにデータを登録できるようになるまでに、次の事象が発生し対処しました。
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
を追加したところ、エラーは解消されました。
改めて感じたこと
これらを事象の解決するために、時間を随分使ってしまいました。日頃から新しい環境を利用して経験しておけば、覚えていなくても知っていれば、修正作業は必要になっても短い時間で終わらせられた可能性があります。
技術者として勉強不足を痛感しました。