MacportでPHPをインストールし、CakePHPを動かしたら「Strict Standards」エラーが出ました。 当時のエラー本文は残ってませんので、Googleで検索したエラー本文を貼り付けます。パス以外は同じのはずです。

Strict Standards: Assigning the return value of new by reference is deprecated in /Applications/MAMP/htdocs/xxxx/cake/basics.php on line 279
Strict Standards: Redefining already defined constructor for class Object in /Applications/MAMP/htdocs/xxxx/cake/libs/object.php on line 65
Strict Standards: Assigning the return value of new by reference is deprecated in /Applications/MAMP/htdocs/xxxx/cake/libs/object.php on line 92
Strict Standards: Assigning the return value of new by reference is deprecated in /Applications/MAMP/htdocs/xxxx/cake/libs/inflector.php on line 65
Strict Standards: Assigning the return value of new by reference is deprecated in /Applications/MAMP/htdocs/xxxx/cake/libs/configure.php on line 96
Strict Standards: Assigning the return value of new by reference is deprecated in /Applications/MAMP/htdocs/xxxx/cake/libs/configure.php on line 154
Strict Standards: Assigning the return value of new by reference is deprecated in /Applications/MAMP/htdocs/xxxx/cake/libs/cache.php on line 71
Strict Standards: Assigning the return value of new by reference is deprecated in /Applications/MAMP/htdocs/xxxx/cake/libs/cache.php on line 157
Strict Standards: Non-static method Configure::getInstance() should not be called statically in /Applications/MAMP/htdocs/xxxx/cake/bootstrap.php on li

解決方法

これはCakePHPの問題ではなく、PHPのerror_reportingの設定問題だそうです。 php.iniを開いてerror_reportingで検索します。 値をE_ALLに変更すれば解決です。

ちなみにMacportでPHPをインストールしたときのphp.iniパスは/opt/local/etc/php5/php.iniになります。

参考リンク

http://oldblog.awpny.com/2007/12/mamp-php5-cakephp-and-strict-standards/

#api #php #php #snippet

file_get_contentsとjson_decodeの組み合わせでAPIコールするサンプルコードです。

// APIコール
$api_url = 'http://example.com/api/';
$api_ret = file_get_contents($api_url);

// JSONにデコード
$api_result = json_decode($api_ret,true);

// APIエラーチェック: 何かしらの成功フラグでチェック
if(isset($api_result*'success']) && $api_result['success'* == 0)
{
    // 処理
}
else
{
    // handle error
}

#google #web #gadget #howto #tutorial

Googleが提供するGoogle Gadgets EditorでHello Worldを出力するgadgetを作ります。Gadgetについての基礎知識は飛ばします。http://code.google.com/apis/gadgets/docs/gs.htmlを参照してください。

ソースを用意

<?xml version="1.0" encoding="UTF-8" ?>
<Module>
  <ModulePrefs title="Hello World!" />
  <Content type="html">
    <![CDATA[
      Hello, world!
    ]]]]><![CDATA[>
  </Content>
</Module>

AJAXでのアクセスはPVにカウントされない、というのをこの間にミーティングで知りました。考えてみりゃ当たり前のことですが、考えたことはなかったです。。でどうするか、とのことでちょっとぐぐってみました。

結論からいうとダミーのページを指定するようにJavascript側で書く(Google Analytics前提)

<script type="text/javascript">
urchinTracker(); // デフォルト
urchinTracker("/hogehoge");
urchinTracker("/hogehoge/hege");
</script>

みたいな感じです。urchinTrackerはGoogle Analyticsが提供してくれるファンクションです。 ダミーページに階層式にするのは後で統計しやすいような工夫だそうです。

原理はこちらを参照してください:http://markezine.jp/article/detail/1243 ちょっと長いですが、細かく解説した文章です。

こちらも役に立つかと思います。http://creazy.net/2007/06/ajax_access_analyze.html

#php #php #xampp #oracle #環境構築

Oracle Instantclientをインストールすることで、PHPからOracleデータベースへの接続が可能になります。

XAMPPのデフォルトインストールではそれが無効となっています。確認方法はphpinfoのページから’oci8’を検索して何もなかったらつまり接続できてないことです。

手順

  • php.ini(XAMPP/phpのパスにある)の中から;extension=php_oci8.dllを検索して、セミコロン(;)を削除。
  • Oracleから“Instant Client Package – Basic” for Windowsをダウンロードし、任意の場所に解凍。ここではc:\instantclient_11_1とする。
  • Windowsの環境変数pathに上記instantclientが解凍されたパスを追加(c:\instantclient_11_1)
  • そしてWindowsを再起動!
  • Apacheを再起動

確認

phpinfoのページからoci8を検索してあれば成功!

その他

  • ORACLE_HOMEやORACLE_SIDなどの環境変数はInstant Clientでは必要ないから設定しなくても大丈夫だそう。
  • パス設定後Windowsを再起動しないと、”unable to load dynamic library php_oci8.dll”のようなエラーが出た。

全文: http://iain.nl/2011/01/cucumber-vs-steak

Also, the natural language is closer to your understanding of the problem you’re trying to solve. When I write in code, my programmer side becomes active. My programmer side is focussed on solutions. But I want to delay the solution as long as I can, until we have a decent understanding of the problem. So by not writing in code, you can focus more on the problem, rather than on the solution.

ここの「ソリューションをディレー」するところに共感しました。 Cucumberでは自然言語で書けるため、実装から離れた視点でいろんな「Problem」にぶつかりやすい!というのが最もの魅力ですね。 時には本当に実装から離れてプロデューサの目でやりたいことをを考えたいです。そうできないと、いつも「ソリューション」だけに力入れて考えて、もっと重要な「目的」を失うかもしれませんと思います。 もしSteakのような実装の観点から書いたテストコードだとnullとかblankとか、書いてるうちに視野がどんどん狭くなりがちかなと。もちろんそういうテストも重要ですが、「そもそもこんな仕様で大丈夫?ここで何をすべきか?」のような問題にぶつかるためには、やはりCucumberのような自然言語が有利ですね。

あ~いつRoRの仕事ができるかなー

#php #php #cakephp #model #orm
$this->Ingredient->save($newData);
$newIngredientId = $this->Ingredient->id;    // OK
// id以外のフィールドはダメ
$this->Ingredient->name;    // NG
$this->Ingredient->category;    // NG

登録/更新には関係なく。 公式マニュアルでは:

一度保存が完了してしまうと、オブジェクトの ID をモデルオブジェクトの $id プロパティで取得することができます。特に新しいオブジェクトを生成した場合に便利です。

と書いてありますが、id以外のフィールド情報は持ってないようです。 欲しければ$this->dataから取れます。