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


.js file as javascript source but acting as php on backend

我在流量交换服务或联盟程序中看到了很多脚本,比如下面的

<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?

像这样的脚本可能是由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 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回调,用您定义的任何变量替换本地变量。