CakePHP 2.3 コマンドラインからPHPのシェル実行の方法解説
2017/04/29
CakePHPのプログラムをコマンドラインから実行する方法
CakePHPのプログラムをコマンドラインから実行する方法
CakePHPで Webシステムを作っている中で、cronなどで定期的に自動処理を実行したいと思う場面も出てくるでしょう。
CakePHPには、そんな時も CakePHPの処理を使ってコマンドラインから実行する方法が用意されています。
ここでは、その説明を行います。
CakePHPの 1.*系と 2.*系のシェルの作り方は全く違う
CakePHPの処理をコマンドラインから実行する際は、シェルという処理を使って作成をしますが、その作成の方法が CakePHPの 1.*系と、2.*系とで違っています。
ここでは CakePHP 2.*系の説明しかしませんが、1.*系の作成方法について知りたい方は、下記のサイトなどが参考になると思います。ファイルを置く場所も変っていますね。
CakePHP 1.*系のシェルについて
http://ucwd.jp/blog/570
コマンドラインから PHPを実行できるかの確認
CakePHP 2.*系のシェルの作成をする前に、1点確認です。
ここでコマンドラインから実行するコマンドは PHPのパスが通っていることを想定して書いています。
コマンドラインから PHPが実行できるかどうかを試すには下記のコマンドを実行してみるといいでしょう。
|
1 |
php -v |
このコマンドは、PHPのバージョンを表示させる際に実行するものですが、下記の様に PHPのバージョンが表示されれば PHPのパスは通っていることが確認できます。
|
1 2 3 4 |
C:\Users\user1>php -v PHP 5.4.7 (cli) (built: Sep 12 2012 23:48:31) Copyright (c) 1997-2012 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies |
PHPのパスが通っていない場合は、PHPのパスを通す設定を検索していただいて、設定してください。
CakePHPの 2.*系のシェルの基本的な作り方、使い方
ここから CakePHP 2.*においてシェルの作り方を説明していきます。
まず、標準出力するだけのサンプルを作ってみましょう。
/cake1/app/Console/Command/TestShell.php
——————–
|
1 2 3 4 5 6 7 8 9 10 |
<?php class TestShell extends Shell { function main () { $this->out('test.'); // 標準出力には $this->out() を利用。 } function test2 () { $this->out('test2.'); // 標準出力には $this->out() を利用。 } } |
——————–
ソース内にもコメントとして書いていますが「$this->out()」を利用して標準出力を行います。(コマンドを入力したコンソールに出力を返す処理です。)
そして、上記のサンプルで作成した CakePHPの shellをコマンドラインから実行する方法は、以下の通りとなります。
この実験は、Windowsの XAMPP環境で実行していますが、Linuxでも記述方法は同じです。
|
1 |
php /{CakePHPがインストールされているパス}/app/console/cake.php test |
cake.phpファイルがあるディレクトリ(/{CakePHPがインストールされているパス}/app/console/)に移動した場合は、下記のコマンドでも実行できます。
|
1 |
php cake.php test |
一つ上位の親ディレクトリに移動した場合は、下記の様に相対パスの指定でも実行できます。(カレントディレクトリが /{CakePHPがインストールされているパス}/app/ にある場合)
|
1 |
php ./Console/cake.php test |
このパスの指定のイメージは、bakeを行う場合と同じです。
例えば、カレントディレクトリが「/{CakePHPがインストールされているパス}/app/console/」の場合は、下記の指定で bakeを起動できることと同じです。
|
1 |
php ./cake.php bake |
また、ここで cake.phpの引数として設定している「test」は、「/app/Console/Command/」フォルダの中にある「TestShell.php」を呼び出して実行することを指定していることになります。
ファイル名が「SampleShell.php」の場合は、「php cake.php sample」になります。
また、サンプルソースの中には、「function main ()」と「function test2 ()」とありますが、引数に何も指定しない場合は、「function main ()」の方がデフォルトとして実行されます。
ブラウザでアクセスして画面を表示させる際に引数がない場合は「function index ()」が呼び出されるのと同じイメージで、コマンドから実行する場合はデフォルトで「function main ()」が呼び出されると覚えておきましょう。
では、「function test2 ()」の方を実行する場合は、というと下記の様に「test」に続けて関数名(test2)を指定します。
|
1 |
php ./Console/cake.php test test2 |
CakePHPの 2.*系のシェルの作り方、使い方 その2
複数の単語を組み合わせたファイル名を付けた場合はどのようになるのか、の実験もしてみました。
/cake1/app/Console/Command/TestFileShell.php
——————–
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php class TestFileShell extends Shell { function main () { $this->out('testfile.'); // 標準出力には $this->out() を利用。 } function test2 () { $this->out('testfile2.'); // 標準出力には $this->out() を利用。 } function test_test () { $this->out('testfile_test.'); // 標準出力には $this->out() を利用。 } } |
——————–
上記のプログラムを実行する場合、下記のいずれも OKでした。
|
1 2 3 |
php cake.php test_file php cake.php testfile php cake.php TestFile |
また、関数を指定する場合は、下記の場合は、正しく関数「test_test」が呼び出されました。
|
1 2 3 |
php cake.php test_file test_test php cake.php testfile test_test php cake.php TestFile test_test |
ですが、下記のような記述方法では正しく関数「test_test」は呼び出されず「main」が呼び出されました。
|
1 2 3 4 5 6 |
php cake.php test_file testtest php cake.php test_file TestTest php cake.php testfile testtest php cake.php testfile TestTest php cake.php TestFile testtest php cake.php TestFile TestTest |
当たり前と言えば当たり前ですが、関数名を「TestTest」とした場合は、「testtest」「TestTest」を引数にすると呼び出すことができ「test_test」とした場合は呼び出すことはできません。
CakePHPの命名規則上は、「test_test」が正しいのだと思いますが...
また、引数として指定した関数が存在しない場合は「main」が呼び出されるようです。
CakePHPの 2.*系のシェルに引数を渡す方法
CakePHPのシェルに引数(パラメータ、オプション)を渡す方法も 2.*系なって変更になっています。
こちらに関しては、また改めて実験をしてから記事にしたいと思いますが、下記の記事などが参考になるのではないでしょうか。
http://karasunouta.com/blog/2012/10/07/cakephp2-shell-params/
http://lab.adn-mobasia.net/?p=1014
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP4から外部のデータベースにアクセスする方法解説
CakePHP4のシステムから他のシステムのデータベースにアクセスをし、SQL文を実行する方法を解説。try-catchでエラーを取得する方法も解説。
-
-
CakePHP3でWarning Error: SplFileInfo::openFile()エラーが発生した場合の対処方法
CakePHP3のキャッシュファイルのパーミッションエラー Error: SplFileInfo::openFile()が発生した場合の対応方法解説。app.phpにキャッシュファイルのパーミッション設定を行い、既存のファイルは削除。
-
-
CakePHP3のビューで受取ったテーブルのオブジェクトを連想配列に変換する方法
コントローラーからビューに送ったテーブルのオブジェクトを連想配列に変換し、ビューの中で自由に使えるようにするメソッド「toArray()」の解説。連想配列に変換できれば利用度アップ!
-
-
Google Analytics APIを CakePHP3で動かしてレポートデータを取得する方法の解説
CakePHP3で Google Analytics APIからレポートデータを取得する処理の解説。PHPのサンプルソースをCakePHP3で動くように改造。加えて、ディメンションやメトリックスを条件に設定する方法なども。
-
-
CakePHP3のfriendsofcake/searchでツリーカテゴリーの子階層も含めて検索する方法
CakePHP3のツリービヘイビアを使ったツリーカテゴリーの子階層も含めての検索を検索プラグイン「friendsofcake/search」を使って実現する方法を解説しました。
-
-
CakePHP4、CakePHP5の「warning: DebugKit is disabling...」の対処方法
CakePHPのデバッグ用のツールであるDebugKitは適切な設定をしないとエラーログにワーニングメッセージが出力される。それを解消する方法を解説。
-
-
CakePHP 2.3 連携先のテーブルの項目で条件抽出する場合
アソシエーション(連携)している先のテーブルの項目で条件抽出する際の考え方と注意点をサンプルソースを用いて説明しています。
-
-
CakePHP3にデザインテンプレートBootstrapを導入する方法・friendsofcake/bootstrap-ui使用
CakePHP3にプラグイン「friendsofcake/bootstrap-ui」、デザインテンプレート「Bootstrap」を設置する手順を解説。Bootstrapの簡単な使い方やデフォルトのデザインとの混在方法なども解説。
-
-
CakePHP4、5の認証処理で認証が通らない際の確認方法と確認箇所の紹介
CakePHP4、5系の認証処理でログイン認証が通らない場合の確認方法、確認箇所を解説。ログ出力し、ステータスを確認するが、ステータスの内容も紹介。それはそのままusernameを変更する際のポイントでもある。
-
-
CakePHP3のユーザ管理・ログイン認証プラグインCakeDC/Usersのインストール解説・3.6以降対応
CakePHP3のユーザ管理プラグイン Usersは、ユーザ登録、メール認証、ログイン認証、ユーザ管理、権限管理、reCAPTCHAなど会員制のサイトを簡単に実現可能。その導入方法、カスタマイズ方法を解説。