アーカイブ

2009 年 1 月 のアーカイブ

WordPressでSyntax Highlight

2009 年 1 月 10 日 コメントはありません

WordPressのSyntax Highlightプラグインは何個かあるのですが、オススメはこちら。
Syntax Highlighter for WordPress
他のプラグインと違いHTMLエンティティ化(<→&lt;等)してくれるので、HTMLもそのまま貼り付けることができます。
はてな記法でいうところのスーパーpreですね。
注意点として、htmlentitiesの第4引数を指定してあるので、PHP5.2.3以降でないと利用できません。

カテゴリー: 日記 タグ:

redmineのリポジトリブラウザでphpファイルが404エラーになる

2009 年 1 月 10 日 コメント 1 件

RedmineをPassengerで動作させたところ、リポジトリブラウザで特定のファイルが404エラーになるようになりました。

script '/var/www/redmine/public/repositories/changes/project/***.php' not found or unable to stat

phpファイルと処理しようとして実際存在しないのでエラーとなっていたので、phpモジュールを動作しないように設定しました。
/etc/httpd/conf.d/vhosts-project.cheki.net.conf

<VirtualHost *:80>
    ServerName project.cheki.net
    DocumentRoot /var/www/redmine/public
    ErrorLog logs/project.cheki.net-error_log
    CustomLog logs/project.cheki.net-access_log combined
    <Directory /var/www/redmine/public>
        php_flag engine off
    </Directory>
</VirtualHost>
カテゴリー: 日記 タグ:

tinyurlの変換元URLを取得する

2009 年 1 月 8 日 コメントはありません

たんにLocationするだけなので、レスポンスヘッダから取得できる。

$ php -r 'echo http_head("http://tinyurl.com/9utxby");'
HTTP/1.1 301 Moved Permanently
X-Powered-By: PHP/5.2.8
Location: http://sankei.jp.msn.com/life/trend/080613/trd0806131533009-n1.htm
Content-type: text/html
Date: Wed, 07 Jan 2009 16:31:12 GMT
Server: TinyURL/1.6
PHP
<?php
$request = new HttpRequest();
$request->setUrl('http://tinyurl.com/9utxby');
$request->setMethod(HttpRequest::METH_HEAD);
$response = $request->send();
$header = $request->getResponseHeader();
var_dump($header['Location']);
カテゴリー: 日記 タグ:

pecl_httpでtwitterのユーザータイムラインを取得する

2009 年 1 月 8 日 コメントはありません

先日のAM3:00以降のデータを取得する。

PHP
<?php
$request = new HttpRequest();
$request->setUrl('http://twitter.com/statuses/user_timeline.json');
$request->enableCookies();
$request->setOptions(array(
    'timeout' => 3,
    'httpauth' => 'user:passwd',
    'httpauthtype' => HTTP_AUTH_BASIC,
    'redirect' => 1,
    'unrestrictedauth' => true,
    'referer' => '',
    'useragent' => 'wp_twitter API/1.0',
    'compress' => true,
    'encodecookies' => true,
    'lastmodified' => mktime(0, 0, 3) - 60*60*24,
));
$request->setContentType('application/x-www-form-urlencoded');
$request->setMethod(HttpRequest::METH_GET);
$response = $request->send();
$json = $request->getResponseBody();
var_dump(json_decode($json));

via pecl_httpでtwitter
via Twitter API 仕様書 (勝手に日本語訳シリーズ)

カテゴリー: 日記 タグ:

pecl_httpをインストールする

2009 年 1 月 8 日 コメント 1 件

http_getがなかなかエロイpeclのpecl_httpをインストールする。
fedora10のrpmパッケージがyumで見つからなかったので、peclコマンドにてインストール。
peclコマンドを含めいろいろ足りなかったのでyumる。

$sudo yum install zlib-devel
$sudo yum install libcurl-devel
$sudo yum install php-devel

peclコマンドでインストール

sudo pecl install pecl_http

/etc/php.iniに追記する。

extension=http.so
カテゴリー: 日記 タグ:

sfGuardPluginのsfGuardUserモデルをオーバーライドする

2009 年 1 月 7 日 コメントはありません

sfGuard extended class in lib/model/sfGuardPlugin/
and then add this in my sfGuardUserPeer class
how to override sfGuardUser? – symfony developers | Google グループ

正確にはオーバーライドしていませんが。
lib/model/ではなくlib/model/sfGuardPlugin以下に配置する。

カテゴリー: 日記 タグ:

symfonyのsfApplyPlugin

2009 年 1 月 7 日 コメントはありません

sfGuardPlugin依存のユーザー登録画面プラグイン
http://www.symfony-project.org/plugins/sfApplyPlugin

できること

  • apply
    1. ユーザー登録画面、ユーザー名、パスワード、メールアドレス入力
    2. 登録完了画面のURLを送信する
  • comfirm
    1. 登録完了画面、ユーザーが利用可能となる
    2. ログイン状態になる
  • reset-request
    1. ユーザー名を入力することにより登録しているメールアドレスにパスワード変更画面のURLを送信する
  • reset
    1. 新しいパスワードを入力することによりパスワードが変更される
    2. ログイン状態になる
  • settings
    1. フルネームの変更(ユーザーID、メールアドレスは変更できない)
    2. パスワード変更は上記のreset-requestを利用

利用するには?

前準備

sfGuardPluginをインストールし動作するように設定しておく

インストール

