.js文件作为javascript源但在后端充当php

时间:2015-02-11 10:56:38

标签: javascript php

我在流量交换服务或联盟计划中看到了很多脚本,如下所示

<script type="text/javascript" src="http://trafficexchange.com/trafficout/user/300?limit=10"></script>

没有文件扩展名的来源。这是如何运作的?这是一个javascript文件或php文件?如果这只是javascript,他们怎么能访问数据库来收集有关谁点击你的链接等的统计数据(AJAX?)?

查询变量limit = 10。再次,这是javascript还是php?如果是javascript,你怎么能访问这个变量?

Google广告的其他示例

<script type="text/javascript">
    google_ad_client = "xxxxxxx";
    google_ad_slot = "xxxxx";
    google_ad_width = 336;
    google_ad_height = 280;
</script>

<script type="text/javascript"
src="//pagead2.googlesyndication.com/pagead/show_ads.js">
</script>

同样,google如何访问他们的数据库以显示仅包含.js文件的相关广告?

2 个答案:

答案 0 :(得分:1)

客户端只需要包含<script>文件的一件事:拥有正确的Content-type: application/javascript标题。

所以像这样的PHP文件是有效的(虽然形式不好):

<?php
header('Content-type: application/javascript');
?>

var answerToEverything = <?php echo 42; ?>;

浏览器会将其视为包含

的有效JavaScript文件
var answerToEverything = 42;

即使文件未明确命名为.js

更通用的方法是捕获所有请求到您的网络服务器,执行一些操作,然后使用正确的标头包含您的JavaScript文件。

请注意,直接在JavaScript文件中包含PHP变量被认为是不好的做法。

有关详细信息,请参阅How to pass variables and data from PHP to JavaScript?

答案 1 :(得分:0)

这样的脚本可能是由PHP(或类似的服务器端脚本语言)运行的。

在Apache服务器上执行此操作的情况是,在.htaccess文件中添加类似于以下内容的内容:

RewriteCond %{QUERY_STRING} (.*)
RewriteRule ^trafficout/user/(\d+)$ some-script.php?%1&user=$1 [L]

这是在寻找上述文件的任何请求,然后将查询字符串((.*))和用户ID((\d+))传递到php脚本中。

%1和$ 1在做什么?

在htaccess文件中%1$1表示从RewriteCondRewriteRule检索到的变量。具体而言,%n表示从%{QUERY_STRING}条件获取的任何变量,$n重复从规则获取的任何变量。在这两种情况下,n代表变量id。在上面的示例中,有一个查询字符串变量和一个重写规则变量,因此它们都是1

对于您问题中的脚本,这会将重写规则的第二部分转换为:

some-script.php?limit=10&user=300

我们如何从查询字符串等中获取变量是通过正则表达式完成的,并且是我现在不打算进入的其他主题。

然后,PHP脚本将使用$_GET或类似内容获取变量,例如:

$user = $_GET['user']; //bad example - no validation etc.

<强> [L]吗

这是一个标志,用于告诉服务器停止处理更多重写规则。

没有文件扩展名

可以调用没有文件扩展名的文件,只要脚本设置了正确的内容类型标题,浏览器就会处理返回的文件。在PHP中,这将完成如下:

<?php
header('Content-type: application/javascript');

并在任何内容之前发送。

Google广告

原始的.js脚本只是一个.js脚本。该脚本正在做什么正在生成一个ajax回调给Google服务器,用你定义的任何变量替换局部变量。