我正在尝试创建一个PHP脚本,该脚本将始终在每次页面加载时调用,而不会更改网站的现有代码,并且尽可能少地进行额外配置。
这是我的问题,我不希望它影响有关实际请求(标头)的任何内容。以下是所需的流程:
请求> somescript.php -> 实际目的地
因此,我不能使用 header() 函数,解决方案必须完全在服务器端。
我在想,在脚本完成它的任务后,它可以包含/需要预期的 PHP 文件。
任何想法/建议将不胜感激。
问候
布兰登·马丁
PS:我不能在.htaccess文件中使用php_value,因为有时会在CGI环境中使用。
底线:需要一些代码在每个服务器请求上运行
您希望在任何其他脚本之前执行脚本?如果你使用Apache,我可以想到一个可能的解决方案......如果你可以用.htaccess
重写...
.htaccess
:
RewriteEngine On
RewriteBase /test
RewriteRule !(common.php) common.php/$1
common.php
:
<?php
$request=substr($_SERVER['REQUEST_URI'],6);
if($request==""){
$request="index.php";
}
if(substr($request,0,1)=="/"){
// Prevent browsing local files (*nix)
header("HTTP/1.1 403 Forbidden",true,403);
}else if(!file_exists($request)){
// Not found
header("HTTP/1.1 404 Not Found",true,404);
}else{
// Request URI should be valid
do_what_you_want_to_do_before_anything_else();
// Include the original request URI...
if(substr($request,-4)==".php"){
include $request;
}else{
// Prevent executing non-PHP code
echo file_get_contents($request);
}
}
?>
仍然有很多代码要编写,包括安全措施和更改$_SERVER
数组(如果子脚本关心)。
如果你可以修改服务器的php.ini也许你可以使用auto_prepend_file指令?
不过,您需要小心:如果您将其直接添加到.ini则它对该网络服务器托管的所有站点都处于活动状态。您还可以通过 apache 或 php-fpm 中的php_value添加它,以在每个站点的基础上执行此操作,或者您可以在脚本中构建站点检测。
就配置它的易用性而言,您无法使其更简单。