スレッド表示 | フラット表示〕 全トピック 920 件中 763 番目 次≫ ≪前

IMGタグからPHPを起動させる方法

created: 2003-11-04 04:09 | modified: 2003-11-05 02:53 | reply: 4

[874] IMGタグからPHPを起動させる方法

user: dson ホームページ | created: 2003-11-04 04:09
はじまして、dsonといいます。

現在、IMGタグを使ったアクセスカウンタのスクリプトを作成しています。

<SCRIPT LANGUAGE="JavaScript">
<!--
document.write("<IMG SRC=\"DsonCnt.php?idx=0&view=0&ref="+document.referrer+"&url="+document.URL+"\">");
// -->
</SCRIPT>

ここでキリ番時、名前を入力できるように「DsonCnt.php」の中で

header("Location: ./KiriAdd.php");

という風にして、「KiriAdd.php」を立ち上げるつもりでした。

ですが、思ったような結果になりませんでした。
「KiriAdd.php」立ち上がらなく、IMGがおかしくなりました。

IMGタグで実行中のPHPから他のリンクを立ち上げる事は不可能なのでしょうか?

何かいい案がありましたら、ご教授いただけませんでしょうか。よろしくお願いいたします。
reply: 876 返信 編集 削除

[876] Re.IMGタグからPHPを起動させる方法

user: ゆうじ | created: 2003-11-04 08:55
dsonさん。おはようございます。

> ですが、思ったような結果になりませんでした。
> 「KiriAdd.php」立ち上がらなく、IMGがおかしくなりました。

これが具体的にどのような現象化なのかわかりませんが、
最終的には、DsonCnt.php を呼び出したIMGタグに、
画像ファイルを出力して処理を終えるようにしなければならないと思います。

header("Location: ./KiriAdd.php")は処理を分岐する命令ではなく、
「./KiriAdd.php を表示させてね。」というメッセージを
ブラウザに送信するための命令です。
なので、これ以降に記述してある処理は実行されませんし、
DsonCnt.php を呼び出した元のファイルに
処理が戻ることはありません。


そこで、キリ番だと判定したところで、
header ではなく、include("KiriAdd.php")で KiriAdd.php を実行し、
最終的に画像を出力すれば良いのではないかと思います。
Parent: 874  reply: 885 返信 編集 削除

[885] includeでも駄目でした・・・。

user: dson ホームページ | created: 2003-11-05 01:15
こんばんわ、dsonです。
ゆうじさん、レスありがとうございます。
include関数でも駄目でした。

処理としての流れなのですが、
?IMGタグにより、DsonCnt.php起動
      ↓
?DsonCnt.php内でカウンタが100の倍数時、キリ番フラグを立てる。
      ↓
?キリ番フラグが立っていたら、名前入力画面(KiriAdd.php)を実行する。
      ↓
?画像を表示(print出力)する

現在、キリ番フラグを常に立たした状態でデバックしています。
URLは、
http://www.aqweb.net/~dson/PHPScript/AccCnt100.html
です。
include関数時でも、やはり?の処理でのKiriAdd.phpが起動せずIMGがおかしくなっています。

コードは、このように記述しています。
<?php
include("IniFile.php");

$Cntidx = $_GET['idx'];
$viewflg = $_GET['view'];

if( $Cntidx == 0 )
{
// アクセス解析
AccAnalyzser();

// アクセスカウンタ
AccCount();
}

// 画像イメージを表示
$fp = fopen( ACC_CNT , "r+" );
$count = (int)fgets($fp);
fclose($fp);

$num = substr((string)str_pad($count,6,'0',STR_PAD_LEFT),(int)$Cntidx,1);

DispCnt($num,$viewflg);

/************************************/
/* 概要 :アクセス解析(Ver1.00) */
/* 作成日:2003.07.24 */
/************************************/
function AccAnalyzser()
{
$IpAdr = getenv("REMOTE_ADDR");

// ファイルのオープン
$fp = fopen(ACC_LOG,"a");

// 排他的ロック
flock($fp,LOCK_EX) or exit("PHP ERROR!! Lock on ACCESS LOG");

// ファイルにアクセス情報出力
$HstNm = gethostbyaddr($IpAdr);
$HenIP = AnaGlam($IpAdr);
$HenHst = AnaGlam($HstNm);
$refer = $_GET['ref'];
$url = $_GET['url'];

if( empty($refer) )
{
$refer = "直リン";
}

$buf = $HenIP . SEPA_KEY . $HenHst . SEPA_KEY . $refer .
SEPA_KEY . $url . SEPA_KEY .
(string)date('y/m/d H:i:s',time())."\r\n";
fwrite($fp,$buf);

// ロック解除
flock($fp,LOCK_UN);

// ファイルのクローズ
fclose($fp);
}

/****************************************/
/* 概要 :アクセスカウンタ(Ver1.00) */
/* 作成日:2003.07.24 */
/****************************************/
function AccCount()
{
global $count;
$IpAdr = getenv("REMOTE_ADDR");
$kiri = 0;

// アクセスカウンタログファイルを更新
$now = time();
$ret = UpDateAccLog($now);

$fp = fopen( ACC_CNT , "r+" );
flock($fp,LOCK_EX) or exit("PHP ERROR!! Lock on COUNTER DATA");
$count = (int)fgets($fp);
if( $ret == "0" )
{
$count++;
if( ($count % 100) == 0 || $count == 777)
{
$kiri = 1;
}
AccData1();
}
rewind($fp);
fwrite($fp,(string)$count);

// ロック解除
flock($fp,LOCK_UN);

// ファイルのクローズ
fclose($fp);

$kiri = 1;
if( $kiri == 1 )
{
include("./KiriAdd.php");
}
}

