PHPでメールが送信出来ない
PHPでメールを送信する処理をいつもどおりに書いていたんだけど、そのスクリプトを叩いても何故かメールが送信されない。
sendmailのパスも明示的にしたけど変わらず。
前回の記事に書いたtelnetコマンドのやり方でやったら送信された。
全く同じファイルを別のサーバーで叩いたら普通に送信された。
MTAにPostfixを使っているけれど、その別のサーバーと問題のサーバーとでは設定ファイルもほぼ一緒。
原因はPHP本体か?と思い調べたら、原因はあっさり見つかりました。
sendmailのパスも明示的にしたけど変わらず。
前回の記事に書いたtelnetコマンドのやり方でやったら送信された。
全く同じファイルを別のサーバーで叩いたら普通に送信された。
MTAにPostfixを使っているけれど、その別のサーバーと問題のサーバーとでは設定ファイルもほぼ一緒。
原因はPHP本体か?と思い調べたら、原因はあっさり見つかりました。
telnetでメール送信
メール関係で「送信出来ない」という問題が起こった時に、maillogを確認するのは当然。
なんだけど、maillogにも内容が出ない場合や、maillogの内容から解決出来なさそうな場合にはtelnetコマンドを使ってメールを送信してみると問題の早期解決に繋がる事があります。
送信方法は至って簡単。
telnet localhost 25 ←コマンドを打つ
220 www.localhost ESMTP Postfix
HELO localhost ←挨拶を撃つ
250 www.localhost
MAIL FROM: root@localhost.net ←送信元メールアドレスを討つ
250 2.1.0 Ok
RCPT TO: sender@sender ←宛先メールアドレスを鬱
250 2.1.5 Ok
DATA ←本文を入力する事を明示する
354 End data with.
TEST ←本文を入力する
. ←「.」を打つ事で文章の終わりとみなされる
250 2.0.0 Ok: queued as 7343815C3CE ←一応送信されたみたい
QUIT ←抜ける
221 2.0.0 Bye
これで宛先に届いているか確認します。
内容が入力した内容と一致していれば特に問題ありません。
そのサーバーからはメールが送信出来るという事になるので、送信出来ない原因はMTAやPHPなどのプログラム側に問題がある事が証明出来た・・・はず。
なんだけど、maillogにも内容が出ない場合や、maillogの内容から解決出来なさそうな場合にはtelnetコマンドを使ってメールを送信してみると問題の早期解決に繋がる事があります。
送信方法は至って簡単。
telnet localhost 25 ←コマンドを打つ
220 www.localhost ESMTP Postfix
HELO localhost ←挨拶を撃つ
250 www.localhost
MAIL FROM: root@localhost.net ←送信元メールアドレスを討つ
250 2.1.0 Ok
RCPT TO: sender@sender ←宛先メールアドレスを鬱
250 2.1.5 Ok
DATA ←本文を入力する事を明示する
354 End data with
TEST ←本文を入力する
. ←「.」を打つ事で文章の終わりとみなされる
250 2.0.0 Ok: queued as 7343815C3CE ←一応送信されたみたい
QUIT ←抜ける
221 2.0.0 Bye
これで宛先に届いているか確認します。
内容が入力した内容と一致していれば特に問題ありません。
そのサーバーからはメールが送信出来るという事になるので、送信出来ない原因はMTAやPHPなどのプログラム側に問題がある事が証明出来た・・・はず。
TracのDBにMySQLを使ってみました
Tracのバージョンが0.10.4になり、バックエンドのDBとしてやっとMySQLがまともに使えるようになったようなので試してみました。
(一応0.10以降からMySQLが使えるけど0.10.3まではバグだらけです)
これでやっとバックアップ等のデータ管理が楽になると思ったんですが、ちょっと自分には合わないなという感じだったので結局SQLiteのまま使ってます・・・。
具体的には、MySQLでの保存方法。
(一応0.10以降からMySQLが使えるけど0.10.3まではバグだらけです)
これでやっとバックアップ等のデータ管理が楽になると思ったんですが、ちょっと自分には合わないなという感じだったので結局SQLiteのまま使ってます・・・。
具体的には、MySQLでの保存方法。
Postfixadminでエラー
メールアドレスを追加する為に久々にPostfixadminにアクセスしたのだが、何をやってもうまく動作しない。
POSTするアクションを起こすとエラー画面が表示され、SQL文が正しくないと表示される。
MySQLを5.0系にしたせいなのかPHPを5.1系にしたからなのかは分からないけど、PHPのエラーログにはこんな表示が
Access denied for user 'nobody'@'localhost' (using password: NO) in functions.inc.php on line 131
ぐぐってみると、「mysql_real_escape_string」という関数が原因らしい。これを「mysql_escape_string」にすると従来通り正常に機能するようになる。
となるとPHP5.1の問題かな。
PHP5.2にすれば問題ないのかは分からないけど今後試してみよう・・・。
POSTするアクションを起こすとエラー画面が表示され、SQL文が正しくないと表示される。
MySQLを5.0系にしたせいなのかPHPを5.1系にしたからなのかは分からないけど、PHPのエラーログにはこんな表示が
Access denied for user 'nobody'@'localhost' (using password: NO) in functions.inc.php on line 131
ぐぐってみると、「mysql_real_escape_string」という関数が原因らしい。これを「mysql_escape_string」にすると従来通り正常に機能するようになる。
となるとPHP5.1の問題かな。
PHP5.2にすれば問題ないのかは分からないけど今後試してみよう・・・。
Subversionのチェックアウトに失敗
新しいプロジェクト作成・管理の為に、いつも通りにSubversionのリポジトリを作成したんだけど、何故かチェックアウトが出来ない。
作成は
svnadmin create リポジトリパス
と至ってシンプル
どうやらチェックアウトというよりもリポジトリのアクセスに対する問題の様子。
ちなみにApacheに出力されるエラー内容は
No such file or directory: The URI does not contain the name of a repository
環境的にはバーチャルホストでsvn用の設定をしているんだけど、その部分でDocumentRootを指定している事が原因みたい。
設定的な↓な感じ(プライベートな内容は変更してあります)
<VirtualHost *:80>
DocumentRoot /usr/tmp/svn
ServerName xxx.net
<Location />
DAV svn
SVNParentPath /usr/tmp/svn/
AuthUserFile /usr/tmp/svn/.htpasswd
AuthName "Subversion Repositry"
AuthType Basic
Require valid-user
</Location>
</VirtualHost>
そんなわけでDocumentRootをコメントアウトしたら正常にチェックアウト出来ました。
Webからも閲覧出来ているし特に問題なし。
作成は
svnadmin create リポジトリパス
と至ってシンプル
どうやらチェックアウトというよりもリポジトリのアクセスに対する問題の様子。
ちなみにApacheに出力されるエラー内容は
No such file or directory: The URI does not contain the name of a repository
環境的にはバーチャルホストでsvn用の設定をしているんだけど、その部分でDocumentRootを指定している事が原因みたい。
設定的な↓な感じ(プライベートな内容は変更してあります)
<VirtualHost *:80>
DocumentRoot /usr/tmp/svn
ServerName xxx.net
<Location />
DAV svn
SVNParentPath /usr/tmp/svn/
AuthUserFile /usr/tmp/svn/.htpasswd
AuthName "Subversion Repositry"
AuthType Basic
Require valid-user
</Location>
</VirtualHost>
そんなわけでDocumentRootをコメントアウトしたら正常にチェックアウト出来ました。
Webからも閲覧出来ているし特に問題なし。
CentOS 5をインストール
CentOS 5をインストールしてみました。
昨日の時点では理研のサーバー経由でネットワークインストールが出来なかった(それ用のファイルがFTPに用意されてなかった)けど、今日試したら特に問題なく終了。
CentOS 4をネットワークインストールの記事内の、FTP先を「/Linux/centos/5/os/i386」にすればインストールが開始される。
インストール画面はFedora6そっくり。
インストールするパッケージはFedora6と若干違うけれど、CentOS 4とも違うので、Fedora6を使った事がなくCentOS 4からCentOS 5に移行する場合はパッケージのリストを良くチェックしておいた方がいい。かも。
注目する点はXenとGFSなんだけど、XenはFedora6の時点で結構安定稼動していたから問題ないだろうな。
GFSについては使い方の練習をしてみて実践で使えそうだったら使う感じで。
とりあえずインストールしてまだ数時間なのでぱっと見はFedora6と同じような構成に見えるんだけど、CentOS 5特有の問題や機能があったら備忘録として残そうと思います。
昨日の時点では理研のサーバー経由でネットワークインストールが出来なかった(それ用のファイルがFTPに用意されてなかった)けど、今日試したら特に問題なく終了。
CentOS 4をネットワークインストールの記事内の、FTP先を「/Linux/centos/5/os/i386」にすればインストールが開始される。
インストール画面はFedora6そっくり。
インストールするパッケージはFedora6と若干違うけれど、CentOS 4とも違うので、Fedora6を使った事がなくCentOS 4からCentOS 5に移行する場合はパッケージのリストを良くチェックしておいた方がいい。かも。
注目する点はXenとGFSなんだけど、XenはFedora6の時点で結構安定稼動していたから問題ないだろうな。
GFSについては使い方の練習をしてみて実践で使えそうだったら使う感じで。
とりあえずインストールしてまだ数時間なのでぱっと見はFedora6と同じような構成に見えるんだけど、CentOS 5特有の問題や機能があったら備忘録として残そうと思います。
tar.bz2の展開、圧縮
ものすごーく基本的な事なんだけど、たまにしか使わないと忘れるのでメモ。
それにぐぐって出てきたページの内容通りにやってもうまくいかなかったので。
tar.bz2形式の解凍
tar xvfj ファイル名
↑この「j」が重要
tar.bz2形式のファイル作成
tar jcvf 圧縮後のファイル名 圧縮元
ぐぐってきた内容はIT Proとか@ITの情報なんだけど何故かそれらに書いてある内容通りにするとエラーになる。
もしそうなったら上の通りにやればtar.bz2形式のファイルが作れると思います。
それにぐぐって出てきたページの内容通りにやってもうまくいかなかったので。
tar.bz2形式の解凍
tar xvfj ファイル名
↑この「j」が重要
tar.bz2形式のファイル作成
tar jcvf 圧縮後のファイル名 圧縮元
ぐぐってきた内容はIT Proとか@ITの情報なんだけど何故かそれらに書いてある内容通りにするとエラーになる。
もしそうなったら上の通りにやればtar.bz2形式のファイルが作れると思います。
CentOS 5 ついにリリース!
やっとCentOS 5が正式リリースされました!
・・・会社の中でこんな事で喜ぶのは自分くらいですが。
何はともあれやっとGFSやRHEL5上のXenを試したりと出来るわけで。(Fedora6のXenが安定しているのでXenはもう大丈夫そうだけど)
しっかし理研のサーバーがめちゃくちゃ重い。
アクセスが集中してるのかなぁ。
いつもお疲れ様です > 理研サーバーの管理者様
・・・会社の中でこんな事で喜ぶのは自分くらいですが。
何はともあれやっとGFSやRHEL5上のXenを試したりと出来るわけで。(Fedora6のXenが安定しているのでXenはもう大丈夫そうだけど)
しっかし理研のサーバーがめちゃくちゃ重い。
アクセスが集中してるのかなぁ。
いつもお疲れ様です > 理研サーバーの管理者様
ドメインの登録料値上げ
.comと.netのドメイン登録料が2007年10月から値上げされるとの事。
参考:http://itpro.nikkeibp.co.jp/article/NEWS/20070406/267558/
まぁ今までが安すぎたのかな。
ただ、これで今あるレジストラサービスの値段に変動があるかが微妙。
自分はムームーで取っていますが、660円から700円とかに上がったりするのかなとか。たかが30円されど30円。
逆にぼったくりのようなとこ(.comを1ドメイン1年間で4800円とか)は現状維持でも全然問題ないだろうな。
といっても.comとか.netは欲しいと思った名前は既に取られている場合が殆どだから、あまり関係ないのかなという気もしなくもないですけどね。
参考:http://itpro.nikkeibp.co.jp/article/NEWS/20070406/267558/
まぁ今までが安すぎたのかな。
ただ、これで今あるレジストラサービスの値段に変動があるかが微妙。
自分はムームーで取っていますが、660円から700円とかに上がったりするのかなとか。たかが30円されど30円。
逆にぼったくりのようなとこ(.comを1ドメイン1年間で4800円とか)は現状維持でも全然問題ないだろうな。
といっても.comとか.netは欲しいと思った名前は既に取られている場合が殆どだから、あまり関係ないのかなという気もしなくもないですけどね。
色々な障害
色々の障害が続々と。
うちの会社でやっているサービスでも障害とか起きちゃったりする事があります。
原因はそれぞれで、ハード的なものからソフト的なものまで色々あります。
障害から復旧までの時間を出来るだけ短くする事は大事ですが、それ以上に大事な事が、障害によって発生した不具合や破損したデータを出来るだけ障害が発生する前までに戻せるような仕組みを作っておく事です。
というのも、Yahoo!メールの件。
http://japan.cnet.com/news/media/story/0,2000056023,20346630,00.htm?ref=rss
「450万件のメールを消失」ってオイ!
うちの会社でやっているサービスでも障害とか起きちゃったりする事があります。
原因はそれぞれで、ハード的なものからソフト的なものまで色々あります。
障害から復旧までの時間を出来るだけ短くする事は大事ですが、それ以上に大事な事が、障害によって発生した不具合や破損したデータを出来るだけ障害が発生する前までに戻せるような仕組みを作っておく事です。
というのも、Yahoo!メールの件。
http://japan.cnet.com/news/media/story/0,2000056023,20346630,00.htm?ref=rss
「450万件のメールを消失」ってオイ!
SimpleXML関数の扱い方
PHPに限った事じゃないのかもしれないけど、ちょっとハマった事があったのでメモ。
最近色々なところでAPIが公開されてきているので、PHP5のSimpleXML関数を使って簡単に取ってきて、後は好きなように表示するようなクラスを作っていたんだけれど、作成中に問題が発生。
最近色々なところでAPIが公開されてきているので、PHP5のSimpleXML関数を使って簡単に取ってきて、後は好きなように表示するようなクラスを作っていたんだけれど、作成中に問題が発生。




