ようこそゲストさん

CPA-LABテクニカル

2008/05/01(木) さくらインターネットでCakePHPコンソール

はてブ情報 はてブに登録 はてブ数 cakephpspok
CakePHP1.2のconsole機能については、マニュアルにこう書いています。
[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 -v
php.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の話です。

1: HY 2008年09月22日(月) 午後6時00分

有益な情報ありがとうございます!
超グレートっす。「cakephp bash console」で検索したら1番上に出てきて、
欲しかった情報そのものでした。
自前のサーバーがFreeBSDで、bashが入ってなかったのでどうしようかと思ってたところでした。
ありがとうございました。


名前:  非公開コメント   

  • TB-URL  http://www.cpa-lab.com/tech/0137/tb/
  • CakePHPのシェルコマンドをさくらインターネットで使う CPA-LABテクニカル spok
    メール受信をきっかけにCakePHPコントローラーを起動する では、その名の通り、コントローラーをメール受信で起動させた。ここでは、CakePHP1.2で導入されたシェル機能(shell)を利用し、CakePHPのシェルをメール受信をきっかけに起動させてみ...

2008/05/01(木) PHP:mail関数が使えない環境でSMTP送信するライブラリ

はてブ情報 はてブに登録 はてブ数 qdmailspok

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/