- 携帯サイトでのmailto使用について
- 2010.02.05
携帯サイトを作成していて mailto リンクで件名と本文を指定するのに下記のように指定します。
<a href=”mailto:メールアドレス?subject=件名&body=本文”>
このとき、件名と本文はURLエンコードする必要があるのだが、キャリアによって渡す文字コードに違いがあります。
DoCoMo、au は shift_JIS に変換してから URLエンコード、SoftBankはUTF-8にしてからURLエンコードしないと文字化けが起こります。
ですので、アクセスされた端末を判別し、それに合わせた文字コードに変換しURLエンコードするという手順になります。サンプルコードはこんな感じ
<a href=”mailto:?subject=<?php echo urlencode(mb_convert_encoding(’題名’, ’sjis’));?>&body=< ?php echo urlencode(mb_convert_encoding(’本文’, ’sjis’))?>”>友達に知らせる</a>
- 空メールでPHPを起動する
- 2010.01.21
空メール処理を作成したので、メモします。
1.空メール送信用メールアドレス作成
2.受信メールボックスにメールが来たらPHPを起動するため、.qmailを編集。
使えるネットの場合、/var/qmail/mailnames/自分のドメイン/追加したメールアカウント/に.qmailがあるので、SSHで接続し、該当ディレクトリに移動してmoreコマンドなどで内容を表示してみると[root@*********]# more .qmail
| true
| /usr/bin/deliverquota ./Maildirとなっているので、1行目に以下の行を追加。
| /usr/bin/php -d safe_mode=off /var/www/vhosts/自分のドメイン/private/mail.php
※この例では、privateディレクトリのmail.phpを起動する
(セキュリティの為、ウェブでアクセス出来ないディレクトリに保存)
privateディレクトリのパーミッションは7053.mail.phpに処理を記述
と、このような処理になるのだが、動かなくて大分苦労しました。
結局privateディレクトリのパーミッションが原因だと分かり無事解決
- 閏年(うるう年)かを判定する
- 2009.12.19
日付処理を行う場合、閏年(一年が366日ある年、2月29日のある年)があるため、閏年かどうかを考慮しなければならない場合があります。
閏年は以下の定義のようなので、これさえ分かっていれば処理は簡単です。1.4で割り切れる年
2.100で割り切れる年は、閏年ではない
3.400で割り切れるこれを元に、PHP を使って書いてみると・・・
※$yearは判定する年<?php
if (($year % 4 == 0 && $year % 100 != 0) || $year % 400 == 0) {
print ‘閏年’;
} else {
print ‘閏年ではない’;
}
?>
PHP
- PEARのインストール
- 2009.11.21
共用サーバー(使えるネット)でFTPを使用したPEARライブラリのインストール方法をまとめます。
(1)http://pear.php.net/go-pearにアクセスして表示されたスクリプトをコピーしてgo-pear.php等の名前を付けてローカルに保存する。
(2)ウェブサーバー上にgo-pear等、適当な名前のディレクトリを作成し、そこに先程保存したgo-pear.phpをアップロード。
(3)第三者にアクセスされないよう、Basic認証でアクセス制限をかける。
「.htaccess」 の内容
# このフォルダーのアクセス制限 パスワードの設置
AuthUserFile /var/www/vhosts/**********/httpdocs/go-pear/.htpasswd
#制限をかけたいディレクトリ
AuthGroupFile /dev/null
AuthName “Please enter your ID and password“
AuthType Basic
require valid-user「.htpasswd」 の内容
ID:暗号化されたパスワード(4)PEARをインストールするディレクトリを作成し、そのディレクトリのパーミッションを777に変更。
(5)ブラウザでgo-pear.phpにアクセス。
1にPEARをインストールするパスを入力。
使えるネットの場合は「/var/www/vhosts/ドメイン名/httpdocs/pear」11にPHPパスを入力。
使えるネットの場合は「/usr/bin/php」全ての設定が終わったら「Install」をクリック。
(6)include_pathを設定。
共用サーバーではphp.iniを編集出来ないので、.htaccessで設定する。php_value include_path “.:/var/www/vhosts/ドメイン名/httpdocs/pear”php_value include_path “.:/var/www/vhosts/ドメイン名/httpdocs/pear”
- 複数のRSSを統合し最新情報を取得する
- 2009.11.19
複数のサイトのRSSを受信し、その中の記事を日付の新しい順に何件か表示する場合、最初にRSSを一つにまとめるか、個別にRSSを受信し、その後統合、ソートとするかだと思いますが、今回はPHPで複数RSSを表示するプログラムを後者の方法で行なってみました。
PHP用のRSS パーサにはMagpieRSSというものを使用しました。
以下、プログラムソースです。
※カッコが全角になっているので、そのままコピペして使用しないでください。<?
require_once(’./includes/magpierss/rss_fetch.inc’); //MagpieRSSロード
define(’MAGPIE_OUTPUT_ENCODING’, ‘UTF-8′);//読み込むRSSを配列に格納
$rssUrl=array(”http://www.abc1.com/feed“,
”http://www.abc2.com/feed.rdf“,
”http://www.abc3.com/index.rdf“,
”http://www.abc4.com/rss.xml“
);//表示する記事の件数
$num=5;$HTMLbody =”";
foreach ($rssUrl as $no => $rss_url) {
if ($rss_url != ”) {
//URLからRSSを取得
$rss = @fetch_rss($rss_url);
if ($rss != NULL) {
for ($i=0; $i<count($rss->items); $i++) {
//サイトのタイトルをitemsに格納
$rss->items[$i]["site_title"] = $rss->channel["title"];
}
//itemsだけ別配列に格納
$rssItemsArray[] = $rss->items;
}
}
}$concatArray = array();
if (is_array($rssItemsArray)) {
for($i=0;$i<count($rssItemsArray);$i++){
//配列を統合する
$concatArray = array_merge($concatArray,$rssItemsArray[$i]);
}foreach ($concatArray as $no => $values) {
$date=$values["date_timestamp"];
$title=$values["title"];
$link=$values["link"];
$site_title=$values["site_title"];
//記事ごとに必要な項目を抽出
$rssArray[]=array($date, $title, $link, $site_title);
}//配列をユーザー定義関数でソート
if ($rssArray) { usort($rssArray, ‘cmp’); }
if (count($rssArray) > $num) {
$count=$num;
} else {
$count=count($rssArray);
}//必要な件数分だけHTML整形
for ($i=0; $i<$count; $i++) {
$date=date(”Y-m-d H:i”,$rssArray[$i][0]);
$link=$rssArray[$i][2];
$title=$rssArray[$i][1];
$site_title=$rssArray[$i][3];
$HTMLbody .=$site_title.”【”.$date.”】<a href=\”".$link.”\” target=\”_blank\”>”.$title.”</a><br />\n”;
}
}//=======================================================
// 多次元配列ソート用比較関数
// この場合は配列の1番目の項目を降順にソート
//=======================================================
function cmp($a, $b) {
if ($a[0] == $b[0]) return 0;
return ($a[0] > $b[0]) ? -1 : 1;
}
?>
<?php echo ‘<?xml version=”1.0″ encoding=”UTF-8″ ?>’.”\n” ?>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN”
“http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<title>test</title>
</head>
<body>
<?= $HTMLbody ?>
</body>
</html>複数のRSSを処理すると、かなり遅いです。
試しに、perlでRSSを統合するプログラムも制作しましたが、こちらもそれなりのお時間がかかりました・・・
改善策をご存知の方は、是非コメントください。


