--------- php5の最近のブログ記事

mb_strimwidthで、はまった。

この関数は、文字数でなく、文字幅だそうな。

Trim the string in terminal width

だそうで。文字コードにかかわらず、半角1、全角2、そして、トリムマーカーも含む文字数だとのこと。

http://code.nanigac.com/source/view/351

と同じはまり方をしました。

スーパーグローバル変数 $_POST では、受け取れない場合がある。

例えば、ブログの更新pingとか、トラックバックとか。

そういうときには、

 

file_get_contents("php://input");

 

で、POST全文を受け取ることができる。

 

php5.2.4

PHP5をさくらインターネットで導入しようと考えた。

こちらが大変詳しい。

(5.2.0)さくらインターネットにPHP5.2.0をインストールする(まとめ)http://blog.hinami.net/?itemid=777

(5.2.0)さくらのレンタルサーバへPHP5.2.0をインストールhttp://www.koruri.com/dielectric/archives/200611/10000591.html

(5.2.1)さくらインターネット(レンタルサーバ)でPHP5を!http://uruseiyatsura.way-nifty.com/blog/2007/03/php5_73ee.html

(5.?.?)さくらインターネットにPHP5をインストールする

(5.2.3)さくらのレンタルサーバへPHP5.2.3をインストールhttp://www.koruri.com/dielectric/archives/200706/01000707.html

(5.2.3)ちょっとだけ注意が必要「さくらインターネット スタンダードプランでPHP5.2.3を使う場合」

(5.2.3)activeCollabをさくらインターネットにインストールするメモhttp://blog.digibee.jp/2007/07/activecollab_1.html

(5.2.3)さくらにphp5.2.3インストール。 http://another.rocomotion.jp/11809565202793.html

 

 自分用でも覚書で書いておく。

まずは、windowsでPHPの最新版をダウンロード。

http://www.php.net/downloads.php

2007/10/9 時点で PHP5.2.4

これの

Complete Source Code    PHP 5.2.4 (tar.gz) [9,478Kb] - 30 August 2007

をwindows上の適当なところへダウンロード。(ミラーサイトがいくつか表示される)

解凍はさくらインターネットのサーバー上でやるので、ここではダウンロードだけ。

 で、そのファイルをさくらインターネットのルートディレクトリ(自分のアカウントの直下。wwwのひとつ上)に「temp」ディレクトリ(フォルダ)を作って、そこへアップロード。「temp」でなくても他と重複しなければディレクトリ名は何でもよい。

次にさくらインターネットのサーバーにtelnetでシェルログイン。

さくらインターネットへのtelnetの仕方

スタート→ファイル名を指定して実行→telnet hogehoge.sakura.ne.jp

(hogehogeには初期契約したサブドメインまたは、設定した独自ドメインでもtelnetできる)

loginプロンプトで、自分の契約サブドメイン(hogehoge)

password でtelnet用のパスワード(FTP用と同じモノ)

%cd temp

% tar xzvf php-5.2.4.tar.gz(圧縮ファイルの解凍) たくさんのファイルが解凍される

configファイルを準備する。

-------------------------------------

#!/bin/sh

./configure \
--prefix=$HOME \
--with-config-file-path=$HOME/www/bin \
--program-suffix=5 \
--with-pear=$HOME/share/pear5 \
--enable-force-cgi-redirect \
--enable-mbstring=all \
--enable-mbregex \
--with-mysql \
--with-openssl=/usr \
--with-zlib=/usr \
--with-gd=/usr/local \
--with-jpeg-dir=/usr \
--with-freetype-dir=/usr \
--with-ttf \
--with-png-dir=/usr \
--with-curl
--------------------------------------------------

上記をconf.shとして保存。temp > php-5.2.4 ディレクトリにアップロード

 で、telnetログインで、php-5.2.4ディレクトリに移動。(cd temp,cd php-5.2.4)

%sh conf.sh

 エラーなく、Thank you for using PHP.と出たらOK。何かワーニングが出たら考える。

%make (けっこう時間かかる)

でコンパイル。Build completeが出たらOK。次はインストール

%make install 

 で,

home/hoge/binの中のphp-cgiをwww/cgi-binにコピーする。

cd /home/hoge/bin

ln php-cgi5 /home/hoge/www/cgi-bin/php5.cgi

