[PEAR] install を使うための認証付きproxy 用の設定方法

pear で install したらエラーが発生しました。

原因は、認証付きproxy 用の設定をしていなかったためです。

# pear install Services_Amazon-0.8.0

■ エラー内容

No releases available for package "pear.php.net/Services_Amazon"
install failed

pear の設定を確認します。

# pear config-show
 
Configuration (channel pear.php.net):
=====================================
Auto-discover new Channels     auto_discover    <not set>
Default Channel                default_channel  pear.php.net
HTTP Proxy Server Address      http_proxy       <not set>
PEAR server [DEPRECATED]       master_server    pear.php.net
.
.
.

config-set http_proxy で認証付きプロキシの情報を設定します。

# pear config-set http_proxy http://user@pass:proxyserver:port/

user/pass/proxyserver/port は自分のもの。

設定後、 # pear config-show して、HTTP Proxy Server Address http_proxy の部分に設定した http://user@pass:proxyserver:port/ が入っていれば設定は反映されています。

以上です。

[Symfony1.4] テンプレートの変更:setTemplate

Symfony1.4にて、テンプレートの変更について調べたのでメモ。テンプレートの変更には、setTemplateメソッドを使います。

■ テンプレートファイルのパスを直接指定する方法

$this->setTemplate('テンプレートファイルの絶対パス、または、相対パス');

■ アクションに対応するテンプレートを指定する方法

$this->setTemplate('Edit');

この場合、Editアクションに対応するテンプレートを呼び出しています。

■ return sfView::SUCCESS

アクションの処理が全て終わったら、何も書かれていない場合、sfView::SUCCESS がreturnされる。

他にも、sfView::NONE, sfView::ERROR などがある。

■ テンプレートについて調べるときに読む記事。

(公式)

A Gentle Introduction to symfony | 第6章 – コントローラーレイヤーの内側 | symfony | Web PHP Framework

Practical symfony | 14日目: フィード | symfony | Web PHP Framework
 

(ブログ記事など)

例外発生時のテンプレートの変更 – ゆっくり*ゆっくり

symfonyでsymfuldaze

WEBアプリケーション研究室 開発ノート [symfony] 特定のテンプレートを強制的に表示
 

[CSS] floatを解除する「clearfix」

CSSにて、floatを解除する「clearfix」のサンプルコードをメモ。

/* new clearfix */
.clearfix:after {
	visibility: hidden;
	display: block;
	font-size: 0;
	content: " ";
	clear: both;
	height: 0;
	}
* html .clearfix             { zoom: 1; } /* IE6 */
*:first-child+html .clearfix { zoom: 1; } /* IE7 */

以上です。

【参考】

[CSS]floatを解除する「clearfix」のIE6/7に対応した改良版 | コリス はてなブックマーク - [CSS]floatを解除する「clearfix」のIE6/7に対応した改良版 | コリス

[Heroku] Error H99 (Platform error)

Herokuにて、Error H99 (Platform error)というエラーが発生して、Herokuが使えなくなりました。

2011-11-13T07:15:08+00:00 heroku[router]: Error H99 (Platform error) -> GET myapp-staging.heroku.com/ dyno= queue= wait= service= status=503 bytes=
2011-11-13T07:15:08+00:00 heroku[nginx]: 210.4.160.78 - prize [12/Nov/2011:23:15:08 -0800] "GET / HTTP/1.1" 503 607 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:8.0) Gecko/20100101 Firefox/8.0" myapp-staging.heroku.com

Heroku公式サイトを見ると、”H99 is the only error that is caused by the Heroku platform.”と書いてあり、H99はHerokuのプラットフォームによって発生してるようなので、解決方法はなく、Heroku側の対応を待つしかないみたいですね。

H99 – Platform error
This indicates an internal error in the Heroku platform. Unlike all of the other errors which will require action from you to correct, this one does not require action from you. Try again in a minute, or check the status site.

2010-10-06T21:51:07-07:00 heroku[router]: Error H99 (Platform error) -> GET myapp.heroku.com/ web=none queue=0 wait=0ms service=0ms bytes=0
2010-10-06T21:51:07-07:00 heroku[nginx]: GET / HTTP/1.1 | 75.36.147.245 | 8132 | http | 503

[引用元]

Heroku | Dev Center | Heroku Error Codes はてなブックマーク - Heroku | Dev Center | Heroku Error Codes

Herokuの障害状況/解決状況は下記のサイトで確認できます。

Heroku | Status はてなブックマーク - Heroku | Status

