スクリプトのカスタマイズ
このスクリプトの構成ファイルのうち、以下はお好みで編集してください。
- Config.inc.php(設定)
- Frontpage.inc.php(アクセス先のURLが指定されていない場合の表示内容)
- Template.inc.php(HTML出力のテンプレート)
- ErrorMessages.inc.php(エラーメッセージ)
- Setup.inc.php(設定画面の表示内容)
- Auth.inc.php(セッションデータの復元操作ページの表示内容)
編集方法は各ファイルのコメント欄の内容を参照してください。以下は補足的な説明です。
アクセス制限設定(踏み台対策)
この設定は、設置時のPCでの確認作業の支障になる可能性があるため、デフォルトのままでは無効ですが、有効にされることを推奨します。
このスクリプトは、その性格上いわゆる「踏み台」として利用される可能性があるわけですが、その可能性を軽減する対策を考えてみました。いずれも設定ファイル(Config.inc.php)での設定で、詳細は設定ファイルのコメント欄を参照ください。
ひとつはモバイルキャリアのネットワーク以外からのアクセスを禁止する設定です。ただし、これを設定すると、スクリプトの管理者がPCなどからの確認作業を行うこともできなくなる筈なので、この対象外とするIPアドレス範囲を指定することができるようにしてあります。
なお、以前までのバージョンにはUser-Agentによるアクセス制限の設定がありましたが、User-Agentは偽装可能なためこれは廃止します。携帯端末以外からのアクセスを禁じる場合はこちらを代わりに利用してください。
なんらかの理由で上の設定を利用したくない(一般のPCからのアクセスも許可したい)場合には、DNSBLに登録されているIPアドレスからのアクセスを禁止する設定を利用してください。踏み台にされる可能性は高まりますが、いわゆる「多段串」としての利用は抑止することができると思います。ただし、DNSBLの中にはモバイルキャリアのプロキシが登録されてしまっている場合もあるため、モバイルキャリアのネットワークからのものとみなされるアクセスについては、この確認は行いません。従って、上の設定と併用することは無意味ですのでご注意ください。
これを利用する場合は、PEARのNet_DNSBL、及びその依存パッケージであるNet_CheckIPが必要になります。各パッケージをインストールするか、pearpack.zipに収録されているものを利用ください。
なお、DNSBLへの問い合わせはそれなりの時間を要するため、セッションを初期化する際、つまり初めてのアクセスの際にのみ行い、以降の継続的なアクセスの際には行いません。また、セッション機能を無効にしている場合、これは利用できません。もし、セッション機能を無効にしていて、これを利用される場合はpc2m.phpを改造してください(不明な場合ご相談ください)。
この他、ロボットによるSPAM送信を回避する目的で、セッションを初期化する際に、リモートサイトへのフォーム内容の送信を行うためのパラメータがリクエストに含まれている場合はリクエストを無効にする措置を講じています(初めてのアクセスでいきなりPOSTはあり得ないだろうということ)。なお、これもセッション機能が有効な場合のみの動作です。
外部サイトへの直リンク(r.phpの使い方)
ErrorMessages.inc.phpの一部のエラーメッセージや、Template.inc.phpの「直」リンクのように、外部サイトへの直接のリンクを記述する場合は、セッションIDがRefererによって外部に漏洩するのを防ぐために、必ず「<a href="r.php?外部サイトのURL">」のように、中継スクリプト(r.php)を経由するリンクにしてください(URLは、エンコードの有無は問いません)。r.phpは、Refererを送信しない端末や、Cookieが有効な(セッションIDがURLに露出していない)端末では、そのままシームレスに外部サイトにリダイレクトし、そうでない場合は、いったんクッション画面を表示します。
まお、セッションIDの漏洩の危険性についてはセッションとセキュリティをご覧ください。
画質の選択
Template.inc.phpでは、画像の表示時に、利用者が画質を選択するユーザインタフェースを用意することができますが、これには、入力フィールドに数値を直接入力させるものと、プルダウンメニューなどから選択させるものの、ふた通りが考えられます。前者は、画像形式についての知識を有する利用者にとって精緻な指定が可能ですが、後者の、例えば「高・中・低」とあるプルダウンから選択させるようなインタフェースのほうが、多くの利用者にとってはわかりやすいと思われるため、既定のTemplate.inc.phpでは後者を採用しています。
このスクリプトは、「50」のように、数値のみの場合と、「50%」のように、数値に%記号を続ける場合の、ふた通りの指定を受け付けます。
| 入力値 | 出力形式 | 説明 |
|---|---|---|
| 数値のみ(例:50) | JPEG | 入力値はそのままJPEGの圧縮率になります。入力値の有効範囲は0~100です。 例えば、入力値が「50」なら、出力されるJPEGの圧縮率は50%となります。 |
| GIF|PNG | 入力値はそのままパレットの色数となります。入力値の有効範囲は1~256です。 例えば、入力値が「50」なら、出力されるGIF|PNGのパレットは50色となります。 | |
| 数値と%記号(例:50%) | JPEG | 数値のみの入力の場合と同じです。 入力値はそのままJPEGの圧縮率になります。入力値の有効範囲は0~100%です。 例えば、入力値が「50%」なら、出力されるJPEGの圧縮率は50%となります。 |
| GIF|PNG | 元画像がGIF|PNGならそのパレットのビット数、JPEGなら6ビット(64色)を50%として、0~100%の範囲の入力値を、1~8の範囲のビット数(2~256色)に換算します。 例えば、元画像が5ビット(32色)のパレットを有するGIF|PNGの場合、出力されるGIF|PNGのパレットは、入力値が「50%」なら32色(5ビット)、入力値が「20%」なら8色(3ビット)、入力値が「70%」なら64色(6ビット)となります。 |
- いずれの場合も、入力値が有効範囲外の場合は有効範囲内にまるめられます。
- 元画像がGIF|PNGで、表示する画像形式もGIF|PNGの場合、画質を指定しない場合は、元画像のパレットが表示画像にコピーされるため、両者のパレットの各色は同じですが、画質を指定する場合は、元画像と表示画像のパレット色数が同じでも、両者のパレットの各色は同じとは限りません。
このように、数値のみの場合は、表示形式がJPEGの場合とGIF|PNGの場合で値の範囲が異なりますが、数値に%記号を続ける場合は、いずれの表示形式でも値の範囲は共通です。
端末が複数の画像形式をサポートしている場合、利用者がどの表示形式を選択するのか事前に知ることはできないので、プルダウンメニューなどのように、あらかじめ用意してある中から選択させるようなインタフェースでは、以下のように、数値に%記号を続ける形式を採ることで、どの形式が選ばれた場合でも、共通に対応することができます。
<select name="_ucb_q"> <option value="">自動 <option value="75%">高 <option value="50%">中 <option value="35%">低 </select>
画像の表示時に、フォームに利用者の入力値を反映するには、入力値を格納した変数$image_qualityを利用します(なお、入力値が有効範囲外の場合は、入力値そのままではなく、有効範囲内にまるめられた値となります。例えば、入力値が「200%」であった場合は、$image_qualityの値は「100%」となります)。
以下はこの例で、上は、入力フィールドに数値を直接入力させる場合で、下は、プルダウンメニューから選択させる場合のものです。
<input type="text" name="_ucb_q" value="<?php echo $image_quality ?>">
<select name="_ucb_q"> <option value="">自動 <option value="75%"<?php echo $image_quality == '75%'? ' selected': null ?>>高 <option value="50%"<?php echo $image_quality == '50%'? ' selected': null ?>>中 <option value="35%"<?php echo $image_quality == '35%'? ' selected': null ?>>低 </select>
RSSフィード
アクセス先のページに、RSSフィード(RSS 1.0とRSS 2.0)の情報を記述したLINK要素が検出される場合、Template.inc.phpではこの情報を、以下の2種類の変数を利用して反映することができます。
- 変数$rss_urlは、そのページのHTML中で最初に登場する、RSSフィードに関するLINK要素の、href属性値(をリクエストに含むこのスクリプトのURL)です。これは全てのバージョンで利用可能です。
<?php if ($rss_url) echo "<a href=\"$rss_url\">このサイトのRSS</a>"; } ?>
- 連想配列$rssは、バージョン0.9.5以降で利用可能です。これは、そのページ内にある、RSSフィードに関する全てのLINK要素の、href属性値(をリクエストに含むこのスクリプトのURL)をキーに、title属性値(またはhref属性値のファイル名の一部)をその値に、それぞれ格納しています。
<?php if ($rss) { foreach ($rss as $href => $title) { echo "<a href=\"$href\">$title</a>"; } } ?>
一般的にRDFとRSS 2.0では、このスクリプトが変換表示する内容に大差はなく、またtitle属性値が適切に与えられているとは限りませんから、通常は前者を利用したほうがよいと思われます。
Mobile Link Discovery
バージョン0.9.5以降では、アクセス先のページ内で、Mobile Link Discoveryの情報が記述されたLINK要素が検出される場合、変数$mobile_urlにそのhref属性値が格納されます。Template.inc.phpでこれを利用者に示すことで、利用者は、そのサイト本来の携帯版にもアクセスすることができるようになります。
<?php
if ($mobile_url) {
echo "<a href=\"r.php?$mobile_url\">このサイトの携帯版</a>";
}
?>
2005/08/10
トラックバック
このエントリーのトラックバックURL:
http://www.rcdtokyo.com/mt/mt-rcdtokyo5428-tb.cgi/134
コメント
どこに書けば良いのか解らないのでここに…
不具合報告です。
gooの画像検索に利用すると、画像をクリックするとトップに飛ばされるみたいです。
http://bsearch.goo.ne.jp/
後 タグを除いたページのテキストを丸々取得する方法ってあるのでしょうか?
どうしても上手く行きません…(T-T)
Posted by Flash Mausさん at 2007/02/24 03:37
gooの画像検索のはマヌケなバグでした。
sourceforge.jpに修正版をアップしたので、そちらをご利用ください。pc2m.phpだけ入れ替えていただければOKの筈、たぶん。
とゆうか久しぶりのバグ発覚&リリース更新につき、コソコソとやってたコードの変更が中途半端になってる可能性もあり、なんか間違ってるかもしれないので人柱よろしこ(藁
※以前にお問い合わせいただいたTEXTAREA内の文字数の変更の箇所は1413行目になってます。お手数ですがこれは手動で変更してやってください。
> タグを除いたページのテキストを丸々取得する方法ってあるのでしょうか?
希望されているのであろうと思われる機能はないので自力で実装していただくことになるかと思いますが、この、今や複雑になってしまったスクリプトをいぢろうとするとかなり面倒な筈。
HTMLを拾ってきてタグを削って出力するだけなら、PHPなら以下のような簡単なコードで出来てしまうわけで。
$url = 'http://www.yahoo.co.jp/';
$out = file_get_contents($url); // HTML取得
$out = strip_tags($out); // HTMLタグ除去
$out = nl2br($out); // 改行をBRに変換
echo $out;
この手のプログラムを新たに作成し、それをPC2M経由でアクセスするようにして、文字コードの変換や、余分なホワイトスペースの除去、ページ分割といっためんどくさい処理はPC2Mにやらせとくのが、楽ちんではないかと思います。
Posted by ucbさん at 2007/02/26 18:16
ありがとうございます。
goo画像正常に取得出来ました。
テキストのみの取得も上手く行きました。
前回 お教え頂いたやり方だけだと、抜けてしまう文字があったのですが、このプログラムを挟んだら、文字抜けなくテキストの取得が可能でした。
自力で解決すべき事なのかも知れませんが、
下記のURLを
> $url = 'http://www.yahoo.co.jp/';
pc2mなどのプロキシと同じ様に、動的に取得する(http://(pc2m)?http://***.**.jp)のは簡単に変更出来るのでしょうか?
転送URLなどのプログラムを手本にしていじろうと思ったのですが、如何せん基礎が無いもので、煮詰まってしまいました。
御教授頂けたなら幸いです。
Posted by Flash Mausさん at 2007/02/27 07:12
URLを入力するフォームを追加した、最もシンプルなコードは以下のような感じかと。
<?php
if (isset($_GET['url']) and preg_match('/^https?:\/\/[a-z0-9\-]+\.[a-z0-9\-\.]+/', $_GET['url'])) {
exit(nl2br(strip_tags(file_get_contents($_GET['url']))));
}
?><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=Shift_JIS">
<title>タイトルは必須だyp</title>
</head>
<body>
<form>
<p><input name="url"><input type="submit"></p>
</form>
</body>
</html>
URLの「?」記号以降をQuery Stringと言い、通常これは「名前1=値1&名前2=値2&~」という形式になってます。
PHPスクリプトのURLにクエリーストリングが付いてると、スクリプト内では「$_GET['名前']」のように書くことでその値を取得できます。
上のスクリプトにアクセスして表示されるフォームに「http://www.yahoo.co.jp/」と入力して送信すると、クエリーストリングは「url=http%3A%2F%2Fwww.yahoo.co.jp」となりますが、スクリプト内で「$_GET['url']」と書くと、この場合はそれが「http://www.yahoo.co.jp/」に置き換わるという按配です(上の「%2F」など、URLエンコードされてる文字は自動的にデコードされます)。
これは仕様的には極めて不十分なのですが、まずはこんなところで。
あとは以下あたりを参考に。
http://php.s3.to/tt/
Posted by ucbさん at 2007/02/27 12:12
お久し振りです。
***.inc.php
っというPHPのファイルを作成し、そこに
Config.inc.php
の
define('DEFAULT_URL', 'http://www.foo.bar/');
と同じ様に指定したページを変換して表示させたいのですが、
どうすれば表示させるページを指定出来るのかが分かりません。(-_-;)
つまり、例えば
yahoo.inc.phpとファイルを作成し、
http://pc.3ne.biz/index.php?_ucb_a=yahoo
でアクセスした際に、
http://www.yahoo.co.jp/
を変換して表示させたいのです。
http://pc.3ne.biz/index.php?_ucb_a=yahoo
で
yahoo.inc.php
を表示させるのは理解したのですが、
http://www.yahoo.co.jp/
を変換して表示させるのが分かりません。
ご教授願えたなら幸いです。
Posted by Flash Mausさん at 2007/11/16 23:27
~=yahooで異なる設定ファイルを読み込ませたいのか、それとも単にYahooトップを変換表示させたいのか、どっちなんでしょ?
前者なら設定ファイルを読み込んでるところで分岐すればいいし、後者は普通にクエリーストリングにURLを指定すればいいだけのような。
クエリーストリングが長ったらしくて気持ち悪いというハナシなら、それはそれで短いキーワードとそれに応じたURLの参照表を作ればいい、というか、クイックサーチをそういうふうに応用してしまってもいんじゃないかと。
Posted by ucbさん at 2007/11/19 10:22
回答ありがとうございます。
やっぱりその手が一番無難ですか…(-_-;) >クイックサーチをそういうふうに応用
次々と質問をして申し訳ないのですが、Template.inc.phpを複数作って利用者が簡単に切り替えられたら便利だと思うのですが、難しい事なのでしょうか?
Posted by Flash Mausさん at 2007/12/10 21:48
難しくはないですよ>テンプレ切り替え
pc2m.phpの最初のほうに$_template_pathという、値がNULLの謎の変数がありますが、これにパス名を与えてやれば、カスタマイズが発生するであろうファイル(Setup、Option、Auth、Frontpage、Template、ErrorMessages)をそのパスから読むようにしてます(初期値がNULLって、カレントパス(せめて空文字)じゃねえの?という突っ込みはスルーでw)
なので適当なリクエストパラメータを追加して、それに応じてここの値を変更するようにすればいいです。例えばパラメータ値が0ならこの値を「locales/ja_JP/」、1なら「locales/en_US/」にして表示言語を切り替える、みたいな。
パラメータのクエリーストリングなどでの引き回しやセッションへの保存と復元は他のパラメータの例で確認ください。
Posted by ucbさん at 2007/12/13 11:08
返答遅くなってしまいました。
おー
出来るんですね。
でも…
私の理解の範囲外みたいです。Σ(T▽T;)
ちょっとそこを目標に頑張ってみます。
Posted by FlashMausさん at 2008/01/10 12:42
またまた質問ですいません。
携帯以外のアクセス制限を掛けてある状態で、閲覧を許可するIPアドレスやホストを増やすには、
$exclude_iprange = array(
'***.***.***.0/24',
);
をどの様に変更すれば良いのでしょうか?
それと、auのオープンアプリプレイヤーに対応したOpera Miniを見付けたのですが、
http://qwe.ne.jp/appli/_Opera%20Mini/
Operaのサーバーでの圧縮率が低く、閲覧出来ないページが多いので、
pc2mで閲覧の補助をする様にしたいのですが、現在の変換では、無効化されるタグが多いので、もう少し変換されないタグを増やしたいのですが、どこをいじれば良いのでしょうか?
ご教授頂ければ幸いです。リ
Posted by FlashMausさん at 2008/01/10 16:47
IPアドレスは配列項目に追加していってください。
ちなみに書式はIPRange.inc.phpの中身と同じです。
タグは、変換する・しないを設定できるようにしてはいないのでプログラムを変更する必要がありますが、かなり面倒なのでお勧めではありません。
Posted by ucbさん at 2008/01/19 16:12
はじめまして。
FlashMausさんの携帯変換スクリプトを試用させて頂いております。
質問ですが、Auの端末機から下記のような要素を呼び出すと通常は、
電話番号をリンクしますが、携帯変換スクリプトを通すとText表示のみ
でリンクが出来ないのですが、方法はありますでしょうか。
A href="tel:$bikou_form"連絡
あまり詳しいほうではありませんので、教えていただければ助かります。
宜しくお願いします。
Posted by MobileBOYさん at 2008/01/27 15:44
先ほど投稿したMobileBOYです。
”ucbさんの携帯変換スクリプトを”と記述するところを、”FlashMausさんの”
と記述してしまいました。関係者の皆様にはご迷惑をおかけいたしました。
改めてお詫びいたします。
MobileBOY
Posted by MobileBOYさん at 2008/01/27 16:10
ご回答ありがとうございます。
IPアドレスの複数設定が上手く行きました。
当面はOpera miniのIPアドレスを許可にするだけにし、Opera miniでも利用出来る事を告知せずに、こっそりと自分自身で利用しようかと思っています。
Posted by FlashMausさん at 2008/02/02 00:58