Archive for the ‘heteml’ Category

Zend Frameworkで何か作ってみた(参考にしたサイトメモ)

単なるリンク集です…。
初めて扱ったので、そのために参考にしたサイトを載せておきます。

●本家

●基本

●今回はすっ飛ばしたけど、読んでおいて欲しいmodelのはなし。

CakePHPでは標準ではActiveRecordを採用していると思いますが、ここがCakePHPやsymfonyで学習してきた人が一番最初に戸惑う部分ではないかと思います。

Zend Frameworkのメイン開発者の方のコメントとして、Model !== Databaseだという主張が明確に述べられています。

正直、ここ、この概念で一番はまりました。
まさに、ずっとCakePHPやsymfonyでやってきたので(^_^;
実は今回はmodelは使ってません。

●データベース

●フォーム

formに関してはsymfonyのsfFormみたいなかんじでやる方法もあるけど今回は割愛。

●レイアウトとビュー

●ルーティング

●環境依存

public/index.phpで、set_include_path()することで解決。
余談ですが、ヘテムルだと「CLIの」phpを実行するとPHP4が呼ばれるので、bin/zf.shのPHP CLIパス検索処理部分で「php」になってるところを「php5」にしてください(合計3つ)。

# find php: pear first, command -v second, straight up php lastly
if test "@php_bin@" != '@'php_bin'@'; then
    PHP_BIN="@php_bin@"
elif command -v php5 1>/dev/null 2>/dev/null; then
    PHP_BIN=`command -v php5`
else
    PHP_BIN=php5
fi

●そんでもって。

作ったのが、「●●少女まどか☆マギカ(タイトルジェネレータ)」です。
アイディアそのものは2日ほど前に漠然と浮かんでて、実装は今朝考えました。10時くらいからとりかかって、Zend Frameworkのドキュメントを読みながら15時くらいにはできあがりました。
各種サイトを読んでからというよりは、読みながら必死になって書いたほうが案外なんとかなったというか…。

今回は、魔法少女まどか☆マギカだけのになりましたが、他のも簡単に作れるように今後コードを追加する予定。
(そのときは名前変えて新しくリリースの予定)

hetemlで共用ssl(https)でcakephpを使う方法

先日ログを見たところ、検索キーワードランキングでダントツの1位で「cakephp heteml ssl」とかきてました。
該当記事がなかったので大変申し訳ございませんでした。
と同時にこれは書け、ということなので、一応書いておきます。
(この前ようやくうまくいったんで)

・・・ま、いろいろ頑張った結果、こうするしかなかったです。


--- A/webroot/index.php      2010-06-05 21:34:15.000000000 +0900
+++ B/webroot/index.php   2010-06-06 12:42:34.000000000 +0900
@@ -78,6 +78,12 @@
                        define('CORE_PATH', CAKE_CORE_INCLUDE_PATH . DS);
                }
        }
+       // define img/css/js
+       define ( "URLBASE" , "/../自分のユーザー名/ディレクトリ/" ) ;
+        define('IMAGES_URL', URLBASE . 'img/');
+        define('CSS_URL', URLBASE . 'css/');
+        define('JS_URL', URLBASE . 'js/');
+
        if (!include(CORE_PATH . 'cake' . DS . 'bootstrap.php')) {
                trigger_error("CakePHP core could not be found.  Check the value of CAKE_CORE_INCLUDE_PATH in APP/webroot/index.php.  It should point to the directory containing your " . DS . "cake core directory and your " . DS . "vendors root directory.", E_USER_ERROR);
        }

URLBASE、IMAGES_URL、CSS_URL、JS_URLを webroot/index.php で変更するしかなかったです。
しかもURLBASEを相対パスで書かなければならないという。

hetemlにgitの俺専用リポジトリを作る

hetemlで、sshとgitが使えるのでやってみました。
作ってpushするとこまでです。
※案外すんなりいったし、これからよく使うと思うのでメモ。

●その0:《はじめに》
リモートリポジトリのパスを $HOME/git/example と仮定します。

●その1:heteml側でやること

$ mkdir git
$ mkdir git/example
$ cd git/example
$ git init --bare

●その2:ローカルでやること

$ cd example
$ git init
$ git add .
$ git commit -a
$ git remote add origin ssh://《自分のユーザー名》@《自分のサーバ名》:《sshポート番号》/(home directory)/git/example/
$ git push orign master

home directory んとこは home/sites/heteml/users???/(中略)/ユーザー名 が入ります。
要はポート番号打ったあとから、リモートリポジトリでpwdした結果をコピペすればいいです。

うまくいったら、git push origin masterでこう出ます

$ git push origin master
-----------------------------------------------------
--***-------------------------------------------***--
--***---------------***-------------------------***--
--***---------------******----------------------***--
--********-********-******-********-***********-***--
--********-***--***-***----***--***-***********-***--
--***--***-********-***----********-***-***-***-***--
--***--***-***------******-***------***-***-***-***--
--***--***-********-******-********-***-***-***-***--
-----------------------------------------------------


username@ssh***.heteml.jp's password:
Counting objects: 90, done.
Compressing objects: 100% (75/75), done.
Writing objects: 100% (90/90), 35.99 KiB, done.
Total 90 (delta 14), reused 0 (delta 0)
To ssh://username@ssh***.heteml.jp:****/(home directory)/git/example
 * [new branch]      master -> master