./symfony plugin-install http://plugins.symfony-project.org/sfApplyPlugin

設定

  • データベースを作成するため「config/scheme.yml」に以下を追加
    • プラグインページのymlはパースエラーしてるので注意
      propel:
        sf_guard_user_profile:
          _attributes:
            phpName: sfGuardUserProfile
          user_id:
            type: integer
            foreignTable: sf_guard_user
            foreignReference: id
            required: true
            onDelete: cascade
          email:
            type: varchar(80)
            index: yes
          fullname:
            type: varchar(80)
          validate:
            type: varchar(17)
            index: yes
      
  • DBの作成、modelの作成をする
    ./symfony propel-build-all
  • ルーティングの設定のため「apps/{app}/config/routing.yml」に以下を追加
    • sfGuardPluginの”forgot your password?”のリンクを/reset-requestにします
      apply:
        url:  /apply
        param: { module: sfApply, action: apply }
      
      reset:
        url: /reset
        param: { module: sfApply, action: reset }
      
      resetRequest:
        url: /reset-request
        param: { module: sfApply, action: resetRequest }
      
      validate:
        url: /confirm/:validate
        param: { module: sfApply, action: confirm }
      
      settings:
        url: /settings
        param: { module: sfApply, action: settings }
      
      # We implement the missing sf_guard_password feature from sfGuardPlugin
      sf_guard_password:
        url: /reset-request
        param: { module: sfApply, action: resetRequest }
      
  • プラグインを有効化のため「apps/{app}/config/settings.yml」に以下を追加
    enabled_modules:        [default, sfGuardAuth, sfApply]
  • 送信元、送信者を「apps/{app}/config/app.yml」にに追加
    all:
      sfApplyPlugin:
        from:
          email: "info@example.com"
          fullname: "送信者"
    

メール内容を修正するには?

  • 以下のファイルを新規作成する
  • 新規登録
    apps/{app}/modules/sfApply/templates/sendValidateNew.php
  • パスワード変更
    apps/{app}/modules/sfApply/templates/sendValidateReset.php

actionを修正するには?

sfApplyActionsを作成する

apps/{app}/modules/sfGuardAuth?/actions/actions.class.php
<?php
require_once sfConfig::get('sf_plugins_dir') . '/sfApplyPlugin/modules/sfApply/lib/BasesfApplyActions.class.php';

class sfApplyActions extends BasesfApplyActions
{
}
カテゴリー: 日記 タグ:

やっぱりredmineはpassengerで

2009 年 1 月 7 日 コメントはありません

redmineを導入するではpasengerを利用しないことにしたのですが、やっぱり利用したほうがいいんじゃないかということで利用します。
最小構成でインストールしたfedora10だったので、ruby-devel、httpd-devel、gcc、gcc-c++とか事前にyum installしました。
WEBrickの停止

# kill -9 プロセスID

passengerのインストール

# gem install passenger
# passenger-install-apache2-module

ポリシーとして/etc/httpd/conf/httpd.confは修正せず/etc/httpd/conf.d/にconfファイルを作成します。
Passengerの設定は以下のファイルを作成し設定しました。
/etc/httpd/conf.d/rails.conf

LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.0.6/ext/apache2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.0.6
PassengerRuby /usr/bin/ruby

VirtualHost周りの設定ファイルはvhosts.conf、ドメインごとの設定はvhosts-ドメイン.confとします
/etc/httpd/conf.d/vhosts.conf

NameVirtualHost *:80

/etc/httpd/conf.d/vhosts-redmine.example.jp.conf

<VirtualHost *:80>
    ServerName redmine.example.jp
    DocumentRoot /var/www/redmine/public
</VirtualHost>

昨日つくったファイルは削除し、apacheを再起動します。

# rm /etc/httpd/conf.d/redmine.conf
# service httpd configtest
# service httpd restart

エラーでてたのでログを確認したところ、sessionディレクトリに書き込み権限がなかったようです。

# chmod 0777 -R /var/www/redmine/tmp
カテゴリー: 日記 タグ:

symfony1.0のサポートはPHP5.0ですが

2009 年 1 月 7 日 コメントはありません

symfony1.0のサポートはPHP5.0ですが、開発はPHP5.2とPEARが推奨されます。
プラグインの利用でPHP5.2とPEARが必須です。

$ ./symfony plugin-install http://plugins.symfony-project.com/sfJqueryPlugin
PHP Fatal error:  Call to undefined function date_default_timezone_set() in /path/to/lib/vendor/symfony/data/tasks/sfPakePlugins.php on line 189

開発だけは5.2、PEAR必須なだけで、動作には必要ないかもしれません。
各種プラグインは1.0対応を謳ってるのにインストールしようとしたらPHP>5.10とでてくるものがあったり怪しいので注意が必要です。
PHP5.2使いたいところなんですが、CentOS5.2はPHP5.1.6なんですよね。。。

カテゴリー: 日記 タグ:

phpのExceptionはgetMessageをするより__toStringしたほうがいい

2009 年 1 月 7 日 コメントはありません
PHP
<?php
try {
  throw new Exception('message');
} catch (Exception $e) {
    echo $e->getMessage() . "\n";
    echo $e->__toString() . "\n";
    exit(1);
}
?>
$ php /home/cockok/tmp/exception.php
message
exception 'Exception' with message 'message' in /home/cockok/tmp/exception.php:2
Stack trace:
#0 {main}

シェルが値を返しました 1
カテゴリー: 日記 タグ: