1

AJAX と PHP を使用して、訪問者がページに費やした時間をサーバーに伝え、そこで PHP スクリプトが費やした時間を他の詳細と共にテキスト ファイルに書き込みます。AJAX スクリプトは php スクリプトを呼び出すことができないため、訪問者の詳細が記録されません。

<script type="text/javascript">
    var startTime = new Date();        //Start the clock!
    window.onbeforeunload = function()        //When the user leaves the page(closes the window/tab, clicks a link)...
    {
        var endTime = new Date();        //Get the current time.
        var timeSpent = (endTime - startTime);        //Find out how long it's been.
        var xmlhttp;        //Make a variable for a new ajax request.
        if (window.XMLHttpRequest)        //If it's a decent browser...
        {
            // code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp = new XMLHttpRequest();        //Open a new ajax request.
        }
        else        //If it's a bad browser...
        {
            // code for IE6, IE5
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");        //Open a different type of ajax call.
        }

        xmlhttp.open("GET","ajaxphp.php?time="+timeSpent,false);        //The false at the end tells ajax to use a synchronous call which wont be severed by the user leaving.
        xmlhttp.send();        //Send the request and don't wait for a response.
    }
</script>

これはAJAXスクリプトです

PHP スクリプトも以下に示します。

<?php
$time=$_GET["time"];

$countfile = "counter.txt";

// location of site statistics.
$statsfile = "stats.txt";

// checks whether the file exist, if not then server will create it.
if (file_exists($countfile)) {

// open the counter hit file.
$fp = fopen($countfile, "r"); 

// reads the counter hit file and gets the size of the file.
$output = fread($fp, filesize($countfile));

// close the counter hit file.
fclose($fp); 

// get the integer value of the variable.
$count = intval($output);
}

// if file is doesn't exist, the server will create the counter hit file and gives a value of zero.
else { 
$count = 0;
}

// showcount function starts here.
function ShowCount() { 

// declares the global variables.
global $ShowCount, $countfile, $statsfile, $count,$time;

// get the current month.
$month = date('m');

// get the current day.
$day = date('d');

// get the current year.
$year = date('Y');

// get the current hour.
$hour = date('G');

// get the current minute.
$minute = date('i');

// get the current second.
$second = date('s');

// this is the date used in the stats file
$date = "$month/$day/$year $hour:$minute:$second";

// this is the remote IP address of the user.
$remoteip = getenv("REMOTE_ADDR");

// some of the browser details of the user.
$otherinfo = getenv("HTTP_USER_AGENT");

// retrieve the last URL where the user visited before visiting the current file.
$ref = getenv("HTTP_REFERER");

// open the statistics file. 
$fp = fopen($statsfile, "a");

// put the given data into the statistics file.
fputs($fp, "Remote Address: $remoteip | ");
fputs($fp, "Information: $otherinfo | ");
fputs($fp, "Date: $date | ");
fputs($fp, "Referer: $ref\n");
fputs($fp, "Time Spent: $time | ")

// close the statistics file.
fclose($fp);

// adds 1 count to the counter hit file.
$count++;

// open the counter hit file.
$fp = fopen($countfile, "w");

// write at the counter hit file.
// if the value is 34, it will be changed to 35.
fwrite($fp, $count);

// close the counter hit file.
fclose($fp);

// showcount variable is equal to count variable.
$ShowCount = $count;

// return the value of the count variable into showcount variable.
return $ShowCount;
}

// display the value in the counter hits file.
echo showcount(), " visits";

?>
4

1 に答える 1

1

次のことを試してください。

  • Web ブラウザで URL ajaxphp.php?time=123456 に直接アクセスし、何が起こるかを確認します。
  • ajax 呼び出しをアクティブにするボタンで onclick ハンドラーを使用し、何が起こるかを確認します。
  • ajax の代わりに jquery を使用し、何が起こるかを確認します

これらのいずれかが、現在のセットアップが失敗する理由についての手がかりを提供してくれると確信しています。

于 2012-01-16T09:57:32.307 に答える