\n", $validpath); $disp_size = array(480, 320, 240, 200, 160, 140, 120, 96, 80); $maxlength = 8192; // // ユーザエージェント情報から画像形式、画面サイズを判別 // $agent = $_SERVER['HTTP_USER_AGENT']; // 画像ファイル種別 $image = 'gif'; if (ereg('J-PHONE', $agent)) { // vodafoneはPNG $image = 'png'; } // 画面サイズ $size = 0; // EZwebの画面サイズは環境変数「$HTTP_X_UP_DEVCAP_SCREENPIXELS」から // example: HTTP_X_UP_DEVCAP_SCREENPIXELS => 233,268 $ez_screen = $_SERVER['HTTP_X_UP_DEVCAP_SCREENPIXELS']; if (ereg('([0-9]+),', $ez_screen, $r)) { $size = $r[1]; } // vodafoneの画面サイズは環境変数「$HTTP_X_JPHONE_DISPLAY」から // example: HTTP_X_JPHONE_DISPLAY => 240*260 $voda_display = $_SERVER['HTTP_X_JPHONE_DISPLAY']; if (ereg('([0-9]+)\*', $voda_display, $r)) { $size = $r[1]; } // DoCoMoは泥縄か… // // w3m http://www.nttdocomo.co.jp/p_s/imode/spec/ryouiki.html | // awk 'NF==6{print $1,$4}' | sed 's/×.*$//' | // awk '{printf "\t\t%c%s%c => %d,\n", 39, $1, 39, $2}' // $docomosize = array( 'F501i' => 112, 'N501i' => 118, 'P501i' => 96, 'F502i' => 96, 'N502i' => 118, 'P502i' => 96, 'NM502i' => 111, 'SO502i' => 120, 'F502it' => 96, 'N502it' => 118, 'SO502iWM' => 120, 'N821i' => 118, 'P821i' => 118, 'ER209i' => 120, 'F209i' => 96, 'KO209i' => 96, 'N209i' => 108, 'P209i' => 96, 'P209iS' => 96, 'R209i' => 96, 'N210i' => 118, 'P210i' => 96, 'KO210i' => 96, 'F503iS' => 120, 'P503i' => 120, 'P503iS' => 120, 'N503i' => 118, 'N503iS' => 118, 'SO503i' => 120, 'SO503iS' => 120, 'D503i' => 132, 'D503iS' => 132, 'SO210i' => 120, 'D211i' => 100, 'N211i' => 118, 'N211iS' => 118, 'P211i' => 120, 'P211iS' => 120, 'SO211i' => 120, 'R211i' => 96, 'SH251iS' => 176, 'P2002' => 118, 'P2101V' => 163, 'SH2101V' => 800, 'T2101V' => 176, 'F504i' => 132, 'F504iS' => 132, 'N504i' => 160, 'N504iS' => 160, 'SO504i' => 120, 'P504i' => 132, 'P504iS' => 132, 'D251iS' => 132, 'F251i' => 132, 'N251i' => 132, 'N251iS' => 132, 'P251iS' => 132, 'SO212i' => 120, 'N2051' => 176, 'F2102V' => 176, 'N2102V' => 176, 'SO505i' => 256, 'SH505i' => 240, 'N505i' => 240, 'F505i' => 240, 'P505i' => 240, 'D505iS' => 240, 'P505iS' => 240, 'N505iS' => 240, 'SO505iS' => 240, 'SH505iS' => 240, 'F505iGPS' => 240, 'SH252i' => 240, 'P252i' => 132, 'N252i' => 132, 'P252iS' => 132, 'F506i' => 240, 'N506i' => 240, 'P506iC' => 240, 'SH506iC' => 240, 'SO506iC' => 240, 'N900i' => 240, 'P900i' => 240, 'SH900i' => 240, 'F900iT' => 230, 'P900iV' => 240, 'N900iS' => 240, 'D900i' => 240, 'F900iC' => 230, 'N900iL' => 240, 'N900iG' => 240, 'F901iC' => 230, 'N901iC' => 240, 'D901i' => 230, 'P901i' => 240, // '642S' => 120 ); if (ereg('DoCoMo', $agent)) { reset($docomosize); while (list($key, $val) = each($docomosize)) { if (ereg("$key/", $agent)) { $size = $val; break; } } } // PCの場合 if (ereg('Mozilla', $agent)) { $size = 320; } // Zaurusの場合 if (ereg('PDA; SL-C', $agent)) { $size = 320; } if (ereg('PDA; SL-[AB]', $agent)) { $size = 240; } // サイズ調整 $org_size = $size; for ($i = 0; $i < count($disp_size); $i++) { if ($size >= $disp_size[$i]) { $size = $disp_size[$i]; break; } } if ($size <= 0) { $size = $disp_size[count($disp_size) - 1]; } $font = 16; if (intval($size / $font) < 8) { $font = 8; } // 引数チェック include("common.inc"); http_arguments(array( "me" => '', // メニュー表示フラグ "id" => '', // 変換画像ID "pg" => 0, // 表示ページ "url" => '', // ターゲットページのURL "fs" => $font, // フォントサイズ "ds" => $size, // 画面サイズ "ft" => $image, // 画像形式 (gif, png) "nl" => '', // 改行を詰めて表示 "xy" => '', // 横書き/縦書き "hs" => '' // 縮小サイズ化 )); // // セキュリティチェック // $msg = ''; if (strlen($url) > 0) { // 不正なホスト名 if (!ereg('^http://', $url)) { $url = ''; $msg = '「http://」で始まるURLを指定してください'; } // 文字チェック else if (!ereg('^http://[A-Za-z0-9\.-]+/', $url)) { $url = ''; $msg = 'URLのホストパートに使えない文字があります'; } // アクセス先を限定する (オープンリレー・オープンプロキシ対策) else if (!ereg($validpath, $url)) { $url = ''; $msg = 'そのURLにはアクセスできません'; } // localhost else if (ereg('^http://localhost[/\.]', $url)) { $url = ''; $msg = '「localhost」は使えません'; } // IPアドレスによる指定 else if (ereg('http://[0-9\.]+/', $url)) { $url = ''; $msg = 'IPアドレスによる指定はできません'; } // IPアドレスによる指定 else if (ereg('\'"', $url)) { $url = ''; $msg = 'URLに使えない文字があります'; } // 自分自身を呼び出す else if (strpos($url, $_SERVER['SCRIPT_NAME'])) { $url = ''; $msg = 'そのURLは無効です'; } } // if (strlen($url) > 0) { $default = $url; } // 画像を生成するか? if (($me != 'YES') && (strlen($id) <= 0) && (strlen($url) > 0)) { // IDの設定 if (!file_exists("dyn/id")) { $id = 0; $fd = fopen("dyn/id", "w"); fwrite($fd, "0\n"); fclose($fd); } $wait = 5; while ((!symlink("dyn/id", "dyn/lock")) && ($wait > 0)) { usleep(100000); --$wait; } if ($fd = fopen("dyn/id", "r")) { $id = sprintf("%03d", (intval(fgets($fd, 4)) + 1) % 1000); fclose($fd); } if ($fd = fopen("dyn/id", "w")) { fwrite($fd, sprintf("%03d\n", $id)); fclose($fd); } @ unlink("dyn/lock"); // テキスト読み込み $text = ''; @ $fd = fopen($url, "r"); if ($fd) { $text = fread($fd, $maxlength); fclose($fd); // テキスト保存 if ($fd = fopen("dyn/$id.txt", "w")) { fwrite($fd, $text); fclose($fd); } } if (strlen($text) <= 0) { $msg = 'unable to load target url'; } // 画像変換 // dyn/$id* を消す // ターゲットを dyn/$id.txt にダウンロード // dyn/$id.txt を画像変換して、dyn/$id-%02d.gif にする // 行おくり $ls = $fs + 2; // 縦書き時の横幅 $dw = intval(($ds / 2) / $ls) * $ls; if ($dw < $ls) { // 最低でも一行は… $dw = $ls; } // 縦書き時の高さ $dh = intval($ds * 4 / 5); $dh = intval(($dh + $fs - 1) / $fs) * $fs; // 横書き if ($xy == 'x') { $dh = intval(($dh / 2 + $ls - 1) / $ls) * $ls; } // パラメータ調整 $optxy = $xy; if ($xy != 'x') { $optxy = 'y'; } $optnl = ''; if ($nl == 'YES') { $optnl = '-nl'; } $opths = ''; if ($hs == 'YES') { $opths = '-hs'; } // 画像変換呼び出し $cmd = "/bin/sh bin/bitmap2.sh " . "-id '$id' -$optxy -$ft " . "-ds '$ds' -dw '$dw' -dh '$dh' -ls '$ls' " . "-fs '$fs' $optnl $opths"; system($cmd, $retval); if ($retval == 1) { $msg = 'no data to display'; } if ($retval == 2) { $msg = 'no font to display'; } // 環境変数を保存 if ($fd = fopen("dyn/$id.env", "w")) { reset($_ENV); while (list($key, $val) = each($_ENV)) { fwrite($fd, "$key => $val\n"); } reset($_SERVER); while (list($key, $val) = each($_SERVER)) { fwrite($fd, "$key => $val\n"); } fwrite($fd, "SIZE_FROM_UA_OR_ENV => $org_size\n"); fwrite($fd, "SIZE_TRIMMED => $size\n"); fwrite($fd, "DS => $ds\n"); fwrite($fd, "DH => $dh\n"); fwrite($fd, "DW => $dw\n"); fwrite($fd, "CMD => $cmd\n"); fclose($fd); } } if ($me == 'YES') { $id = ''; } // $npages = 0; if (strlen($id) > 0) { // 画像ファイルを探す $npages = 0; $basename = sprintf("%03d-", $id); $fd = opendir("dyn"); $nlen = strlen($basename); while ($file = readdir($fd)) { if (ereg($basename . "[0-9]+\.gif", $file)) { ++$npages; } } } if ($npages > 0) { if (($pg < 0) || ($npages <= $pg)) { $pg = 0; } $prevpg = $pg - 1; if ($prevpg < 0) { $prevpg = $npages - 2; } $nextpg = $pg + 2; if ($nextpg >= $npages) { $nextpg = 0; } $halfpg = $pg + 1; if ($halfpg >= $npages) { $nextpg = 0; } $next = $myurl . "?id=" . sprintf("%03d", $id) . "&pg=" . sprintf("%03d", $nextpg) . "&url=" . rawurlencode($url) . "&ds=" . sprintf("%d", $ds) . "&fs=" . sprintf("%d", $fs) . "&ft=" . $ft . "&nl=" . $nl . "&xy=" . $xy . "&hs=" . $hs ; $half = $myurl . "?id=" . sprintf("%03d", $id) . "&pg=" . sprintf("%03d", $halfpg) . "&url=" . rawurlencode($url) . "&ds=" . sprintf("%d", $ds) . "&fs=" . sprintf("%d", $fs) . "&ft=" . $ft . "&nl=" . $nl . "&xy=" . $xy . "&hs=" . $hs ; $prev = $myurl . "?id=" . sprintf("%03d", $id) . "&pg=" . sprintf("%03d", $prevpg) . "&url=" . rawurlencode($url) . "&ds=" . sprintf("%d", $ds) . "&fs=" . sprintf("%d", $fs) . "&ft=" . $ft . "&nl=" . $nl . "&xy=" . $xy . "&hs=" . $hs ; $topp = $myurl . "?id=" . sprintf("%03d", $id) . "&pg=0" . "&url=" . rawurlencode($url) . "&ds=" . sprintf("%d", $ds) . "&fs=" . sprintf("%d", $fs) . "&ft=" . $ft . "&nl=" . $nl . "&xy=" . $xy . "&hs=" . $hs ; $menu = $myurl . "?me=YES" . "&url=" . rawurlencode($url) . "&ds=" . sprintf("%d", $ds) . "&fs=" . sprintf("%d", $fs) . "&ft=" . $ft . "&nl=" . $nl . "&xy=" . $xy . "&hs=" . $hs ; } // 縮小表示 $sflag = ''; if ($hs == 'YES') { $sflag = 's'; } ?> 0) { printf("%s\n
\n", $msg); } ?> 0) { ?>
", $id, $pg, $sflag, $ft); print("
"); } if ($pg + 1 < $npages) { printf("\n", $id, $pg + 1, $sflag, $ft); } } else { // 縦書き if ($pg + 1 < $npages) { printf("", $id, $pg + 1, $sflag, $ft); } if ($pg < $npages) { printf("\n", $id, $pg, $sflag, $ft); } } ?>
[8]->>  [6]->
[4]<-  [2]<<<-
[0]Menu  [?]Help
Page:"> / "> "> ">
[?]
Target URL:

LCD:
FONT:
TYPE:
PAGE: ">
SHRINK:
DIR:
NL:
This "Japanese Text to bitmap gateway" converts a Japanese plain text file to monochrome image file(s). This enables to display TATEGAKI text on mobile phones which can not handle top to bottom writing.
ABSOLUTELY NO WARRANTY.
[1]HELP1
[2]HELP2
[3]HELP3