繁体   English   中英

Apache-打开HTML文件时如何运行PHP脚本?

[英]Apache - How can I run a PHP script when opening HTML files?

背景

我在一个网站上工作,该网站在Windows上的Apache服务器上运行(至少目前是这样)。 我的网站目录包含HTML和PHP文件。 这个想法是将可访问的网页作为HTML文件,并且每当我需要使用动态内容时,我都会使用Javascript和AJAX请求,以便从服务器请求我需要的内容。 将向PHP脚本发出AJAX请求,该脚本具有专用于它们的目录。 因为我想将所有内容组织在自己的单元中,所以这就是我这样做的方式(我尽量避免使用内联PHP)。

目的

公用HTML文件不需要任何特殊设置。 但是,当涉及到管理员专用的HTML文件时,我想对它们做一些非常具体的事情。 我不想编写一些内联PHP代码来在管理员网页(HTML文件)上对用户进行管理员身份验证,而是希望在用户尝试打开管理员特定的HTML文件时执行身份验证脚本,以检查用户是否可以打开文件。

简而言之,这是我的问题: 打开HTML文件时如何运行PHP脚本? 我需要在Apache服务器上进行哪种配置,还是可以简单地以某种方式利用PHP?

您可以尝试使用iframe / embed代码,

要么:

<html>

<head>
    <script src="js/jquery.min.js"></script>
    <script>
        $(document).ready(function(){
            $.ajax({
                url: 'php_File_with_php_code.php',
                type: 'GET', 
                data: 'parameter=some_parameter',
                success: function(data) {
                    $('#thisdiv').html(data);
                }
            });
        });
    </script>
</head>

<body>
    <div id="thisdiv"></div>
</body>

</html>

来源: 如何在html文件中运行php脚本?

如果您提供静态HTML文件,则不能阻止用户不使用PHP之类的编程语言(或.htaccess )来访问它。 但是,有多种方法可以处理您的情况:

  1. 您可以使用AJAX从PHP脚本中获取所有管理数据。 这意味着从理论上讲,所有用户都可以看到您的管理是如何构建的(没有相关数据的整个HTML结构)。 当然,如果AJAX调用失败,则可以创建重定向,但是您仍将提供管理的整个HTML。
  2. 您可以将管理HTML文件存储在后端。 然后,用户尝试访问管理,而他得到的唯一是对后端的AJAX调用。 如果调用成功,则HTML随AJAX一起传递到前端。 这样可以防止用户看到您的管理HTML。
  3. 您可以在每个管理页面的顶部使用一个小的PHP代码段,以检查用户是否应有权访问该页面。 这样可以防止用户也看到您的管理HTML。
  4. 您将管理的HTML存储在HTML文件中,该文件也提供给用户。 然后,您首次调用页面加载后端。 在成功的情况下,您将进行另一个AJAX调用以获取管理HTML。 用户可能会看到管理HTML(如果他直接打开文件)。
  5. 您可以将PHP独立服务器身份验证与.htaccess .htaccess是apache服务器身份验证配置文件。 您可以使用它来阻止用户访问您的网站(因此,根本无法访问HTML文件)。 尝试访问该页面时,将显示一个弹出窗口,用户必须输入其凭据。 它完全独立于您的业务逻辑,必须在.htpasswd文本文件中设置允许的用户。 无法将现代的依赖数据库的用户管理与.htaccess服务器身份验证一起使用。 使用此解决方案,您也不能使用HTML表单登录。我仅建议将此解决方案用于测试目的,而不建议用于现代网站。

如果您的PHP后端是可靠构建的,我将寻求解决方案1 如果您正确检查了后端界面上用户的输入,则用户无法对HTML进行任何操作。 这意味着,您可以提供所有HTML,但是在加载数据之前不向用户显示它。 您可以在微调器正在加载时显示它。 这是一些基本代码:

JavaScript(jQuery):

$(document).ready(function() {
    $.ajax({
        url: 'administration.php',
        method: 'GET'
        success: function(response) {
            $('input.username').val(response.username);
            // ( ... )
            $('.administration').fadeIn('fast');
        },
        error: function() {
            window.location.href = 'index.php';
        }
    });
});

HTML:

<body>
    <div class="administration">
        <label>Username 
            <input type="text" class="username" />
        </label>
    </div>
</div>

CSS:

.administration {
    display: none;
}

您可以简单地将服务器(APACHE)配置为将具有.html扩展名的文件视为常规PHP文件。 方法如下:如果项目根目录中没有.htaccess文件,请创建它。 然后在.htaccess文件中添加以下行:

    # TELLS APACHE TO HANDLE ALL FILES WITH .html or .htm EXTENSIONS AS PHP FILES.
    AddHandler x-httpd-php .html .htm

但是,根据您的服务器,上述操作可能无效。 在这种情况下,您可以尝试以下方法之一:

    # TELLS APACHE TO HANDLE ALL FILES WITH .html or .htm EXTENSIONS AS PHP FILES.
    AddHandler php-script .php .html .htm

或这个:

    # TELLS APACHE TO HANDLE ALL FILES WITH .html or .htm EXTENSIONS AS PHP FILES.
    AddType application/x-httpd-php .htm
    AddType application/x-httpd-php .html

但是,第一个变体很可能会为您工作。 我希望这有帮助。 祝你好运,我的朋友。

暂无
暂无

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

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