加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

什么会导致PHP变量被服务器重写?

发布时间:2020-12-13 16:41:23 所属栏目:PHP教程 来源:网络整理
导读:我公司给了一个虚拟机来安装网络软件.但是我遇到一个非常奇怪的问题,即如果 PHP变量与特定模式匹配,服务器将会覆盖(重写)PHP变量.什么可以重写这样的PHP变量? 以下是作为一个完整的独立脚本. ?php$foo = 'b.domain.com';echo $foo; // 'dev01.sandbox.b.dom
我公司给了一个虚拟机来安装网络软件.但是我遇到一个非常奇怪的问题,即如果 PHP变量与特定模式匹配,服务器将会覆盖(重写)PHP变量.什么可以重写这样的PHP变量?

以下是作为一个完整的独立脚本.

<?php
$foo = 'b.domain.com';
echo $foo; // 'dev01.sandbox.b.domain.com'

$bar = 'dev01.sandbox.domain.com';
echo $bar; // 'dev01.sandbox.sandbox.domain.com'

$var = 'b.domainfoo.com';
echo $var; // 'b.domainfoo.com' (not overwritten because it didn't match whatever RegEx has been set)
?>

基本上任何包含域名和域名匹配的变量都将被重写.这不是mod_rewrite能够触摸的东西,所以它必须是在解析PHP并且重写字符串(如果它匹配RegEx)的服务器级别的东西.

使用mod_perl:PerlOutputFilterHandler可以在Apache中进行输出覆盖.

可以将以下内容添加到apache.conf中以设置输出过滤器:

<FilesMatch ".(html?|php|xml|css)$">
    PerlSetVar Filter On
    PerlHandler MyApache2::FilterDomain
    PerlOutputFilterHandler MyApache2::FilterDomain
</FilesMatch>

示例过滤器处理程序代码:

#file:MyApache2/FilterDomain.pm
#--------------------------------
package MyApache2::FilterDomain;

use strict;
use warnings;

use Apache2::Filter();
use Apache2::RequestRec();
use APR::Table();

use Apache2::Const -compile => qw(OK);

use constant BUFF_LEN => 1024;

sub handler {
    my $f = shift;
    my @hostname = split(/./,$f->r->hostname);
    my $new_hostname = $hostname[0].".".$hostname[1];

    unless ($f->ctx) {
        $f->r->headers_out->unset('Content-Length');
        $f->ctx(1);
    }

    while ($f->read(my $buffer,BUFF_LEN)) {
        $buffer =~ s/([a-z0-9]+)+.domain./$new_hostname.$1.domain./g;   
        $f->print($buffer);
    }

    return Apache2::Const::OK;
}
1;

更多关于Apache mod_perl过滤器可以在这里找到:mod_perl: Input and Output Filters

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读