/************************************/
/* 概要 :アクセスログ(Ver1.00) */
/* 作成日:2003.09.07 */
/************************************/
function AccData1()
{
// 曜日別カウンタの更新
$YobiDat = file(YOBI_LOG);

$idx = (int)date("w");
$YobiDat[$idx] = (int)$YobiDat[$idx] + 1;

$fp = fopen(YOBI_LOG , "w" );

flock($fp,LOCK_EX) or exit("PHP ERROR!! Lock on YOBI DATA");
for( $i = 0 ; $i < 7; $i++ )
{
fwrite($fp,(int)$YobiDat[$i]."\r\n");
}

// ロック解除
flock($fp,LOCK_UN);

fclose($fp);

// 時間別カウンタの更新
$TimeDat = file(TIME_LOG);

$idx = (int)date("H");
$count = (int)$TimeDat[$idx];
$count++;
$TimeDat[$idx] = $count;

$fp = fopen(TIME_LOG , "w" );
flock($fp,LOCK_EX) or exit("PHP ERROR!! Lock on TIME DATA");
for( $i = 0 ; $i < 24; $i++ )
{
fwrite($fp,(int)$TimeDat[$i]."\r\n");
}

// ロック解除
flock($fp,LOCK_UN);

fclose($fp);

// 過去の訪問者のログ
$DayDat = file(DAY_LOG);

// 現在のログ件数を取得
$num = sizeof($DayDat);
$LogCt = (int)1;
if( $num < 1 )
{
$work = date("Y/m/d")."|".$LogCt."\r\n";

$fp = fopen(DAY_LOG , "w" );
flock($fp,LOCK_EX) or exit("PHP ERROR!! Lock on TIME DATA");

fwrite($fp,$work);

// ロック解除
flock($fp,LOCK_UN);

fclose($fp);
}
else
{
list($LogDay,$LogCt) = explode("|", $DayDat[0]);
$Now = date("Y/m/d");

$fp = fopen(DAY_LOG , "w" );

flock($fp,LOCK_EX) or exit("PHP ERROR!! Lock on DAY DATA");

if( $Now == $LogDay )
{
$LogCt = (int)$LogCt + 1;
$work = $LogDay."|".(int)$LogCt."\r\n";
fwrite($fp,$work);
for( $i = 1 ; $i < $num ; $i++ )
{
fwrite($fp,$DayDat[$i]);
}
}
else
{
$LogCt = (int)1;
$work = $Now."|".$LogCt."\r\n";

fwrite($fp,$work);
for( $i = 0 ; $i < $num && $i < 29 ; $i++ )
{
fwrite($fp,$DayDat[$i]);
}
}
// ロック解除
flock($fp,LOCK_UN);

fclose($fp);
}
}

function UpDateAccLog($now)
{
$IpAdr = getenv("REMOTE_ADDR");
$ret = 0;

// 登録件数取得
$CtLog = file(CNT_LOG);

$fp = fopen(CNT_LOG,"w");

// 排他的ロック
flock($fp,LOCK_EX) or exit("PHP ERROR!! Lock on COUNTER LOG");

// 記憶時間から過ぎているものを削除する。
for($i = 0; $i < sizeof($CtLog); $i++){
list($work,$tim_stmp) = explode(SEPA_KEY, $CtLog[$i]);
$LogIp = Sub_AnaBack($work);
if(($now-$tim_stmp) < REC_TIME){
if($LogIp != $IpAdr){
fputs($fp, "$work|$tim_stmp");
}
else
{
$ret = 1;
}
}
}

// 現在のIPアドレスを登録
$HenIP = AnaGlam($IpAdr);
fputs($fp, $HenIP.SEPA_KEY.$now."\r\n");

// ロック解除
flock($fp,LOCK_UN);

// ファイルのクローズ
fclose($fp);

return $ret;
}

function DispCnt($num,$vflag)
{
if( $vflag == 1 )
{
$fname = "CntImg/".$num.".gif";
}
else
{
$fname = "CntImg/ViewOff.bmp";
}

$fno = fopen($fname, 'rb');
$size = filesize($fname);
$img = fread($fno, $size);
fclose($fno);

if( $vflg == 1 )
{
header("Content-Type: image/gif");
}
else
{
header("Content-Type: image/bmp");
}
print($img);
}
?>

う?ん、難しいですね。
Parent: 876  reply: 886 返信 編集 削除

[886] すみませんでした。

user: ゆうじ | created: 2003-11-05 02:06
わたしも勘違いしていたようです。
よくよく考えてみると、
includeした結果もやはりIMGタグに帰るだけなのでダメですね。
投稿の内容をよく理解せずお返事してしまってすみませんでした。

やろうとなさってるのは、実行中のスクリプトから、
別のウィンドを開くということになるのでしょうか。
ならば、PHPからウインド制御することになりますので
私が知らないだけかもしれませんが、
PHPで出来る範囲を越えているように思います。

ソースまで挙げていただいたのにお力になれなくてすみません。
Parent: 885  reply: 888 返信 編集 削除

[888] IMGタグを使わない方向で

user: dson ホームページ | created: 2003-11-05 02:53
いえいえ、自分も色々と勉強になりましたのでお気にになさらずに^^。

IMGタグをつかった、スクリプトでなくincludeを使ったタイプに変更することで対応していきます。

色々と考えてくださりありがとうございました。
Parent: 886  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 763 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