$

こんなの出て失敗したら、多分git pushの書き方を間違えている。

No refs in common and none specified; doing nothing.
Perhaps you should specify a branch such as 'master'.
fatal: The remote end hung up unexpectedly

あとはgit pushしたりpullしたり、です。

なお、git remote addでリモート等の指定を間違えたときは、いったん git remote rm して再度 git remote add すればOK。

 
参考にした:
「ハッカー」って言葉の響きが好きです。:Git: pull/pushの設定

hetemlでPHP OpenID Libraryを使うときの注意事項(mixi.jpの場合)

というか、hetemlでOpenIDでmixiを使うときにdiscoverに失敗するって例なんだけどね。
CakePHPのexamplesにある「discover.php」を使っても「discoverに失敗したお」エラーが出るので確認はできると思います。
2010050202

なお、今回はこの場合が該当します。

※Symfonyに関しては同等のライブラリ提供は無さげなので今回は割愛です。
なお、symfonyでOpenIDを実装してみた | ueblogで実装されているようです。

まあ、ぶっちゃけ解決策は「証明書インストールしる!」ってことです。
○mixiでログインできない件
きさら’s – 利用報告(heteml)
○証明書インストールの方法(root権限がない場合)
mixi OpenIDのサンプルコードをPHP OpenID Libraryを使って動かしてみた(訂正) – 大阪 本町で働くソーシャルアプリ開発者 ダイアリー

Auth_Yadis_ParanoidHTTPFetcher#get関数と、Auth_Yadis_ParanoidHTTPFetcher#post関数でcurl_exec関数を実行する直前の、132行目と196行目に下記のコードを追記

このへんを参照しました。
(1)まず、https://mixi.jp/ にアクセスして、証明書を保存する。
(2)保存した証明書をサーバへUPする。
(3)Yadisのソースで、cURLでアクセスしてる部分でcURLオプション(CURLOPT_CAINFO) を変更する。
ソース変更点は、こういうかんじになります。

--- old/Auth/Yadis/ParanoidHTTPFetcher.php	2009-04-21 11:31:20.000000000 +0900
+++ new/Auth/Yadis/ParanoidHTTPFetcher.php	2010-05-02 16:14:15.000000000 +0900
@@ -128,6 +128,12 @@
             curl_setopt($c, CURLOPT_TIMEOUT, $off);
             curl_setopt($c, CURLOPT_URL, $url);
 
+            if ( $this->isHTTPS( $url )  && mb_ereg( "mixi\.jp" , $url ) ) {
+                curl_setopt( 
+                        $c , 
+                        CURLOPT_CAINFO ,
+                        '/home/sites/heteml/users***/*/*/*/*/ssl/mixi.jp.crt' ) ;
+            }
             curl_exec($c);
 
             $code = curl_getinfo($c, CURLINFO_HTTP_CODE);
@@ -191,6 +197,12 @@
         curl_setopt($c, CURLOPT_URL, $url);
         curl_setopt($c, CURLOPT_WRITEFUNCTION,
                     array(&$this, "_writeData"));
+            if ( $this->isHTTPS( $url )  && mb_ereg( "mixi\.jp" , $url ) ) {
+                curl_setopt( 
+                        $c , 
+                        CURLOPT_CAINFO ,
+                        '/home/sites/heteml/users***/*/*/*/*/*/ssl/mixi.jp.crt' ) ;
+            }
 
         curl_exec($c);

これで、さっくり動きました。
あ、/home/sites〜に関しては各自のホームディレクトリと証明書のある場所を指定してください。

なお、証明書に関する件はFAQにも述べられています

※追記
mixi.jp 以外の場合に挙動がおかしくなるのでなおしました。
証明書が「ない」OP毎にこの処理を追加してあげる必要があります。

hetemlでCakePHPを使うときの.htaccess設定注意事項

さきほどはまってしまったので、忘れないためにもメモ。

インストールは普通にやってOK。特にはまった記憶は無いです。
私の場合、webディレクトリと(CakePHPの)appディレクトリをわけています。
このへんに関しては省略。

それはさておき。
.htaccessが通常の設定のやりかたと違うので、忘れないためにメモ。
ちなみに、RewriteBaseの設定です。

(1)http://*.heteml.jp/hoge/ でアクセスするときは、RewriteBaseの設定は不要
(2)http://example.com/ (独自ドメイン)でアクセスするときは、RewriteBaseの設定が必要

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase    /
    RewriteRule    ^$    webroot/    [L]
    RewriteRule    (.*) webroot/$1    [L]
</IfModule>

※省略しましたが webroot/.htaccess にも同様に RewriteBase を追加してあげてください。

つまり、Apacheのデフォルト設定でやった時と完全に逆です。

ちなみに。
RewriteBaseを設定するということは、アクセス方法は(1)か(2)のどちらかしか選べません、ということです。
(2)の設定で(1)にアクセスされる心配は(たぶん)ありません。

・・・というか。
確実なのは、どっちにせよ「RewriteBaseでちゃんと明示しとけ」ってことですねw