動くかどうかテスト

%/home/hoge/www/cgi-bin/php5.cgi -v

--------

PHP 5.2.5 (cgi) (built: Jan  3 2008 15:56:39)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies

--------

と表示されたらOK。

続いて

php.ini-recommendedをwww/cgi-bin/php.iniとしてコピー

中身を適切に設定。

 

あとは.htaccsessの設定かな。

 

phpinfo()で

Loaded Configuration File 

が、www/cgi-bin/php.ini 

 になっていたらOK

 

(追記)

「さくらのレンタルサーバ」スタンダード・プレミアムサービスにおきまして
 2008年1月29日より PHP5 を正式に提供します。

----------------------

だそうです。。

参考サイト

PDOでサクサクDB開発http://codezine.jp/a/article.aspx?aid=433

 

大変使いやすいと評判のSQLiteManager。

SQLiteの管理ツールです。バージョン3対応、日本語対応、もちPHP5対応。phpで作られているからphpが動くなら、windows,unixなんでもOK

http://www.sqlitemanager.org/

の左のメニューからダウンロードして解凍するだけ。

が、問題発生。いくらデータベースを操作しても、その操作が反映されない!

と、ぐぐるとこんなバグがあることが。。。

SQLiteManager を Windows で使うhttp://blog.datoka.jp/?itemid=854

で、次は文字コード

SQLiteManager1.1.3でUTF-8のlangファイルを作る http://project-p.jp/halt/anubis/blog_show/525

この2つの修正は必須でしょう。

本家は対応しないのかな。これ以外はすごく使いやすい管理ツールです。

 

phpのmbstring.detect_order は、左から順番に判定をしていくようだ。

私の設定は、

mbstring.detect_order = eucJP-win,UTF-8,SJIS-win,jis

としていて、経験上、これが一番誤判定がでない。(と思う)。

 

以前は、

mbstring.detect_order = UTF-8,SJIS-win,jis,eucJP-win

とやっていて、eucのはずなのにSJISと判定されたり、UTFと判定されたりした。

 

(参考)

/halt/Snapshot - mb_detect_orderのautoがぬるい件

「美乳」で文字化けが直るって本当?

 

【環境メモ】

-----------------------------------------------------------

OS:Windows XP SP2

sever:Apache 1.3.37

php:php 5.2.4

pear 1.6.1:Mail 1.1.14,Mail_Mime 1.5.2,DB 1.7.13,XML_RPC 1.5.1

------------------------------------------------------------

php5.2.4からfatalエラーの時にhttp 500エラーを返すようになった。

PHP 5 ChangeLogVersion 5.2.4

Changed error handler to send HTTP 500 instead of blank page on PHP errors.だそうで。

なるほど仕様としてはアリなんだろうけど、デバック時には、普通にエラーの表示をして欲しい。

画面で出すのは研究中。誰か教えて欲しい。

とりあえず、php.iniにてエラーログを出す設定にしておく

log_errors = On
error_log = c:\php5\log\errorlog.txt

  

【環境メモ】

-----------------------------------------------------------

OS:Windows XP SP2

sever:Apache 1.3.37

php:php 5.2.4

pear 1.6.1:Mail 1.1.14,Mail_Mime 1.5.2,DB 1.7.13,XML_RPC 1.5.1

------------------------------------------------------------

Pear でのMailの送り方は、内部関数mail使用,sendemail(orラッパー)使用,smtp使用と3種類ある(参考:phpでメール送信[Pear::Mail])わけだが、sendmailで、こちらのPEAR::Mailを使ってメールを送信してみようの例でやってみたら下記症状がでた。

----------------------------------------------------

fromのアドレスにメールアドレス以外の文字(例えば名前)をいれるとき、Validation failed というエラーが出た。

---------------------------------------------------

なんじゃらほい。

Validation とは英和辞書によると「~の正当性を立証する」だと?

Pearのソースを眺める。あった。RFC822.phpに、_validatePhrase関数なるものが。

ああ、ここでRFC822に正当に対応(準拠)しているかどうか、というのを調べるのね。

Mailクラスには、function prepareHeadersという関数があるようだ。この関数は、配列に収まっているヘッダー情報をテキストの形に整形する関数。この関数は、fromヘッダを特別扱いしている。ユーザー指定のfromヘッダから、senderを抜き出して、 sendmail (他コマンド) -f(formアドレス)とやるよう。

