有没有人知道一种自动方式来判断PHP脚本是直接调用(作为HTML页面),还是作为JavaScript,还是作为CSS样式表?
没有GET变量,或者在文件中设置一个标志(这就是我现在正在做的事情)。
好奇。
编辑:一些背景知识,因为答案要求:我之所以需要这个是我在提供HTML网页时以及提供CSS文件时使用的框架。这个frameweork有一个自定义错误处理程序。当我处于JS“模式”时,我想将错误作为JS警报()抛出。当我处于CSS模式时,可能是红色的身体背景或其他东西。为了代码清洁,我想避免使用标志(?mode = css)或常量定义,但是几位回答者已经确认没有“神奇”的方法来找出资源的用途。
答案 0 :(得分:4)
所以你要区分:
<link type="text/css" rel="stylesheet"
href="http://example.com/path/to/php-file.php" />
<script type="text/javascript"
src="http://example.com/path/to/php-file.php"></script>
或者只是打开
http://example.com/path/to/php-file.php
在浏览器中。
在这些情况下没有设置标志来区分如何文件被调用。您可以通过$_SERVER
检查<?php print_r($_SERVER); ?>
数组,并且每种情况都应该相同。
我认为你将?mode=css
或?mode=js
添加到网址的末尾 - 这似乎是切换所需输出类型的合理方式。然后在代码中你可以做到:
$mode = (isset($_GET['mode']) ? $_GET['mode'] : '';
switch ($mode):
case 'css':
// css
break;
case 'js':
// js
break;
default:
// default
endswitch;
答案 1 :(得分:3)
如果我理解正确,你有一个自称的页面,(就像这样):
<?php // page.php
if (is_called_as_js()) {
header('Content-Type: text/javascript;charset=utf-8');
echo "alert('hello');";
exit;
} elseif (is_called_as_css()) {
header('Content-Type: text/css');
echo 'body { color: green }';
exit;
}
?>
<html>
(...)
<script src="page.php"></script>
<link rel="stylesheet" href="page.php" />
在这种情况下,不,没有办法告诉 - 浏览器发送一条说GET /page.php
的请求。没有提到任何意图 - 只是“给我页面,浏览器将决定如何处理它”。 (是的,是的,有Accept
还有什么,没有看到现代浏览器实际上使用此功能说“给我这个页面为CSS”,大多数只是说Accept: */*
)
如果你坚持所有输出,无论是JS,CSS还是HTML,都应该使用一个文件生成,我建议使用URL重写器(假设Apache HTTP服务器,这将是mod_rewrite;大多数平台以某种方式提供此功能)。使用mod_rewrite的示例:
# .htaccess
RewriteEngine On
RewriteRule ^css/(.*) /page.php?type=css&file=$1 [L]
RewriteRule ^js/(.*) /page.php?type=js&file=$1 [L]
这样,当您的脚本运行时,/css/style.css
的请求将显示为page.php?type=css&file=style.css
,类似于/js/foobar.js
。
(从技术上讲,你仍然使用GET变量来查明结果是否应该是HTML,JS或CSS;但是对于用户来说它是不可见的,如果查询,你可以解决一些旧浏览器的限制“字符串,不要破坏缓存或缓存“)
答案 2 :(得分:1)
没有
但是你真的没有理由要这么做。您应该将非常不同的php文件称为css或js文件,或者您应该传递get参数。他们对你的代码进行布局应该是明确的。
答案 3 :(得分:0)
虽然我不清楚为什么你想通过一个脚本生成这种不同的文件类型,但你可以使用不同的包装器:
<?php // js.php
define('TYPE','javascript');
require('page.php');
?>
<?php // css.php
define('TYPE','css');
require('page.php');
?>
<?php // page.php
if (!defined('TYPE')) {
?>
<script src="js.php"></script>
<link rel="stylesheet" href="css.php" />
<?php
} else if (TYPE == 'javascript') {
header('Content-Type: text/javascript;charset=utf-8');
?>
alert('hello');
<?php
} else if (TYPE == 'css') {
header('Content-Type: text/css');
?>
BODY { color: red }
<?php
}
?>
你最终还是要访问page.php,但现在你知道了什么意图。