ちなみに、僕の場合は30分程度で復旧してくれました。

以上です。

[Ruby] Timeオブジェクトの表示形式を変更する方法

Rubyにて、Timeオブジェクトの表示形式を変更する方法を調べたのでメモ。

Time.now.strftime("%Y-%m-%d %H:%M:%S") #=> "2011-11-13 00:31:21"

例えば、PostgreSQLのtimestamp型をdate型の値のように表示したいとします。

eventテーブルのstart_atレコードがtimestamp型だとすると、以下のように書けばOKです。

@event.start_at.strftime("%Y-%m-%d") #=> "2011-11-13"

以上です。

【参考】

逆引きRuby – 日付と時刻 はてなブックマーク - 逆引きRuby - 日付と時刻

[エラー] Invalid row key specified: ~ , referred to in ~

Symfony1.4にて、フィクスチャーファイルからデータベースにデータを入れようとしたらエラー。

# php symfony doctrine:data-load

■ エラー内容

Invalid row key specified: (user) , referred to in (rental) Rental_4

MySQLの外部キー制約のため、関連付けのある部分に値がを入れておらず、エラーになっていました。

mysql> show create table rental;
+--------+--| Table  | Create Table
---------------------------------------+
| rental | CREATE TABLE `rental` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `user_id` bigint(20) DEFAULT NULL,
  `rented_at` datetime DEFAULT NULL,
  `returned_at` datetime DEFAULT NULL,
  `delete_flag` tinyint(1) NOT NULL DEFAULT '0',
  `created_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL,
  `slug` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `rental_sluggable_idx` (`slug`),
  KEY `user_id_idx` (`user_id`),
  CONSTRAINT `rental_user_id_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci |
+--------+----------------------------+

ここの設定のせいで、外部キーがあるカラムをNULLにできませんでした。

