编辑:错过了回声语句!
编辑2:添加了缺失的偏执狂!
编辑3:找到解决方案。见下文!
我想要实现的是:
- 使用 PHP 动态创建 Javascript 文件
- 将 Javascript 文件作为.js作为嵌入的 Javascript 提供在不同的 URL 上
- 在JS中动态添加页面名称和页面URL信息,以便在Javascript中使用
目前我做以下工作:
代码.php
<?php header("Content-type: application/x-javascript"); ?>
/*
<?php echo $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'] ;?>
*/
/*
<?php
$func = new Functions;
echo $func->getPageURL();
echo $func->getPageName();
?>
*/
var fred;
...
class.functions.php
<?php
class Functions {
function getPageURL() {
$isHTTPS = (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on");
$port = (isset($_SERVER["SERVER_PORT"]) && ((!$isHTTPS && $_SERVER["SERVER_PORT"] != "80") || ($isHTTPS && $_SERVER["SERVER_PORT"] != "443")));
$port = ($port) ? ':'.$_SERVER["SERVER_PORT"] : '';
$data = ($isHTTPS ? 'https://' : 'http://').$_SERVER["SERVER_NAME"].$port.$_SERVER["REQUEST_URI"];
return $data;
}
function getPageName() {
$data = substr($_SERVER["SCRIPT_NAME"],strrpos($_SERVER["SCRIPT_NAME"],"/")+1);
return $data;
}
}
每当有人触发我的脚本嵌入代码时,我都会将他们路由到我的代码.php。例:
<script src="//servingdomain/dynamic/123.js"></script>
现在,我的代码.php做得很好,但返回给我这个:
/*
servingdomain/dynamic/123.js
*/
/*
https://servingdomain/dynamic/123.js
index.php
*/
var fred;
...
不幸的是,我的getPageURL和getPageName没有正确执行,但我不明白为什么。
我的目标是将其作为输出:
/*
servingdomain/dynamic/123.js
*/
/*
https://otherdomain/blog/awesome-article (page-url)
Awesome Article to read (page-name)
*/
var fred;
...
我应该如何解决这个问题并通过干净的代码或肮脏的解决方法使其正常工作......我知道Javascript中的window.location.pathname和window.location.href,但我需要在PHP中传递它们,因为我需要重用这些信息来生成代码中的动态代码.php。
溶液
使用 $_SERVER['HTTP_REFERER'] 给出正确的引荐来源网址并贯穿始终
<?php
echo $_SERVER['HTTP_REFERER'];
$func = new Functions;
echo $func->getPageTitle($_SERVER['HTTP_REFERER']);
?>
class.functions.php
function getPageTitle($url){
$str = file_get_contents($url);
if(strlen($str)>0){
preg_match("/<title>(.*)</title>/",$str,$title);
return $title[1];
}
}
输出
https://otherdomain/blog/awesome-article (page-url)
Awesome Article to read (page-name)
<?php
$func = new Functions;
$purl = $func->getPageURL()."n";//use ()
$pname = $func->getPageName();
echo $purl;
echo $pname;
?>
PHP 代码执行得很好,但它没有任何结果。您需要将值写出到文件中:
<?php header("Content-type: application/x-javascript"); ?>
/*
<?php echo $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'] ;?>
*/
/*
<?php
$func = new Functions;
$purl = $func->getPageURL;
$pname = $func->getPageName;
printf("%sn", $purl);
printf("%sn", $pname);
?>
*/
var fred;
...
这会将这些变量的值写入 javascript 文件。
请注意,如果你想在javascript代码中使用这些值,你需要将它们分配给javascript变量,就像这样,在javascript注释之外:
printf("var pageName='%s'n", $pname);
这样,您就可以在javascript中使用pageName
。
解决方案
使用 $_SERVER['HTTP_REFERER'] 给出正确的引荐来源网址
<?php
echo $_SERVER['HTTP_REFERER'];
$func = new Functions;
echo $func->getPageTitle($_SERVER['HTTP_REFERER']);
?>
通过此函数运行它
class.functions.php
function getPageTitle($url){
$str = file_get_contents($url);
if(strlen($str)>0){
preg_match("/<title>(.*)</title>/",$str,$title);
return $title[1];
}
}
输出
https://otherdomain/blog/awesome-article (page-url)
Awesome Article to read (page-name)