▼ 2008/05/01(木) さくらインターネットでCakePHPコンソール
CakePHP1.2のconsole機能については、マニュアルにこう書いています。
[http://manual.cakephp.org/ja/view/108/the-cakephp-console:http://manual.cakephp.org/ja/view/108/the-cakephp-console]
cakeという拡張子もなにもついていないファイルですが、これはunix系OSのシェルスクリプトになります。
しかし
さくらインターネットで試すと、
644 -> 744
に変更しましょう。すると、
なんでだろ、cakeファイルの中身をみると、bashシェルが指定されていた。
一番最初の行を以下のように変更。
このあたりのシェルスクリプトの動きをさぐってみよう。
という感じ。
やりたいことを察すると、shシェルでは、以下のようになる。
例えば、チュートリアル通り ./cake/console/cake と起動されていれば、 ./cake/console/ を意味することになる。それが、変数 LIB に代入されている。
つまり、引数を渡すことができるわけです。
展開されるとこうなる
また、php.iniも、意図しているのとは全く別のphp.iniを読み込んでいる可能性もありますので、留意しましょう。
そのあたりの設定を確かめるには、phpinfo()でなく、次のようにします。
[http://manual.cakephp.org/ja/view/108/the-cakephp-console:http://manual.cakephp.org/ja/view/108/the-cakephp-console]
$ ./cake/console/cakeで、起動するはずです。
cakeという拡張子もなにもついていないファイルですが、これはunix系OSのシェルスクリプトになります。
しかし
さくらインターネットで試すと、
Permission denied.が出てしまいます。なので、まずはowner権限で、実行可能なように、cakeファイルの属性を
644 -> 744
に変更しましょう。すると、
Command not found.というエラー。
なんでだろ、cakeファイルの中身をみると、bashシェルが指定されていた。
#!/bin/bashさくらインターネットは、shシェルなんだよね~。ってことで、bashを入れるか、shを指定してしまうか迷ったけど、shでいってみることにした。(今から思えばこれが間違いで、素直にbashをインストールしたほうがよかったかも)。
一番最初の行を以下のように変更。
#!/bin/shすると
./cake/console/cake: 29: Syntax error: Bad substitution該当は
LIB=$0/%cake/のようだ。
このあたりのシェルスクリプトの動きをさぐってみよう。
| LIB=$0/%cake/ | 自分自身のパスから、 "cake"という名前を後方から探し、 cakeを含まない 上部のパスを代入する。 |
| APP=`pwd` | カレントディレクトリの代入 |
| exec php -q $LIBcake.php -working "$APP" "$@" | コンソールPHPを オプションつけて実行 |
やりたいことを察すると、shシェルでは、以下のようになる。
LIB=${0/%cake/}
を
LIB=${0%cake}
に修正する。例えば、チュートリアル通り ./cake/console/cake と起動されていれば、 ./cake/console/ を意味することになる。それが、変数 LIB に代入されている。
pwdは、カレントディレクトリの表示をするシェルコマンド。
$@は、すべての引数を展開して引き渡す。
つまり、引数を渡すことができるわけです。
展開されるとこうなる
Code1
php -p ./cake/console/cake.php -working /カレントディレクトリ (引数1)(引数2)・・・・なので、無理にシェルスクリプトを動かさなくても、Code1のようなコマンドをシェルから直接実行させればよい。
コマンドラインPHPとサーバーモジュール(orCGI)PHPは別物
いわゆるhttpプロトコルで動く一般的なPHPと、コマンドラインで動くPHPは全く別のプログラムです。さくらインターネットでは、ほぼ同じ構成でコンパイルされているようですが、他のレンタルサーバでは、コマンドラインPHPには、mbマルチバイト関数が入っていなかったりするようなこともあるようです。また、php.iniも、意図しているのとは全く別のphp.iniを読み込んでいる可能性もありますので、留意しましょう。
そのあたりの設定を確かめるには、phpinfo()でなく、次のようにします。
php -iバージョンだけを確かめるなら
php -vphp.ini を指定するならこう。
php -c パス&ファイル名ヘルプは、こう。
php -h
参考 console/cakeの当初コード。
#!/bin/bash
clear
LIB=$0/%cake/
APP=`pwd`
echo "Hello $USER,"
exec php -q $LIBcake.php -working "$APP" "$@"
echo " ";
exit;
さくらインターネットで動くように変更後のコード
#!/bin/sh
clear
LIB=${0%cake}
APP=`pwd`
echo "Hello $USER,"
exec php -q ${LIB}cake.php -working "${APP}" "$@"
echo " ";
exit;
CakePHP1.2betaの話です。- TB-URL http://www.cpa-lab.com/tech/0137/tb/
-
▼
CakePHPのシェルコマンドをさくらインターネットで使う
CPA-LABテクニカル メール受信をきっかけにCakePHPコントローラーを起動する では、その名の通り、コントローラーをメール受信で起動させた。ここでは、CakePHP1.2で導入されたシェル機能(shell)を利用し、CakePHPのシェルをメール受信をきっかけに起動させてみ...
▼ 2008/05/01(木) PHP:mail関数が使えない環境でSMTP送信するライブラリ
■PHPで簡単にSMTP送信
環境によっては、同じサーバーにメールサーバーが同居しておらず、PHPのmail関数が使えない人もいるでしょう。mail関数は遅いから、SMTPでメール送信したいという人もいるでしょう。
Pear::Mailは設定が面倒で、もっと簡単にSMTP送信できないものか、とお考えの人もいるでしょう。
CakePHPからSMTP送信したい?
そんなあなたのために。
簡単高機能SMTPメール送信ライブラリ-Qdsmtp - PHPで簡単にSMTPメール送信。Qdmailと連携すれば、マルチバイト日本語もばっちり。
- TB-URL http://www.cpa-lab.com/tech/0140/tb/
1: HY 2008年09月22日(月) 午後6時00分
有益な情報ありがとうございます!
超グレートっす。「cakephp bash console」で検索したら1番上に出てきて、
欲しかった情報そのものでした。
自前のサーバーがFreeBSDで、bashが入ってなかったのでどうしようかと思ってたところでした。
ありがとうございました。