2010年6月28日月曜日

apacheで「child pid xxxx exit signal File size limit exceeded (25)」エラーがでる

どうも、俺@仕事中です。

昨日とあるWEBサーバでページが表示されない事件が発生しました。
色々調べていると、apacheのerror_logに題名の
[notice] child pid 11737 exit signal File size limit exceeded (25)
のエラーが大量に、、、。

何のこっちゃ!?でしたが、とりあえず何かのファイルサイズがでかすぎる!という意味みたい。
ログファイルを見ていると、phpのエラーログが
$ ls -l php_error_log
-rw-r--r-- 1 nobody root 2147483647 Jun 21 10:30 php_error_log
で止まっている。
中身がとあるNOTICEレベルのエラーがずらーり。
というわけで
# mv php_error_log php_error_log.0 && touch php_error_log && chown nobody php_error_log
してapacheを再起動したら正常に稼働しはじめました。

Linuxには2GBの制限問題というものがある、と初めて知りました。
参考:Linuxで2GBを超えるファイルを作れない::0と1の欠片


まぁ、単純にファイルを削除するとかファイル名を変えるとかで対応できますが、32BitのLinuxOSだと問題ありそうです。
apacheのコンパイル時に
# CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" ./configure --prefix=/usr/local/apache2
とかやれば2GBの問題はなくなるそうです。
参考:httpdで2GBを超えるファイルのリクエストに対応する方法::サラダ(*)

以上でぇぇぇえす。

2010年6月16日水曜日

jQueryを使って別ウィンドウと連携

どうも、俺@残業中です。

今日はjqueryを使って別ウィンドウ(子ウィンドウ)と連携する方法についてメモメモです。

仕様は親ウィンドウにあるインプットボックスに文字を入力すれば、その値を子ウィンドウに表示するものとします。
テスト用に、まず親ウィンドウを開いた瞬間子ウィンドウを開くようにします。
// 親ウィンドウ.js
$(function() {
// 引数は開くファイル名、子ウィンドウ名、そのプロパティ
window.open("child.html", "child", "width=800,height=300");
});
です。
また親ウィンドウにインプットボックスを作ります。
<!-- 親ウィンドウ.html -->
<input type="text" name="name" value="">


次に子ウィンドウ側のjavascriptで、親ウィンドウのインプットボックスに対しEventListenerを貼ります。
// 子ウィンドウ.js
$(function() {
window.opener.$("input").bind("keyup", view);
});
function view() {
$("body").html($(this).val());
}
これだけです。

javascriptのwindow.openerを使って親ウィンドウからの値を子ウィンドウへ渡します。

以上、どえぇぇぇえぇえぇす。

2010年6月9日水曜日

zend frameworkでレスポンスヘッダを扱う

どうも、俺@定時間際です。

今日は前回「ZendFrameworkでViewを無効化する」のつづきのお話になるのですが、Viewのレンダリングを無効化しレスポンスヘッダを開発者の思うように返す方法についてめもめも。

Zend_Controller_Actionの派生クラス内でレスポンスヘッダを変更する場合は
<?php
$response = $this->getResponse();
$response->setHeader("Content-Type", "image/gif"); // 例えば画像出力
// $response->setRedirect("http://google.co.jp", 302); // 例えばリダイレクト

$response->sendResponse();
これ。

やり方たくさんあるっぽいので、もっと便利な別の方法もできますね。


以上。どぇぇぇす。

2010年6月3日木曜日

ZendFrameworkでViewを無効化する

どうも、俺@仕事中 今日2度目の投稿です。
ZendFrameworkを使っていて、Viewを無効化(Viewレンダリングを無効煮する)方法についてめもめも。

やりたい事は、ZendFrameworkで受け付けたリクエストを処理して別サイトへリダイレクトするだけのコントローラーを作る!というものです。


Zend_Controller_Actionを継承したコントローラを作成し、init()メソッドで
$rediretor = $this->_helper->getHelper("Redirector"); // リダイレクトに関する処理をまとめて行う。
$redirector->setCode(302); // ステータスコードを302にセット
$redirector->setExit(true); // リダイレクトの後exit();を行う。

$this->_helper->getHelper("ViewRenderer")->setNeverRender(true); // viewのレンダリングを行わない。
のようにすれば、リダイレクトの処理とViewのレンダリング無効化を初期処理にて行えます。


詳しくはZend Framework アクションヘルパーまで


以上でぇぇぇす(´・ω・`)

mysqlでログインできなくなった

どうも、俺@仕事中です。
今日は開発環境のmysqlサーバへログインできなくなってしまった場合の対処法です。

rootログインも一般アカウントログインもできません。
# mysql -u root
Access denied for user: 'root@localhost' (Using password: NO)
# mysql -u mysql_user
Access denied for user: 'mysql_user@localhost' (Using password: NO)
もちろんパスワードの設定などもしていませんでした。

権限テーブルで何か異常が発生してるのだろう、、と確認したいのですが、mysqlデータベースにすら接続できません。

1)無理やりログインできるようにする
mysqlを立ち上げる際に
# mysqld_safe --skip-grant-tables & 
とやれば権限テーブルを無視してログインできます。
mysql> use mysql
mysql> select * from user;
Empty set (0.00sec)
あじゃぱー!!
userテーブルが空になっちょる!誰やー!?

この状態で
mysql> grant all on *.* to root@localhost;
と打っても「--skip-grant-tablesオプション付けて起動してるからGRANTできひんでー」と怒られます。

2)他のサーバからuserテーブルデータを持ってきた
仕方がないので、他サーバで稼働中のuserテーブルデータをそのまま持ってきてdataディレクトリへ置きました。
# cp user.MYD user.MYI user.frm /usr/local/mysql/data/mysql/
これで通常起動すれば普通に接続できるようになりました。


うむむ、--skip-grant-tablesオプションでログインできるようになったはいいけど、その後GRANT構文を放り込みたい場合はどうしたら良いのでしょう、、?


以上でぇぇぇえぇす。