CONSTRAINT `rental_user_id_user_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE

■ 解決方法

MySQLにログインして、下記のコマンドで外部キーを削除します。

・参考:MySQL :: MySQL 5.1 リファレンスマニュアル (オンラインヘルプ) :: 9.4.4 FOREIGN KEY 制約

ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol;

あと、関連付けのあるカラムのfixtureファイルの書き方なんですが、以下のように書いてはいけません。

Rental:
  Rental_1:
    User:               [User_1]
    rented_at:          '2011-01-01'
    returned_at:
    delete_flag:        0
  Rental_2:
    User:
    rented_at:
    returned_at:
    delete_flag:        0

Rental_2 の User: のように書くと、Userに対応するオブジェクトを探しに行って、なくてエラーになるそうです。

代わりに、User: の部分を user_id: と書けばOKです。もしくは、値を入れないので user_id: そのものを書かないという選択肢もあります。

以上です。

[エラー] Unable to parse string: Unable to parse line ~. [Symfony1.4]

Symfony1.4にて、データベースにフィクスチャーファイルを読み込んだ際にエラーが出ました。

# php symfony doctrine:data-load

■ fixture.yml

Book:
  Book1
    isbn:               9784478012031
    asin:               4478012032
    title:              もし高校野球の女子マネージャーがドラッカーの『マネジメント』を読んだら
    memo:               |
                        敏腕マネージャーと野球部の仲間たちが甲子園を目指して奮闘する青春小説。

■ エラー発生その1

Unable to parse string: Unable to parse line 34 (Book1).

Book1 の後に : がありませんでした。 : を付けて解決。
 

■ エラー発生その2

Unable to parse string: A YAML file cannot contain tabs as indentation at line 46 ( 敏腕マネージャーと野球部の仲間たちが甲子園を目指して奮闘する青春小説。).

タブがいけなかった。YAMLは行の先頭付近はタブでのインデントはダメらしいです。

以上です。

[Apache] SSL環境を構築する方法

Apache + SSL 環境を構築したので手順をメモ。

ほぼ下記の記事を読めばOKです。

[Think IT] 第7回:Apache+SSL環境を構築しよう! (1/3)

以下、手順です。
 

ApacheのSSL設定

まず、SSL用の設定ファイル httpd-ssl.conf を読み込むようにコメントアウトを外します。

# vi /usr/local/apache2/conf/httpd.conf
Include conf/extra/httpd-ssl.conf

次に、httpd-ssl.conf を編集します。

# vi /usr/local/apache2/conf/extra/httpd-ssl.conf

VirtualHost にグローバルIP、DocumentRoot、ServerName、ServerAdmin を適宜、変更します。

また、SSLCertificateFile と SSLCertificateKeyFile の箇所をそれぞれ証明書のパス、秘密鍵のパスに変更します。

<VirtualHost xxx.xxx.xxx.xxx:443>
DocumentRoot "/usr/local/apache2/htdocs"
ServerName example.com:443
ServerAdmin you@example.com
 
SSLCertificateFile "/usr/local/apache2/conf/server.crt"
SSLCertificateKeyFile "/usr/local/apache2/conf/server.key"

最後に、変更が完了したら、Apacheを再起動します。

# service httpd configtest
# service httpd restart

以上です。

[SSH] Putty用の秘密鍵をPoderosa用に作成する方法

Windows用 SSH クライアントをPuttyからPoderosaへ乗り換えました。

そのときに秘密鍵もPutty用のものからPoderosa用に作成し直す必要があったので、手順をメモ。
 

■ 秘密鍵のファイル名

  • Putty: id_rsa_putty.ppk
  • Poderosa: id_rsa_poderosa.sshcom

■ 手順

1. 公開鍵/秘密鍵作成ツール PuTTYgen にて「File」→「Load private key」で Putty用 秘密鍵 id_rsa_putty.ppk を読み込む

2.「Conversions」→「Export ssh.com key」で Poderosa用 秘密鍵を作成する(ここではファイル名を id_rsa_poderosa.sshcom としました)

以上です。

【参考】

Puttyで使ってた秘密鍵をPoderosaに移行する方法 – ABラボラトリ はてなブックマーク - Puttyで使ってた秘密鍵をPoderosaに移行する方法 - ABラボラトリ

OpnSSHの鍵をPoderosa用に変換する: 端っこなひとの備忘録 はてなブックマーク - OpnSSHの鍵をPoderosa用に変換する: 端っこなひとの備忘録

[Security]「SQLインジェクション対策」を理解するときに読むべきサイト

『よくわかるPHPの教科書』の著者 徳丸浩氏のブログを参考にして、「SQLインジェクション対策」を理解するときに読むべき記事を自分用にまとめました。

・参考:「SQLインジェクション対策」でGoogle検索して上位15記事を検証した – ockeghem(徳丸浩)の日記 はてなブックマーク - 「SQLインジェクション対策」でGoogle検索して上位15記事を検証した - ockeghem(徳丸浩)の日記

まず、上記記事のまとめ部分から抜粋。

  • SQLを動的に組み立てない
  • SQLのパラメータ指定には静的プレースホルダを用いる

この2つを守っている限り、アプリケーションやSQL呼び出しライブラリなどにバグがあっても、原理的にSQLインジェクション脆弱性は発生しません。

SQLインジェクションについて書くときに以下のメッセージを必ず含めて欲しいです。

  • 単にプリペアドステートメントを使え
  • 絶対に文字列結合でSQLを構築しようとしてはいけない
  • IPAの「安全なSQLの呼び出し方」を読むこと

引用元:[SQLインジェクション対策]Webアプリケーションとかの入門本みたいのを書く人への心からのお願い。 – *「ふっかつのじゅもんがちがいます。」withぬこ

プリペアドステートメントって何?って方はココら辺に分かりやすく書いてあるのでおすすめ。

プリペアドステートメント – データベース接続(PEAR::DB) – PEAR入門 はてなブックマーク - プリペアドステートメント - データベース接続(PEAR::DB) - PEAR入門

PHP: プリペアドステートメントおよびストアドプロシージャ – Manual はてなブックマーク - PHP: プリペアドステートメントおよびストアドプロシージャ - Manual
 

以下、「SQLインジェクション対策」を理解するときに読みたい記事たち。

・初心者向け:[SQLインジェクション対策]Webアプリケーションとかの入門本みたいのを書く人への心からのお願い。 – *「ふっかつのじゅもんがちがいます。」withぬこ はてなブックマーク - [SQLインジェクション対策]Webアプリケーションとかの入門本みたいのを書く人への心からのお願い。 - *「ふっかつのじゅもんがちがいます。」withぬこ

・中級者向け:PHPでのSQLインジェクション対策 – エスケープ・クォート編 — Let’s Postgres はてなブックマーク - PHPでのSQLインジェクション対策 - エスケープ・クォート編 — Let's Postgres

基本を抑えたら、IPAの「安全なSQLの呼び出し方」を読む。

情報処理推進機構:情報セキュリティ:脆弱性対策:安全なウェブサイトの作り方 はてなブックマーク - 情報処理推進機構:情報セキュリティ:脆弱性対策:安全なウェブサイトの作り方

以上です。