繁体   English   中英

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

查询变量limit = 10。 同样,这是javascript还是php? 如果是javascript,如何访问此变量?

Google Ads的其他示例

<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文件包含在适当的标头中。

请注意,将JavaScript变量直接包含在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代表从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 Ads

原始的.js脚本只是一个.js脚本。 脚本正在执行的操作是生成一个ajax调用,返回给Google服务器,用您定义的任何变量替换本地变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM