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

时间:2016-06-05 08:57:42

标签: php html apache

背景

我正在开发一个在Windows上的Apache服务器上运行的网站(至少目前)。我的网站目录由HTML和PHP文件组成。我们的想法是将可访问的网页作为HTML文件,每当我需要使用动态内容时,我将使用Javascript和AJAX请求,以便从服务器请求我需要的内容。将对PHP脚本进行AJAX请求,这些脚本具有专用于它们的目录。因为我想在自己的单元中保持一切井井有条,这就是我这样做的方式(尽量避免使用内联PHP)。

目的

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

问题

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

3 个答案:

答案 0 :(得分:1)

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

OR:

<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>

来源:How to run a php script inside a html file?

答案 1 :(得分:1)

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

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

    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;
    }
    

答案 2 :(得分:0)

您可以简单地将服务器(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

但是,第一个变体可能最适合您。我希望这有帮助。祝你好运,我的朋友。