我在流量交换服务或联盟计划中看到了很多脚本,如下所示
<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文件的相关广告?
答案 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
表示从RewriteCond
和RewriteRule
检索到的变量。具体而言,%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服务器,用你定义的任何变量替换局部变量。