我在流量交换服务或联盟程序中看到了很多脚本,比如下面的
<script type="text/javascript" src="http://trafficexchange.com/trafficout/user/300?limit=10"></script>
没有文件扩展名的源。这是怎么回事?这是javascript文件还是php文件?如果这只是javascript,他们如何访问数据库来收集关于谁点击了你的链接等的统计数据(AJAX?)?
查询变量限制=10。再说一遍,这是javascript还是php?如果是javascript,如何访问这个变量?
谷歌广告的其他示例
<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>
同样,谷歌如何访问他们的数据库,只需一个.js文件就可以显示相关广告?
客户端只希望包含的<script>
文件有一件事:具有正确的Content-type: application/javascript
标头。
因此,像这样的PHP文件是有效的(尽管格式不好):
<?php
header('Content-type: application/javascript');
?>
var answerToEverything = <?php echo 42; ?>;
浏览器会将其视为包含的有效JavaScript文件
var answerToEverything = 42;
即使文件没有明确命名为.js
。
一种更通用的方法是捕获对Web服务器的所有请求,执行一些操作,然后将您的JavaScript文件包含在适当的头中。
请注意,将PHP变量直接包含在JavaScript文件中被认为是不好的做法。
有关更多信息,请参阅如何将变量和数据从PHP传递到JavaScript?
这样做的情况是,在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
s中检索到的变量。具体而言,%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');
并且在任何内容之前发送。
谷歌广告
最初的.js脚本只是一个.js脚本。脚本所做的是生成一个对GoogleServers的ajax回调,用您定义的任何变量替换本地变量。