【bat、PHP】PHPをbatのようにローカルスクリプトとして使う(1)~設定・呼び出し編~

【コマンド、ツールの概要】
PHPに慣れている方にとっては当たり前のことですが、batやVBSのようにサーバー内部の処理を行わせます。
・メリットとしてはこんな感じ?
 〇 batやVBSよりDBMSへの接続が簡単。
 〇 ライブラリが豊富、Webの情報も豊富。
 〇 OSよりもPHP.iniの設定に環境として依存する。
 〇 エラーがbatとかwindows謹製のものよりわかりやすい←個人差あり
・デメリットとしては、、こんな感じ?
 × あえてPHPでやる必要があるのかは常に考える必要がある。
 × コンパイルされたプログラム(JavaとかC#とか)より遅い。インタプリタ式の中では不明。
 × 少なくともPHP.exeと設定が必要。

【環境(使っている環境)】
Windows Server 2008R2
PHP 5.6

PHP導入】
(1) PHPプログラムファイルの解凍、設置
  PHPのサイトからZipをダウンロードして、問題なさそうな場所に置く。(自分はよく「D:\php\php5.6\」とかに展開します)
   (64bit(x64)か32bit(x86)、将来的にIISを使ってサイトを作るとかならNon Thread Safeを選ぶといいっぽい)
   http://www.php.net/
   https://windows.php.net/download
  <インストール参考サイト>
   https://weblabo.oscasierra.net/php-72-windows-install/
(2) 環境変数PATHを通す。
  「ファイル名を指定して実行(Win+R)」
  →「システムのプロパティ(sysdm.cpl)」
  →「詳細設定タブ」→「環境変数ボタン」
  →「システム環境変数Pathをクリックして編集」
  →「新規ボタンを押して、「php.exe」のあるフォルダ(たぶんbin)を入力」
  →「全部OKで閉じる」
  これで、コマンドプロンプトで「php」と打つだけでPATHを通した場所にある「php.exe」を呼べるようになる。
(3) コマンドプロンプトを起動して(ちゃんと開き直さないとPATHを読み込み直さない)、「php -v」と打ってバージョンが出ることを確認する。


【bat(colled_phpを呼ぶbat(php_call.bat))】

php D:\Project\phptest\colled_php.php

ECHO %ERRORLEVEL%

PHP(batに呼ばれて文字を出力してbatに「1」を返すPHP(colled_php.php))】

<?php
$word = "呼ばれちゃった";
echo $word;

exit (1);


【使用方法】
・それぞれソースをコピペして拡張子を「.bat」「.php」にして保存します。
・それぞれのファイルパス、フォルダパスに不備がないようにします。
・batを実行します。

【説明】
batを実行すると、1行目でphpのプログラムを引数にphpファイル(colled_php.php)を設定して実行します。
phpスクリプト部はで記述されます。(閉じる方のかっこは不要派が多い?なんか理由あった気がする)
変数$wordに文字を代入し、echoで標準出力に出力(Webだとブラウザの表示部とか)。
PHPはexit()でカッコ内を呼出し元へ返り値(終了ステータス)として返します。(batは数字でしか受け取れないためここでは「1」)
batは返り値を特殊環境変数ERRORLEVELに格納するので、それをECHOして標準出力へ出力して、コードおわり。
 <実行イメージ>
 f:id:hagure_m:20190413162833p:plain

また、こんなコマンドでもコマンドプロンプトphpは実行できます。
 php D:\Project\phptest\colled_php.php
この場合、「呼ばれちゃった」だけがコマンドプロンプトに表示されますね。

【総評】
phpを少しかじった人だと「exit(die)」「return」「echo」とかどれで戻り値を返すのか悩んだりしたことがあったはず←
また、「exit」コマンドは文字列と数字を指定した場合の挙動が微妙に異なります(→参照
サーバーローカルスクリプトとしてbat的にphpを使う人は少ないと思うので、
たまにはこんな記事もいいんじゃないかな、ということで、ちょっと続きます。(なぜかは次の記事あたりで)


【参考サイト】
PHPのダウンロードとインストール | PHPインストールと初期設定

【初心者向け】PHPによるバッチ処理プログラム開発 - Qiita