「PHP」カテゴリーアーカイブ

PHPでメールが送れない

PHPでメールを送るのには大変苦労していたけど、pearのMail.phpモジュールを使うことでなんとか形になっていた。はずなんだけど、最近になってメールが送られない不具合が発生!

新しいサーバになってから、perl系のメールは確認したけどPHPは。。。 もしかしたら、モジュール毎にインストールが必要だったり。。。 ログを確認したら、Mail.phpがない、と。Pathは/usr/share/php, /usr/share/pearだっていうけど、どちらのディレクトリもない。どうもMail.phpはphp-mailにあるらしい。php-mail-mimeも関連しそうだからこれらをsynapticでインストールするとついでにphp5-cliとphp-pearもインストールされる。

しかし、それでもメールは送られない。またログを見ると、今度はphp-net-smtpがない、と。じゃ、synapticでいれましょ(いいのか、こんな行き当たりばったりで。。。)。php-net-smtpとついでにlibphp-phpmailerにも関係ありそうなのでチェック(いいのか、こんないいかげんなことで。。。)。すると、php-net-socketもついでにインストールされ無事にメール送信成功。

IlohaMailのUTF-8メール対応

RoundcubeMailも見た目はカッコいいし、洗練されたインターフェースは非常に魅力なんだけど、新着チェックや動作がキビキビしていないところなんかはちょっと不満。と言うことで、SquirrelMailもやっぱりインストール(普通に # yum install squirrelmail)して、文字化けが直っていることに驚いた。それでも「月月」と表示されるのは健在だけど。。。

いっそのことだから、前から気になっていたIlohaMailもついでだから入れてみた。インストールは付属のテキストで簡単に導入できるけど、困ったことに日本語がEUC-JPが前提となっていて、UTF-8は(日本語としては)サポートしてない。普通に使っている分には問題ないけど、UTF-8なメールを返信や転送するときに見事に化けてしまう。

UTF-8なFCとしては、なんとかIlohaMailをUTF-8対応にしようと頑張ってみたけど、IlohaMailのlocaleの考え方がいまいちよく分からなかったから、EUC-JPのままにして、UTF-8なメールの返信に対応することにした。

これは以外にあっさり片付いた。

まず、lang/jp/jcode.incをここから最新のjcode.phpを取ってきて、jcode.incとリネームする。元々のjcode.incはリンク先のTOMOさんのUTF-8非対応版をそのまま使っているようだから、UTF-8対応版と取り替える。

次に、lang/EUC-JP.incの先頭近くに$CS_CAN_CONVERT["UTF-8"]=1;を追加する。$CS_CAN_CONVERTがずら〜っとならんでいるところの頭に追加する。

そして、include/compose_fetch_ref.incの最後の方に、 $message=LangConvert($message, $my_prefs["charset"], $charset);
if (isset($replyto)) $message=">".str_replace("\n","\n>",$message);
$message = mb_convert_encoding($message, $my_prefs["charset"],"AUTO");
$message = "\n".LangConvert($message_head, $my_prefs["charset"], $charset).$message;
iil_Close($conn);
と、青字の部分を追加する。もちろん、PHPのmb_stringモジュールが入っていないといけないけど。

これでUTF-8メールも問題なく返信できるようになった。やれやれ。

FC5のPHP

Fedora Core 5のインストール直後のPHPはmbstringもDB関連もGDも有効化されていない。どのパッケージが導入されているか/いないかは、# /usr/bin/yum list | grep php | sortで調べることができる。右端に installed とでていれば導入済みで、core, extras となっているのは未導入でどのレポジトリにあるかを示している。

とりあえず安全(?)のため# yum install php-adodb.noarch
# yum install php-gd.i386
# yum install php-imap.i386
# yum install php-mbstring.i386
# yum install php-mysql.i386
# yum install php-pgsql.i386

を導入しておいた。

当然ながら、apacheを再起動しないと導入しても有効にはならない。逆に、yumでインストールすればこれらの機能が有効化されることのほうが驚きで、よくここまで来たなぁ。

PHPのコマンドライン実行

兄弟サイトで毎日バッチ処理をしているんだけど、一部がperlだったり、一部がPHPでwebから都度実行しなくちゃいけなかったり。。。 外部webページを取りこんで、データ要素を抽出してDBに登録するんだけど、webページ取得はperlでcron起動、DBアクセスはPHPのほうがお手軽だからそっちで作っちゃったりして。

でも、毎日は欝陶しいし、1つのスクリプトですべてをまかないたくなる。今さらperlと格闘するのも悲しいからPHPをコマンドライン(cron)から起動させて、一石二鳥を狙おうかな、と。

まずは今までperlで動いていたところをPHP化する。結構両者で考え方が違うことを再認識した。特に正規表現のあたり。正規表現自体は共通だけど、それを取り巻く命令群の性格が違うからちょっと苦労した。

大体1つのスクリプトにいままでのコンポーネントが一体となったあたりでコマンドライン化に取り掛かろう。って、基本的には#!/usr/bin/php -qを先頭行に付け加えて、# chmod 755 hogehoge.phpと実行権限をつけてあげるだけ。

では、ないんだな。コマンドライン版PHP(CLI版)の設定、文法チェックがApacheに取り込まれているものと微妙に違う。Webでは出ないエラーがワラワラとでてくる。配列を定義しないで使うとエラー(警告)が出るらしい。

そういうときにはerror_reporting(0);を冒頭に追加すると静かになる。もちろん、バグが取れてきて安定してきたら、の話だけど。

さらに、PostgreSQLを使っているんだけど、webで起動されるスクリプトからはDBにアクセスできても、コマンドラインからの起動ではアクセスできないようにdefaultではなっている。そこは /var/lib/pgsql/data/pg_hba.conf にて、#local all all ident sameuser(←コメントアウトする)
local all all trust
と、ローカル環境においては実行ユーザをDBユーザとは別にできるよう設定を変更する。

うまくいくと# ./hogehoge.phpとやるだけで、起動することができる。これをcrontabに登録しておけばOK!

PHPスクリプトの不具合

とあるPHPスクリプトが途中でエラーで止まってしまうことが判明。サーバを新しくしたから予想はされていたけど。。。

Redhat9からFedora Core 3にしてからPHPのデフォルト設定が変わってしまったみたいで、エラーが起こっても画面に表示されなくなってしまった。ま、確かにエラーメッセージが出力されるのは好ましくないのは分かるけどね。でも、その代わりにエラーメッセージがApacheのエラーログにた〜っぷりと出力されるようになり、今度はこちらがパンク状態。

原因はメモリ割当量の上限を増やしてあげるのを忘れていたようで、php.iniのmemory_limitをデフォルトの8MBから32MBに増やしたら問題なく動くようになった。

memory_limit = 32M

いろいろとエラーやら警告やらが出力されているけど、主たる原因であるメモリ割当量の上限に引っかかっていた、という事実が記録されていない。画面にエラーメッセージが出力されてた頃は確か「メモリ上限に引っかかりました」みたいなエラーが表示されたはずなんだけど。なんか設定が悪いのかな?

あと、配列要素を参照するときに、$hoge[moge]としていたけど、これじゃいけないみたい。$hoge[‘moge’]と指定するみたい。

PHPの登録画面の不具合(その2)

実は、うまく登録ができない不具合は他でも発生してたみたい。いくつか回避方法があるみたいだけど、

– /etc/httpd/conf/httpd.conf の、

<files *.php>
SetInputFilter PHP
SetOutputFilter PHP
</files>

または、

AddInputFilter PHP php
AddOutputFilter PHP php

となっている行を削除し、代わりに

AddType application/x-httpd-php .php

を追加する。

方法でいこうと思う。さて、どうなるやら。
続きを読む PHPの登録画面の不具合(その2)

PHPの登録画面の不具合

Webの管理画面からこのサイトの主要ファイルを書き換えることができるのがとっても便利なんだけど、どうも正常に動いていない。ちゃんと入力しているのに登録を実行すると実際に登録されているファイルはぐちゃぐちゃになっている。

そのぐちゃぐちゃのなり方がWebmailの添付ファイルが壊れるとそっくりで、一部の内容が重複して出現すると言うもの。これはもしかするとPHPが悪いのではないかと思い始めているんだが。。。
続きを読む PHPの登録画面の不具合