さらに_validatePhraseにてfromヘッダのデータ(mailbox)をに対するRFC822準拠性チェックを行うのだが、ここで、当該ラインには、英数文字(atom)しか流さないように、チェックが行われており、当然にひらがなはひっかっかってエラーとなる。

つまりは、<メールアドレス>やダブルクオーテーションで囲まれた部分以外は、アルファベットでないとエラーを流す仕組み。

参考:http://www.mew.org/Newsletters/2.html

ああ、ダブルクオーテーション。。

アルファベットなら、ダブルクオーテーションなしで、通る。

日本語なら、ダブルクオーテーションがないとエラー。

つまり、先にmimeエンコード(&base64)しとけってことだ。

 

というわけで

$header['From'] = "ほげほげ<hoge@hoge.com>";

$header['From'] = "\"ほげほげ\"<hoge@hoge.com>";

と直して一件落着。。。ではない。

インターネットのお約束ではダブルクオーテーションの中といえども7bitで流さなくてはならない。これはsendmailラッパーが好意でmimeエンコードしてくれているだけで、こちらとしてはお行儀がよくない。

最初からRFCにきちんと準拠するには、sendmailに渡す前に、mimeエンコードしておかなくてはならない。

というわけで

$a="ほげほげ";

$def_encoding=mb_internal_encoding();
mb_internal_encoding(mb_detect_encoding($a));

$header['From'] = mb_encode_mimeheader($a)."<hoge@hoge.com>";

mb_internal_encoding($def_encoding); 

本当は、1行が76文字以下でなければならないだが、mb_encode_mimeheaderがそれも処理してくれる模様。

あ、でも、fromだけでいいのか?ああ、fromは必須ヘッダだからか?

いや他のヘッダも本当は同様にしなくてはいけない。

他のヘッダーもちゃんとmimeエンコードしておかないとホントはまずい。。てことか。

今はマルチバイトコードのまま、sendmaneに渡しちゃっているんだ。。。

つまりRFC822に準拠していないメールも、親切なメーラーさんのおかげて読めるわけだ。

しかし、人の親切に頼ってばかりはいけないので、ちゃんとエンコードしましょうね。

自宅でのテスト用にwindowsにてサーバーを立ち上げて、sendmane(sendまね~る)という便利なソフトを使わせていただいてる。

通常のmail関数やmb_sendmailはこれで使えるのだけれど、PearのMailを使おうとするとどうしてもエラーがでていた。

apacheのsendmail_pathもちゃんとsendmane用に設定しているので、おそらくPearの方で、独自にsendemailをつついていると考えた。

で、ソースをよくみてみると、pear/Mail/sendemail.php の中にこんな記述が。

var $sendmail_path = '/usr/sbin/sendmail';

ありました、ありました。

これを

    var $sendmail_path = 'c:\sendmane\sendmane.exe';

に変更して一件落着。(パスはsendmaneのインストールディレクトリによって変わる)

と思って、もう少しソースをたどると

        if (isset($params['sendmail_path'])) {
            $this->sendmail_path = $params['sendmail_path'];
        }

の記述が!

うっソースの修正なんぞしなくても、オプションで設定できたか。

なので、ソースをもとに戻す。そして、呼び出すほうにオプションを設定。

$mail = Mail::factory("sendmail");
だったのを

$mail = Mail::factory("sendmail",array('sendmail_path'=>'c:\sendmane\sendmane.exe'));
に修正。

これでこそ一件落着。

 

ちなみに、Mailを使ってメールする方法はこちらが丁寧。

http://www.s-memo.net/blog/2007/03/pearmail_1.php

(実はこちらに、オプションの説明があった。。。。)

 

【環境メモ】

-----------------------------------------------------------

OS:Windows XP SP2

sever:Apache 1.3.37

php:php 5.2.4

pear 1.6.1:Mail 1.1.14,Mail_Mime 1.5.2,DB 1.7.13,XML_RPC 1.5.1

------------------------------------------------------------

 

このアーカイブについて

このページには、過去に書かれたブログ記事のうちphp5カテゴリに属しているものが含まれています。

前のカテゴリはmovabletype4です。

次のカテゴリはお知らせです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.01