アプリ版:「スタンプのみでお礼する」機能のリリースについて

ただいま1つのソースで3キャリアに対応した携帯サイトを作成しております。
絵文字を表示させるために、HTMLタグボードさんで配布されている「携帯絵文字変換スクリプト 3キャリア対応」 http://www.dspt.net/tools/emoji/ (フリーソフト/改変・改造自由)を組み込んでみたのですが、
下のようなエラーになってしまいました。

絵文字が19個目までは正常に表示されて、20個目以降がエラーになってしまいます。
(テストの為にHTMLファイルの<BODY></BODY>内に同じ絵文字だけを20個以上並べたところ、絵文字の種類にかかわらず20個目から[an error occurred while processing this directive]となってしまいます。)

HTMLファイルをPCから開いても携帯から開いても上記と同じ現象が起こるので、もしかしたら携帯絵文字変換スクリプトの中に表示数の上限に関係した記述があるのではと思ったのですが、php初心者のためスクリプトを見ても原因がわかりませんでした。

もし原因の分かる方がいらっしゃったら、ぜひ教えていただければと思います。

どうぞよろしくお願いいたします。


■絵文字変換スクリプト本体 trans.php

<?php

//┌─────────────────────────────────
//│ [ EMOJI TRANS Ver2.3]
//│ trans.php - 2008/06/15
//│ Copyright (C) DSPT.NET
//│ webmaster@dspt.net
//│ http://www.dspt.net/
//└─────────────────────────────────

/********************** 初期設定 ***********************/
//絵文字変換表
$emoji_data = "emojix.csv";

//入力値取得
$num = $_GET["emoji"];

//PC用絵文字格納フォルダ
$img_dir = "/php/emoji/images/";

//ドコモ→au絵文字自動変換利用(on:1 off:0)
$ie = "1";

/********************** 以下からは改変しないほうが無難 ***********************/

//変換表を配列に格納
$emoji_array = array();
$emoji_array[] = "";
$contents = @file($emoji_data);
foreach($contents as $line){
$line = rtrim( $line );
$emoji_array[] = explode(",", $line);
}

function encode($data) {
$data = mb_convert_encoding($data, "SJIS", "auto");
return $data;
}

//携帯UA取得
$agent = $_SERVER["HTTP_USER_AGENT"];

//携帯端末のユーザエージェントを判定
function mobile($data){
if(preg_match("/^DoCoMo\/[12]\.0/i", $data))
{
return "i";// i-mode
}
elseif(preg_match("/^(J\-PHONE|Vodafone|MOT\-[CV]980|SoftBank)\//i", $data))
{
return "s";// softbank
}
elseif(preg_match("/^KDDI\-/i", $data) || preg_match("/UP\.Browser/i", $data))
{
return "e";// ezweb
}
elseif(preg_match("/^PDXGW/i", $data) || preg_match("/(DDIPOCKET|WILLCOM);/i", $data))
{
return "w";// willcom
}
elseif(preg_match("/^L\-mode/i", $data))
{
return "l";// l-mode
}
else {
return "p";// pc
}
}

//携帯キャリアに合わせて絵文字を出力
function emoji($data) {
global $agent,$emoji_array,$img_dir,$ie;
if(preg_match("/[0-9]{1,3}/", $data) && is_numeric($data) && 0 < $data && $data < 253) {
switch(mobile($agent)){
case "i";
$put = $emoji_array[$data][1];
break;
case "e";
if (preg_match("/[^0-9]/", $emoji_array[$data][2])) {
$put = $emoji_array[$data][2];
} elseif ($ie > 0) {
$put = $emoji_array[$data][1]; // Display such the icons that ezserver transformed as docomo i-emoji.
} else {
$put = "<img localsrc=\"".$emoji_array[$data][2]."\" />";
}
break;
case "s";
if (preg_match("/^[A-Z]{1}?/", $emoji_array[$data][3])) {
$put = "\x1B\$".encode($emoji_array[$data][3])."\x0F";
} else {
$put = encode($emoji_array[$data][3]);
}
break;
case "p";
$put = "<img src=\"".$img_dir.$emoji_array[$data][0].".gif\" width=\"12\" height=\"12\" border=\"0\" alt=\"\" />";
break;
}
echo $put;
}
else {
echo "[Error!]\n";
}
}

//処理
emoji($num);

?>

A 回答 (1件)

phpスクリプト側には制限はありません。



SSIで読み込んでいますので、(サーバ側で)SSIからphpスクリプトを起動する数に制限がかかっている可能性があります。

回避するとすれば、SSIでの読み込みをやめてshtml→phpにして直接埋め込むくらいでしょうか。手法は以前書いたものが下記にありますので参考にしてください。

http://sb.xrea.com/showthread.php?t=14639
    • good
    • 0
この回答へのお礼

アドバイスいただいた回避策で無事正常に表示させることができました。
ご親切に教えてくださり本当にありがとうございました。

お礼日時:2011/12/06 04:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!