【问题标题】:PHP require causing HTTP 500 errorPHP 需要导致 HTTP 500 错误
【发布时间】:2017-08-08 13:38:33
【问题描述】:

我正在用一个简单的 php 网站模板制作一个 php 网站

这是index.php的样子

require './config.php';
require './functions.php';
//echo 'hello';
run();

run()函数在functions.php中

function run() {
    include config('template_path') . '/template2.php';
}

这是 template2.php 文件

include 'header.php';
pageContent();
include 'footer.php';

当我使用 WAMP 服务器在 localhost 中运行该站点时,它可以完美运行,没有任何问题。

但是当我将此项目上传到亚马逊服务器时,服务器返回 HTTP 500 错误。当我评论 require 语句时,页面工作(显示你好)。我是 php 初学者,不知道问题出在哪里,需要帮助。

这是错误页面

这是 .htaccess 文件

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?page=$1 [L]

文件夹结构

配置.php

   <?php

/**
 * Used to store website configuration information.
 *
 * @var string
 */
function config($key = '') {
    $config = [
        'name' => 'Test',
        'nav_menu' => [
            'home' => 'Home',
            'about-us' => 'About Us',
            'portfolio-works' => 'Portfolio',
            'contact' => 'Contact',
        ],
        'portfolio' => [
            [ 'Test','Test', "assets/img/portfolio/test.jpg",'movie'],
            ['Test','test1', "assets/img/portfolio/test.jpg",'documentary'],
            ['Test','test2', "assets/img/portfolio/test.jpg",'advertisement'],
        ],
        'template_path' => 'template',
        'content_path' => 'content',
        'pretty_uri' => true,
        'version' => 'v2.0',
        'link' => '/peekay',
        'about_us' => 'Lorem ipsum',
    ];

    return isset($config[$key]) ? $config[$key] : null;
}

【问题讨论】:

  • require './config.php'; require ('./functions.php'); - 只是为了测试,用括号尝试它们。但是,如果您在服务器上有任何错误日志,这将有助于显示问题所在。或者逐行构建页面以查看哪个位失败:)
  • 你有错误日志吗?
  • 页眉和页脚的斜线是不必要的,会破坏您的脚本。当涉及到 PHP 时,斜线开始是针对系统的根目录,而不是您的网站。
  • 发生 500 内部服务器错误时,您要做的第一件事就是检查服务器日志文件。
  • @CBroe 但这些都没有抓住重点(没有双关语)include '/header.php' .. 所以你需要写include 'header.php' 或一般./file.php,还要注意require 和@987654335 @ 是 not 函数,因此不需要 ( )

标签: php


【解决方案1】:

这主要是猜测,无需查看服务器错误日志(与您的网络主机联系或查看支持站点以获取有关如何获取这些信息的信息),但您的includes 和 require 会有问题s 取决于您的页面的路径。

这将始终在您当前页面的文件夹中查找:

require './config.php';
require ('./functions.php');

这将始终查看系统的根目录,而不是网站

include '/header.php';
pageContent();
include '/footer.php';

利用$_SERVER['DOCUMENT_ROOT'] 注入您的网络文件所在的路径:

require $_SERVER['DOCUMENT_ROOT'].'/config.php';
require ($_SERVER['DOCUMENT_ROOT'].'/functions.php');

还有

include $_SERVER['DOCUMENT_ROOT'].'/header.php';
pageContent();
include $_SERVER['DOCUMENT_ROOT'].'/footer.php';

如果需要,您可以在 DOCUMENT_ROOT 之后添加子目录。

【讨论】:

  • require $_SERVER['DOCUMENT_ROOT']. '/peekay/config.php'; require $_SERVER['DOCUMENT_ROOT']. '/peekay/functions.php'; echo $_SERVER['DOCUMENT_ROOT'].'-hello'; //run(); 这应该打印你好。但不工作,同样的错误
  • 我注释了run()函数
  • 如果您仍然收到 500 服务器错误,您确实需要找到服务器错误日志并查看它们以了解发生了什么。所有 500 意味着出现问题。我还建议只创建一个测试文件info.php 并将&lt;?php phpinfo(); 放入其中,然后检查它以查看DOCUMENT_ROOT 的设置。我猜你可能不需要路径中的peekay 文件夹。
  • /peekay 是子文件夹
  • 听起来您运行的版本低于 PHP 5.4。那是添加短语法的时候。尝试将数组声明从 [] 更改为 array()
【解决方案2】:

上传包含以下内容的脚本 (test.php):

<?php
phpinfo();
?>

在浏览器中运行它并搜索$_SERVER['SCRIPT_FILENAME'](或只是“SCRIPT_FILENAME”)

这将为您提供文件所在位置的完整路径,例如

/some/dir/test.php

此路径(绝对路径,/some/dir/)可用于引用您的网络空间中需要包含/需要的任何其他内容,例如

require '/some/dir/config.php';

您可以使用它来测试它是否解决了问题。如果是这样,则问题是包含/必需文件的路径。您最终可以将其更新为相对链接 - 以免硬编码绝对路径。但它应该告诉你这是否是问题的根源,我高度怀疑它是。

问题的另一个来源可能是线路

include config('template_path') . '/template2.php';

大概config('template_path') 应该是从某处读取的字符串。这可能不是评估,因此它正在尝试加载/template2.php。如果它前面没有任何内容,它将把/ 视为“根”,这几乎肯定不是该文件在服务器上的位置。同样,硬编码一个绝对路径来测试事物可能会有所帮助。

除此之外,您还应该查看服务器的error_log,您的主机应该能够指向您。它可能通过控制面板(例如 Plesk)访问,具体取决于服务器安装的内容。

【讨论】:

    猜你喜欢
    • 2012-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多