RSS
カレンダー
2005/2
27
28
2005/3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2005/4
1
2
カテゴリー
最近の記事
フロントの悩み
表紙に表示されるかのテスト
ブラジルへ
p2のスレ
xangoについて独語するスレ
sennaスレ
やぁやぁ
月別アーカイヴ
2005年
2004年
LINKS
2ちゃんねる検索
未来検索ブラジル
a group
powered by
ototoy
blog
ブラジル!
2005年03月18日
p2のスレ
このスレでp2の開発状況を語ると聞いて、飛んできました。
Tweet
|
Posted By あき
投稿日: 2005年3月18日 11時7分
更新日: 2008年11月14日 20時43分
コメント
おつですおつです。
by ゆげ - 2005年3月18日 11時36分
18日の22時頃よりp2.2ch.netが重くなる。
メモリのfreeが底をつくあたりで、なぜか重くなってしまう症状があるのだ。
今回で2度目である。
MLに投げると、moriさんが援軍に来てくれた。
moriさんによると、phpの中でstatとopenを大量に発行しているのが、原因ではないかとのこと。
ユーザ数×読んだスレッド数と、扱うファイル数が大量な上に、PHPの発行するsystem callが冗長なようだ。
たけなかさんもfileのcacheを指摘されており、また、ぼく自身もfile周りの負担を感じている。
もはや全会一致の勢いで、DB化は必須であるとの結論に至った。
ということで、ひとまず再起動して、動作の軽快さを取り戻そうとした時、問題発生が!
先生!再起動に失敗して、サーバが起動しません!!
by あき - 2005年3月19日 1時4分
おつですおつです。
by ゆげ - 2005年3月19日 1時14分
PHP4はオブジェクトをコピーして渡すのに対して、PHP5はオブジェクトを参照渡しするのがデフォルトの動作だ。
p2.2ch.netでは、PHP4を使っているので、基本動作として、オブジェクトをコピーしていたわけだけど、これを2日ほど前から、コードを書き換えて参照渡しするように変更してみた。PHPの場合、速度はあまり変わらないそうなのだが、多少はメモリの節約効果があるかもしれない…。
by あき - 2005年4月19日 1時23分
プロファイラとかあると便利なんですけどねー。関数毎に呼出回数と実行時間の統計がとれるとチューニングがめっさ楽なのに。
結局いつも手動でやってます。
Zendのツールでそういうのあるのかなぁ。
by nt - 2005年4月19日 5時31分
利用したことないですけど、Zend Studioでできるっぽいです。
僕はこのクラスを使ってます。
http://www
.adepteo
.net/profiler
/
手動でマーキングが必要ですけど、一応、関数毎に呼出回数と実行時間の統計がとれます。
配列にたくさんのオブジェクトを放り込む処理を参照渡しにしたところ、値渡しに比べて30%以上速くなったのを確認できました。
ただ、PHPの場合、参照渡しにすると必ず速くなるかというと、ケースバイケースな感じがします。
by あき - 2005年4月20日 7時2分
調べてみたら、上のprofiler.incよりも、PEARのProfiler.phpの方が、高機能っぽくて、良さっぽ。
by あき - 2005年4月20日 8時16分
たった今、xdebugというのを発見した!
http://www
.xdebug
.org/docs
-profiling.p
hp
これは使えそう。
by あき - 2005年4月20日 8時30分
apdというのも見つけた。これもxdebugと同じく自動統計が取れるらしい。
http://jp
.php
.net/manual
/ja
/ref.ap
d.php
あと、念のため、PEARのProfiler.phpというのは、Benchmark/Profiler.phpのこと。
by あき - 2005年4月20日 11時44分
なんか、一杯ありますね。心情的にはPEARかなぁぁぁ。でも、apdって組み込みっぽいし。。。悩むー。
by nt - 2005年4月22日 2時8分
メモメモ、、
p2.2ch.netでfree memoryが底をつくと、cpu負荷が悪化する症状はまだ健在っぽい。しかし、以前に比べると我慢できないほどの重さではなくなっている。
by あき - 2005年4月25日 2時53分
次は、モリタポによるDAT取得を実装したい。
既に準備環境は整っていたものの、課モリタポが絡むので、実装に慎重になっていたが、優先順位を高める。
by あき - 2005年4月25日 16時43分
また発見。PHP用高機能デバッガ/プロファイラ「dbg」
http://itpro
.nikkeibp
.c
o
.jp/members
/ITPro
/os
s
/20041110
/15240
8
/index3.shtml
自動統計のできるのは全部組み込みになりますね。
by あき - 2005年4月25日 20時20分
アクティブユーザ数を調べてみた。
過去3日以内に、p2.2ch.netを利用したユーザ数は1029人。
総登録者数が2664人だから、アクティブな利用者は大体3分の1以上になる。
思ったより多かった!(10分の1くらいかと思っていた)
by あき - 2005年4月27日 18時29分
クロスサイトリクエストフォージェリ(CSRF)の正しい対策方法
http://takagi
-hiromitsu
.jp/diary
/20050427.h
tml#p01
p2.2ch.netでも対策を強化しておいた。
by あき - 2005年4月29日 4時25分
試しに、pear install で xdebugを入れたら、重いしapache落ちるし不安定でとても使えなかった。。う〜ん。
by あき - 2005年4月30日 17時28分
xdebugは、PHPAとぶつかっていたようだ。PHPAを外すと、正常動作した。なかなかいい感じ。
by あき - 2005年4月30日 18時12分
p2.2ch.netのApacheが反応しない時は、自動で復帰するようなスクリプトを書いた。様子をみて、実際にうまく動くのを確認できたら、status mlにも自動報告メールを送るようにしたい。
by あき - 2005年5月2日 10時47分
linuxじゃないとP2って動かないんでしたっけ?
by ひろゆき - 2005年5月2日 21時4分
>>20
PHPの動くWebサーバなら大体何でも動くはずです〜!
by あき - 2005年5月2日 21時55分
いっかい、FreeBSDに入れてみたりすると、バグの切り分けが出来たりするやも、、
by ひろゆき - 2005年5月3日 16時3分
そうだなぁ…
その場合はやっぱり実運用してみた方がいいですよね。
by あき - 2005年5月5日 21時49分
そーですね。実運用重要。
さっき、なぜかp2.2ch.netのサービスが止まってたので復活させときました。
by nt - 2005年5月11日 1時21分
PHPでセッションを使うとフレーム表示処理が順番待ちになって困ると思っていた件について、
セッションデータの扱いを冒頭で処理してしまって、
明示的に session_write_close() を行えば簡単に解決することに気付いた。
http://jp
.php
.net/manual
/ja
/functi
on.session
-write
-close.php
にずばり書いていた。。
>>24
ありがとうございますー。
サーバについては、まだもう少し、今のサーバ環境でも工夫の余地があるので、
このままもうちょっと粘ってみようかな、と・・。
以前のようには重くならなくなった気がします。
ただたまにapacheが変になるのはまだ様子見。
by あき - 2005年5月30日 9時41分
eAcceleratorを利用すると、PHPでも簡単にデータのメモリ保存ができる。
そこで、subject.txtの情報保持をメモリ内で扱ってみようと試みた。
【1】
まず、subject.txtからスレッドリスト情報を抽出したものを、
メモリ内に保存しようとしたが、
リスト情報にまとめると意外と多くのメモリを消費することがわかった。(750K→2M)
メモリ消費量に対して、速度向上の期待値は0.1秒程度しかないので、
ファイルでシリアライズキャッシュする方法も含めて、これはパスした。
【2】
で、subject.txtをそのまま、メモリ内で保持しようかとやってみたけれども、
パフォーマンスがほとんど変わらなかったため、これもやめた。
一応、コード自体は残している。
by あき - 2005年6月7日 10時48分
PHPを4.3.11から4.4.0にアップデートした。
今回もメモリ関連のバグフィックスがあったようだ。
php.2ch.netも、いろいろと手を入れたのが功を奏したのだろうか、初期の頃に比べると、ダウンする頻度が随分下がった。今回のアップデートでさらに安定するといいなぁ。
現在の環境は PHP 4.4.0 + eAccelerator 0.9.3 となった。
by あき - 2005年7月19日 21時32分
PHPのmb_send_mail()を使う時に、文字コードの扱いがややこしかったので、まとめてみた。
■普通のメールの場合
RFCに従うと、日本語メールの、
文字コードは「ISO-2022-JP」、改行コードは「CR+LF」であり、
ヘッダの日本語部分は、さらにMIMEエンコードを施したものとなる。
■mb_send_mail()を利用する場合
●改行コード
・ヘッダ
PHPマニュアルのmb_send_mail()の項に、
>改行(n)で区切ることにより複数のヘッダを指定可能です。
と示されている。
・本文
http://blog
.poyo
.jp/
?id
=1121710480
のmail()の解説によると、
>$bodyはUNIXの場合,通常そのままsendmailコマンドに渡ります.
>sendmailコマンドはnを単純にrn変換する場合があるため
>(「rn」が「rrn」になる場合がある)改行文字は「n」だけで行う必要があります.
とのことなので、基本的には「n」でよいだろう。
しかし、サーバの環境によっては、「rn」としなければならないケースも考えられる。
●文字コード
mb_send_mail()は、PHPの内部エンコーディングから、
メール送信用エンコーディングに自動で文字コードを変換してくれる。
mb_send_mail()の変換後エンコーディングは、mb_language()の値に従い、
'Japanese'なら「ISO-2022-JP」、'uni'なら「UTF-8」となる。
ここで注意したいのは、php.ini で、
mbstring.language = Japanese;
としていれば、mb_language()も'Japanese'になっていそうなものだが、
必ずしもそうはなっていないことである。PHPのバージョンにもよるのかもしれないが、
なぜか'uni'になっていたりして、これが文字化けの原因となる。
そのため、スクリプト中で明示的に、
mb_language('Japanese');
と指定しておくとよい。
さらに注意したいこともあって、
Subjectと本文は、自動で文字コード変換してくれるが、
FromとToの名前の日本語部分は、変換してくれない。
なので、自分で文字コードの変換とMIMEエンコードを施さねばならない。
例えば、内部エンコーディングがEUCの場合は、以下のようにコードを書く。
$FromName = '山田';
$FromName = mb_encode_mimeheader(mb_convert_encoding($FromName, 'JIS', 'EUC'));
$header = 'From: '.$FromName.' <'.$FromMail.'>'."n";
さらにさらに注意すべきことには、
mb_send_mail()を使う場合は、自らメールヘッダで文字コードを指定してはならない。
こちらがどのように文字コードを指定しようと、
mb_send_mail()が自動的に文字コードを指定してしまうため、二重に上書きされてしまう。
以上、mb_send_mail()は、その挙動をわかってしまえば、便利な関数であるが、
細かな仕様を知らなければ、実にわかりにくいものなのであった。
ポイントは、mb_language('Japanese') の明示指定と、To,Fromの自力変換である。
by あき - 2005年7月30日 4時8分
↑テスト環境は、PHP 4.4.0
by あき - 2005年7月30日 4時15分
あんまり関係ないけど、
http://www
.php
-accelera
tor
.co
.uk/
の
> Going forward, PHPA may be replaced by a new accelerator product in the coming months.
なんか楽しみ。PHP5にまともに対応してくれると嬉しいなー。
by nt - 2005年8月1日 20時47分
>>30
もうcoming monthsですね…。
ぼくは今は、待望だった5.1が安定してくれるのを待ってます。
ところで実は、人から指摘も受けたのですが、
>>28 には少し修正すべき点があります。
$FromName = mb_encode_mimeheader(mb_convert_encoding($FromName, 'JIS', 'EUC'));
は間違いです!!
mb_convert_encoding() で文字コード変換も行ってくれるので、mb_convert_encoding()は不要です。
一見 >>28 でも、動作するのですが、長い文字が入ると文字化けるようです。
ですので単純に、
$FromName = mb_encode_mimeheader($FromName);
が正解です。
間違った例文を書いてしまい大変申し訳ない。
mb_send_mail() は予想以上に地雷だらけでした。。
いろいろと変な挙動だけでなく、バージョンによって、PHPのバグもあったりするようなので、すごーく厄介なようです。
↓気になった関連URL
http://lists
.sourceforg
e
.jp/mailman
/archives
/tep
-j
-develop
/2
003
-March
/000137
.html
http://blog
.poyo
.jp/archives.php
/id+
1129750505
by あき - 2005年12月19日 14時36分
PHPのmbstring関連のバグをまとめたものとして、以下のページがよくまとまっていた。
http://d
.hatena
.ne
.jp/t
_komura
/2005110
5
by あき - 2005年12月20日 5時52分
おつおつ
by ゆげ - 2005年12月20日 15時6分
p2用の新しいサーバ2台のセットアップを行った。Debianから今度はFreeBSDに。
その時に、いくつかハマッタメモ。
基本的にportsにあるものは、portsを利用した。PHPもports。
まず、PHPのページの表示が途中で途切る症状が出た。
しかもクライアントブラウザ(Sleipnir)のCPU使用率が100%になって止まってしまう。
/var/log/htttpd-error.log をみると、
[notice] child pid 52060 exit signal Abort trap (6)
httpd in free(): error: junk pointer, too high to make sense
とのエラーが残っている。
いろいろ試行錯誤の結果、graphics/pecl-imagick を外したら直ったようだった。
どうもPECLのバグっぽい。
Apache、PHPのバージョンと、PHPのアクセレータは、いろいろ試した結果、Apache2.0系、PHP5.1系、Zend Optimizerとしてみた。
Zend Optimizer のインストールでは、ライブラリがないとかいろいろ言われて、ln -s をいろいろ張る。
で、インストールは完了したが、認識されていない。
不思議に思って調べたところ、
http://www
.zend
.com/store
/products
/o
ptimizer
-trouble
shooting.php
The phpinfo() output will indicate that ZEND_DEBUG is 'enabled'. Recompile PHP
without the debug support.
とのこと。そういうのはインストール前の文書で教えておくれ。
再びPHPを入れ直して、動作OK。
by あき - 2006年1月21日 16時52分
>>34
他の環境では、pecl-imagickがあってもエラーは出なかったのを確認した。
これもデバッグオプションとか何かが複合的に関連していたのだろうか。
by あき - 2006年1月22日 7時20分
>>35
やっぱりpecl-imagickは変。
コマンドラインのphpを動かしたら、セグメンテーションエラーでコアダンプ吐いたりしてる。
by あき - 2006年1月25日 10時16分
新しいp2サーバ、mumumuさんが全面的に設定調整してくれたので、2chスレよりメモコピー。
p2.2ch.net不具合報告スレ Part8
http://qb5
.2ch
.net/test
/read.cgi
/op
erate
/1137419892
/
----------------------------------------------------
208 :root▲ ★ :sage :2006/01/22(日) 00:47:01 ID:???0 (p)?
>>207
どもです。ログインできました。
一台目と同じスペックですね。
前のサーバ:
CPU: Celeron 2.0GHz
mem: 4GBytes
disk: IDE
NIC: 蟹
接続速度: 10Mbps half-duplex
新しいサーバ、これが2台:
CPU: Xeon 3.4GHz
mem: 4GBytes
disk: U320 SCSI
NIC: Intel
接続速度: 100Mbps full-duplex
----------------------------------------------------
244 :root▲ ★ :sage :2006/01/22(日) 07:09:03 ID:???0 (p)?
器部分、概ねできました。
<やったこと(2台共通)>
・FreeBSD 6.0-p3に更新
・タイムゾーンをJSTに設定(UTCだったというか、設定されていなかった)
・一部パッケージのインストール
・カーネル再構築(SMPあり、HTTあり)
・/etc/rc.conf, /etc/sysctl.conf, /boot/loader.conf 設定
(メモリが多くてネットワークアクセスが多いサーバ用の設定)
・Apache 2.0.55再インストール
(kqueue有効)
・PHP 5.1.2再インストール(4.xは削除)
・Zend Optimizer再インストール
・pear-Net_UserAgent_Mobile再インストール(これがないと動かない)
・httpd.confチューンナップ
・バーチャルホスト設定
・簡単な動作確認 ( phpinfo(); )
・PVをとるための設定
(p)
http://p2test1
.peko
.2ch
.net/
と
(p)
http://p2test2
.peko
.2ch
.net/
で、テストできるようにしておきました。
それぞれ、p2.2ch.net という名前でアクセスされても(DNSが変わっても)
大丈夫な設定を既に仕込んであります。
バーチャルホストの設定に伴いDocumentRootが変わりました。
このため、IPアドレスでのアクセスはできなくなっています。
ということで動作確認は、あきさんのpublic_htmlでやっていただけると助かりますです。
そんでは、そゆことで。
----------------------------------------------------
247 :root▲ ★ :sage :2006/01/22(日) 07:22:34 ID:???0 (p)?
#AddType application/x-httpd-php .php
#AddType application/x-httpd-php-source .phps
にし、
AddHandler php5-script php
AddType text/html php
に設定。
で、携帯PCとりまぜて来るみたいなので、
#
# The following directives modify normal HTTP response behavior to
# handle mobile phones.
#
BrowserMatch "DoCoMo" nokeepalive
BrowserMatch "KDDI" nokeepalive
BrowserMatch "UP.Browser" nokeepalive
BrowserMatch "Vodafone" nokeepalive
BrowserMatch "J-PHONE" nokeepalive
BrowserMatch "DDIPOCKET" nokeepalive
BrowserMatch "WILLCOM" nokeepalive
を httpd.conf に追加。
これで、わたし的には作業終了のはず。
----------------------------------------------------
269 :root▲ ★ :sage :2006/01/22(日) 18:57:01 ID:???0 (p)?
PHP の設定ですが、
(php.ini)
; added by mumumu, 1/22/2006
include_path = ".:/usr/local/share/pear"
[Zend]
zend_extension_manager.optimizer=/usr/local/Zend/lib/Optimizer-2_6_2
zend_extension_manager.optimizer_ts=/usr/local/Zend/lib/Optimizer_TS-2_6_2
zend_optimizer.version=2.6.2
zend_extension=/usr/local/Zend/lib/ZendExtensionManager.so
zend_extension_ts=/usr/local/Zend/lib/ZendExtensionManager_TS.so
(extensions.ini)
extension=ctype.so
extension=curl.so
extension=dom.so
extension=fileinfo.so
extension=gd.so
extension=gettext.so
extension=iconv.so
extension=mbstring.so
extension=mysql.so
extension=openssl.so
extension=pcre.so
extension=posix.so
extension=session.so
extension=simplexml.so
extension=sqlite.so
extension=tokenizer.so
extension=xml.so
extension=xmlreader.so
extension=xmlwriter.so
extension=zip.so
extension=zlib.so
となっているです。
by あき - 2006年1月25日 12時52分
続いて、サーバの監視についてのメモコピー。
----------------------------------------------------
273 :root▲ ★ :sage :2006/01/22(日) 19:53:26 ID:???0 (p)?
あと、アクセスログは、~/logs から参照できるはずです。
----------------------------------------------------
829 :root▲ ★ :sage :2006/01/24(火) 01:40:39 ID:???0 (p)?
p2.2ch.net
http://mumumu
.mu/mrtg
/
でのチェックを開始しました。
トラフィック
http://mumumu
.mu/mrtg
/mrtg
-rrd.cg
i
/traffic
/p2traf
.html
httpアクセス数
http://mumumu
.mu/mrtg
/mrtg
-rrd.cg
i
/access
/p2acces
s.html
by あき - 2006年1月25日 12時53分
Zend Optimizerってライセンスフリーなんすか?
by nt - 2006年1月27日 3時59分
>>39
Zend Encoder の方は有償のようですが、
Zend Optimizer は無償で提供されていました。
http://www
.zend
.co
.jp/products
/optimiz
er
/
by あき - 2006年1月27日 16時40分
削除されました。
by - 2006年7月24日 20時9分
トラックバック
powered by ototoy
コメント
メモリのfreeが底をつくあたりで、なぜか重くなってしまう症状があるのだ。
今回で2度目である。
MLに投げると、moriさんが援軍に来てくれた。
moriさんによると、phpの中でstatとopenを大量に発行しているのが、原因ではないかとのこと。
ユーザ数×読んだスレッド数と、扱うファイル数が大量な上に、PHPの発行するsystem callが冗長なようだ。
たけなかさんもfileのcacheを指摘されており、また、ぼく自身もfile周りの負担を感じている。
もはや全会一致の勢いで、DB化は必須であるとの結論に至った。
ということで、ひとまず再起動して、動作の軽快さを取り戻そうとした時、問題発生が!
先生!再起動に失敗して、サーバが起動しません!!
p2.2ch.netでは、PHP4を使っているので、基本動作として、オブジェクトをコピーしていたわけだけど、これを2日ほど前から、コードを書き換えて参照渡しするように変更してみた。PHPの場合、速度はあまり変わらないそうなのだが、多少はメモリの節約効果があるかもしれない…。
結局いつも手動でやってます。
Zendのツールでそういうのあるのかなぁ。
僕はこのクラスを使ってます。
http://www
手動でマーキングが必要ですけど、一応、関数毎に呼出回数と実行時間の統計がとれます。
配列にたくさんのオブジェクトを放り込む処理を参照渡しにしたところ、値渡しに比べて30%以上速くなったのを確認できました。
ただ、PHPの場合、参照渡しにすると必ず速くなるかというと、ケースバイケースな感じがします。
http://www
これは使えそう。
http://jp
あと、念のため、PEARのProfiler.phpというのは、Benchmark/Profiler.phpのこと。
p2.2ch.netでfree memoryが底をつくと、cpu負荷が悪化する症状はまだ健在っぽい。しかし、以前に比べると我慢できないほどの重さではなくなっている。
既に準備環境は整っていたものの、課モリタポが絡むので、実装に慎重になっていたが、優先順位を高める。
http://itpro
自動統計のできるのは全部組み込みになりますね。
過去3日以内に、p2.2ch.netを利用したユーザ数は1029人。
総登録者数が2664人だから、アクティブな利用者は大体3分の1以上になる。
思ったより多かった!(10分の1くらいかと思っていた)
http://takagi
p2.2ch.netでも対策を強化しておいた。
PHPの動くWebサーバなら大体何でも動くはずです〜!
その場合はやっぱり実運用してみた方がいいですよね。
さっき、なぜかp2.2ch.netのサービスが止まってたので復活させときました。
セッションデータの扱いを冒頭で処理してしまって、
明示的に session_write_close() を行えば簡単に解決することに気付いた。
http://jp
にずばり書いていた。。
>>24
ありがとうございますー。
サーバについては、まだもう少し、今のサーバ環境でも工夫の余地があるので、
このままもうちょっと粘ってみようかな、と・・。
以前のようには重くならなくなった気がします。
ただたまにapacheが変になるのはまだ様子見。
そこで、subject.txtの情報保持をメモリ内で扱ってみようと試みた。
【1】
まず、subject.txtからスレッドリスト情報を抽出したものを、
メモリ内に保存しようとしたが、
リスト情報にまとめると意外と多くのメモリを消費することがわかった。(750K→2M)
メモリ消費量に対して、速度向上の期待値は0.1秒程度しかないので、
ファイルでシリアライズキャッシュする方法も含めて、これはパスした。
【2】
で、subject.txtをそのまま、メモリ内で保持しようかとやってみたけれども、
パフォーマンスがほとんど変わらなかったため、これもやめた。
一応、コード自体は残している。
今回もメモリ関連のバグフィックスがあったようだ。
php.2ch.netも、いろいろと手を入れたのが功を奏したのだろうか、初期の頃に比べると、ダウンする頻度が随分下がった。今回のアップデートでさらに安定するといいなぁ。
現在の環境は PHP 4.4.0 + eAccelerator 0.9.3 となった。
■普通のメールの場合
RFCに従うと、日本語メールの、
文字コードは「ISO-2022-JP」、改行コードは「CR+LF」であり、
ヘッダの日本語部分は、さらにMIMEエンコードを施したものとなる。
■mb_send_mail()を利用する場合
●改行コード
・ヘッダ
PHPマニュアルのmb_send_mail()の項に、
>改行(n)で区切ることにより複数のヘッダを指定可能です。
と示されている。
・本文
http://blog
のmail()の解説によると、
>$bodyはUNIXの場合,通常そのままsendmailコマンドに渡ります.
>sendmailコマンドはnを単純にrn変換する場合があるため
>(「rn」が「rrn」になる場合がある)改行文字は「n」だけで行う必要があります.
とのことなので、基本的には「n」でよいだろう。
しかし、サーバの環境によっては、「rn」としなければならないケースも考えられる。
●文字コード
mb_send_mail()は、PHPの内部エンコーディングから、
メール送信用エンコーディングに自動で文字コードを変換してくれる。
mb_send_mail()の変換後エンコーディングは、mb_language()の値に従い、
'Japanese'なら「ISO-2022-JP」、'uni'なら「UTF-8」となる。
ここで注意したいのは、php.ini で、
mbstring.language = Japanese;
としていれば、mb_language()も'Japanese'になっていそうなものだが、
必ずしもそうはなっていないことである。PHPのバージョンにもよるのかもしれないが、
なぜか'uni'になっていたりして、これが文字化けの原因となる。
そのため、スクリプト中で明示的に、
mb_language('Japanese');
と指定しておくとよい。
さらに注意したいこともあって、
Subjectと本文は、自動で文字コード変換してくれるが、
FromとToの名前の日本語部分は、変換してくれない。
なので、自分で文字コードの変換とMIMEエンコードを施さねばならない。
例えば、内部エンコーディングがEUCの場合は、以下のようにコードを書く。
$FromName = '山田';
$FromName = mb_encode_mimeheader(mb_convert_encoding($FromName, 'JIS', 'EUC'));
$header = 'From: '.$FromName.' <'.$FromMail.'>'."n";
さらにさらに注意すべきことには、
mb_send_mail()を使う場合は、自らメールヘッダで文字コードを指定してはならない。
こちらがどのように文字コードを指定しようと、
mb_send_mail()が自動的に文字コードを指定してしまうため、二重に上書きされてしまう。
以上、mb_send_mail()は、その挙動をわかってしまえば、便利な関数であるが、
細かな仕様を知らなければ、実にわかりにくいものなのであった。
ポイントは、mb_language('Japanese') の明示指定と、To,Fromの自力変換である。
> Going forward, PHPA may be replaced by a new accelerator product in the coming months.
なんか楽しみ。PHP5にまともに対応してくれると嬉しいなー。
もうcoming monthsですね…。
ぼくは今は、待望だった5.1が安定してくれるのを待ってます。
ところで実は、人から指摘も受けたのですが、
>>28 には少し修正すべき点があります。
$FromName = mb_encode_mimeheader(mb_convert_encoding($FromName, 'JIS', 'EUC'));
は間違いです!!
mb_convert_encoding() で文字コード変換も行ってくれるので、mb_convert_encoding()は不要です。
一見 >>28 でも、動作するのですが、長い文字が入ると文字化けるようです。
ですので単純に、
$FromName = mb_encode_mimeheader($FromName);
が正解です。
間違った例文を書いてしまい大変申し訳ない。
mb_send_mail() は予想以上に地雷だらけでした。。
いろいろと変な挙動だけでなく、バージョンによって、PHPのバグもあったりするようなので、すごーく厄介なようです。
↓気になった関連URL
http://lists
http://blog
http://d
その時に、いくつかハマッタメモ。
基本的にportsにあるものは、portsを利用した。PHPもports。
まず、PHPのページの表示が途中で途切る症状が出た。
しかもクライアントブラウザ(Sleipnir)のCPU使用率が100%になって止まってしまう。
/var/log/htttpd-error.log をみると、
[notice] child pid 52060 exit signal Abort trap (6)
httpd in free(): error: junk pointer, too high to make sense
とのエラーが残っている。
いろいろ試行錯誤の結果、graphics/pecl-imagick を外したら直ったようだった。
どうもPECLのバグっぽい。
Apache、PHPのバージョンと、PHPのアクセレータは、いろいろ試した結果、Apache2.0系、PHP5.1系、Zend Optimizerとしてみた。
Zend Optimizer のインストールでは、ライブラリがないとかいろいろ言われて、ln -s をいろいろ張る。
で、インストールは完了したが、認識されていない。
不思議に思って調べたところ、
http://www
The phpinfo() output will indicate that ZEND_DEBUG is 'enabled'. Recompile PHP
without the debug support.
とのこと。そういうのはインストール前の文書で教えておくれ。
再びPHPを入れ直して、動作OK。
他の環境では、pecl-imagickがあってもエラーは出なかったのを確認した。
これもデバッグオプションとか何かが複合的に関連していたのだろうか。
やっぱりpecl-imagickは変。
コマンドラインのphpを動かしたら、セグメンテーションエラーでコアダンプ吐いたりしてる。
p2.2ch.net不具合報告スレ Part8
http://qb5
----------------------------------------------------
208 :root▲ ★ :sage :2006/01/22(日) 00:47:01 ID:???0 (p)?
>>207
どもです。ログインできました。
一台目と同じスペックですね。
前のサーバ:
CPU: Celeron 2.0GHz
mem: 4GBytes
disk: IDE
NIC: 蟹
接続速度: 10Mbps half-duplex
新しいサーバ、これが2台:
CPU: Xeon 3.4GHz
mem: 4GBytes
disk: U320 SCSI
NIC: Intel
接続速度: 100Mbps full-duplex
----------------------------------------------------
244 :root▲ ★ :sage :2006/01/22(日) 07:09:03 ID:???0 (p)?
器部分、概ねできました。
<やったこと(2台共通)>
・FreeBSD 6.0-p3に更新
・タイムゾーンをJSTに設定(UTCだったというか、設定されていなかった)
・一部パッケージのインストール
・カーネル再構築(SMPあり、HTTあり)
・/etc/rc.conf, /etc/sysctl.conf, /boot/loader.conf 設定
(メモリが多くてネットワークアクセスが多いサーバ用の設定)
・Apache 2.0.55再インストール
(kqueue有効)
・PHP 5.1.2再インストール(4.xは削除)
・Zend Optimizer再インストール
・pear-Net_UserAgent_Mobile再インストール(これがないと動かない)
・httpd.confチューンナップ
・バーチャルホスト設定
・簡単な動作確認 ( phpinfo(); )
・PVをとるための設定
(p)http://p2test1
(p)http://p2test2
それぞれ、p2.2ch.net という名前でアクセスされても(DNSが変わっても)
大丈夫な設定を既に仕込んであります。
バーチャルホストの設定に伴いDocumentRootが変わりました。
このため、IPアドレスでのアクセスはできなくなっています。
ということで動作確認は、あきさんのpublic_htmlでやっていただけると助かりますです。
そんでは、そゆことで。
----------------------------------------------------
247 :root▲ ★ :sage :2006/01/22(日) 07:22:34 ID:???0 (p)?
#AddType application/x-httpd-php .php
#AddType application/x-httpd-php-source .phps
にし、
AddHandler php5-script php
AddType text/html php
に設定。
で、携帯PCとりまぜて来るみたいなので、
#
# The following directives modify normal HTTP response behavior to
# handle mobile phones.
#
BrowserMatch "DoCoMo" nokeepalive
BrowserMatch "KDDI" nokeepalive
BrowserMatch "UP.Browser" nokeepalive
BrowserMatch "Vodafone" nokeepalive
BrowserMatch "J-PHONE" nokeepalive
BrowserMatch "DDIPOCKET" nokeepalive
BrowserMatch "WILLCOM" nokeepalive
を httpd.conf に追加。
これで、わたし的には作業終了のはず。
----------------------------------------------------
269 :root▲ ★ :sage :2006/01/22(日) 18:57:01 ID:???0 (p)?
PHP の設定ですが、
(php.ini)
; added by mumumu, 1/22/2006
include_path = ".:/usr/local/share/pear"
[Zend]
zend_extension_manager.optimizer=/usr/local/Zend/lib/Optimizer-2_6_2
zend_extension_manager.optimizer_ts=/usr/local/Zend/lib/Optimizer_TS-2_6_2
zend_optimizer.version=2.6.2
zend_extension=/usr/local/Zend/lib/ZendExtensionManager.so
zend_extension_ts=/usr/local/Zend/lib/ZendExtensionManager_TS.so
(extensions.ini)
extension=ctype.so
extension=curl.so
extension=dom.so
extension=fileinfo.so
extension=gd.so
extension=gettext.so
extension=iconv.so
extension=mbstring.so
extension=mysql.so
extension=openssl.so
extension=pcre.so
extension=posix.so
extension=session.so
extension=simplexml.so
extension=sqlite.so
extension=tokenizer.so
extension=xml.so
extension=xmlreader.so
extension=xmlwriter.so
extension=zip.so
extension=zlib.so
となっているです。
----------------------------------------------------
273 :root▲ ★ :sage :2006/01/22(日) 19:53:26 ID:???0 (p)?
あと、アクセスログは、~/logs から参照できるはずです。
----------------------------------------------------
829 :root▲ ★ :sage :2006/01/24(火) 01:40:39 ID:???0 (p)?
p2.2ch.net http://mumumu
トラフィック
http://mumumu
httpアクセス数
http://mumumu
Zend Encoder の方は有償のようですが、
Zend Optimizer は無償で提供されていました。
http://www