エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


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が実行できるかどうかを試すには下記のコマンドを実行してみるといいでしょう。
 

php -v

 
このコマンドは、PHPのバージョンを表示させる際に実行するものですが、下記の様に PHPのバージョンが表示されれば PHPのパスは通っていることが確認できます。
 

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
——————–

out('test.'); // 標準出力には $this->out() を利用。 
  } 

  function test2 () { 
    $this->out('test2.'); // 標準出力には $this->out() を利用。 
  } 
} 

——————–
 
ソース内にもコメントとして書いていますが「$this->out()」を利用して標準出力を行います。(コマンドを入力したコンソールに出力を返す処理です。)
 
そして、上記のサンプルで作成した CakePHPの shellをコマンドラインから実行する方法は、以下の通りとなります。
この実験は、Windowsの XAMPP環境で実行していますが、Linuxでも記述方法は同じです。
 

php /{CakePHPがインストールされているパス}/app/console/cake.php test

 
cake.phpファイルがあるディレクトリ(/{CakePHPがインストールされているパス}/app/console/)に移動した場合は、下記のコマンドでも実行できます。
 

php cake.php test

 
一つ上位の親ディレクトリに移動した場合は、下記の様に相対パスの指定でも実行できます。(カレントディレクトリが /{CakePHPがインストールされているパス}/app/ にある場合)
 

php ./Console/cake.php test

 
このパスの指定のイメージは、bakeを行う場合と同じです。
例えば、カレントディレクトリが「/{CakePHPがインストールされているパス}/app/console/」の場合は、下記の指定で bakeを起動できることと同じです。

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)を指定します。
 

php ./Console/cake.php test test2

 
 


 

CakePHPの 2.*系のシェルの作り方、使い方 その2

 
複数の単語を組み合わせたファイル名を付けた場合はどのようになるのか、の実験もしてみました。 
 
/cake1/app/Console/Command/TestFileShell.php
——————–

out('testfile.'); // 標準出力には $this->out() を利用。 
  } 

  function test2 () { 
    $this->out('testfile2.'); // 標準出力には $this->out() を利用。 
  } 

  function test_test () { 
    $this->out('testfile_test.'); // 標準出力には $this->out() を利用。 
  } 
} 

——————–
 
上記のプログラムを実行する場合、下記のいずれも OKでした。

php cake.php test_file
php cake.php testfile
php cake.php TestFile

 
また、関数を指定する場合は、下記の場合は、正しく関数「test_test」が呼び出されました。

php cake.php test_file test_test
php cake.php testfile test_test
php cake.php TestFile test_test

 
ですが、下記のような記述方法では正しく関数「test_test」は呼び出されず「main」が呼び出されました。

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

 - CakePHP 3.x 4.x 5.x

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

CakePHP 2.3 Search Pluginで検索処理 その3入力エリア一つで複数の項目を同時に検索する方法

CakePHPの検索プラグイン Search Pluginの検索処理の中で入力エリア一つで複数の項目を同時に検索する方法を解説。

CakePHP4で複数の引数(パラメータ)を付与してコマンドを実行する方法
CakePHP4で複数の引数(パラメータ)を付与してコマンドを実行する方法

CakePHP4でコマンドを実行する際に引数(パラメータ)をコマンド内で受け取る処理について解説。複数個の引数にも対応する記述方法も解説。

CakePHP3のインストールでURL rewriting......のエラーが!その解決方法解説
CakePHP3のインストールでURL rewriting……のエラーが!その解決方法解説

CakePHP3をインストールしたら URL rewriting is not properly configured.のエラーが。原因は.htaccessが有効になっていないこと。httpd.confに設定を追加すればOK。

CakePHP4、CakePHP5の「warning: DebugKit is disabling...」の対処方法
CakePHP4、CakePHP5の「warning: DebugKit is disabling...」の対処方法

CakePHPのデバッグ用のツールであるDebugKitは適切な設定をしないとエラーログにワーニングメッセージが出力される。それを解消する方法を解説。

CakePHP4のメッセージ日本語化の設定(国際化と地域化の機能の使い方の解説)
CakePHP4、CakePHP5のメッセージ日本語化の設定(国際化と地域化の機能の使い方の解説)

CakePHP4の英語のメッセージを日本語化(多言語化)する手順を解説。オリジナルのメッセージを作成する方法やプログラムで文言を追加する場合の対応なども解説。

CakePHP3ログファイルの出力方法・$this->log()の解説
CakePHP3ログファイルへの出力・$this->log()、独自ログへの出力方法の解説

コントロール、モデルの変数の中身を見るときはログに出力する方法が有効です。$this->log()を利用すると変数だけじゃなく、連想配列、オブジェクトも簡単にログ出力ができます。

CakePHP3のCakeDC/Users、Authでログインなしでもアクセスを許可する設定
CakePHP3のCakeDC/Users、Authでログインなしでもアクセスを許可する設定

CakePHP3の Authコンポーネントや CakeDC/Usersプラグインなどを利用したユーザ管理・認証システムにおいて、ログインしていなくても見ることができるページの設定方法を解説。

CakePHP4 でコマンドプログラム(シェルプログラム)を作成する方法解説
CakePHP4 でコマンドプログラム(シェルプログラム)を作成する方法解説

CakePHP4でバッチ処理を行うためのコマンド・シェルの実装方法について解説。bakeでテンプレートファイルを作成し、「execute()」に処理を記述する方法を解説。

CakePHP3のユーザ管理・認証プラグイン CakeDC/Usersの導入・機能解説・3.1.5対応
CakePHP3のユーザ管理・ログイン認証プラグインCakeDC/Usersのインストール解説・3.6以降対応

CakePHP3のユーザ管理プラグイン Usersは、ユーザ登録、メール認証、ログイン認証、ユーザ管理、権限管理、reCAPTCHAなど会員制のサイトを簡単に実現可能。その導入方法、カスタマイズ方法を解説。

CakePHP 2.3 デバッグキット(DebugKit)超初心者向けフォロー講座

CakePHP初心者に向けてデバッグキット(DebugKit)のインストール方法、はまりポイントを解説。


Warning: Trying to access array offset on null in /home/ss-giken/s-giken.net/public_html/blog/wp-content/plugins/amazonjs/amazonjs.php on line 637