我正在制作一个带有简单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中运行该站点时,它运行正常,没有任何问题。
但是当我将此项目上传到amazon服务器时,服务器返回HTTP 500错误。当我评论require语句时,页面工作(显示hello)。我是一个php初学者,我不知道这个问题是什么,需要帮助。
这是.htaccess文件
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?page=$1 [L]
config .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;
}
答案 0 :(得分:5)
这主要是猜测而不查看服务器错误日志(与您的网站主机联系或查看支持网站以获取有关如何获取这些错误的信息),但您的include
和{ {1}}取决于您网页的路径。
这将始终显示在当前页面的文件夹中:
require
这将始终位于系统的根目录,而不是网站
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');
如果需要,可以在DOCUMENT_ROOT之后添加子目录。
答案 1 :(得分:2)
上传一个脚本(test.php
),其中包含以下内容:
<?php
phpinfo();
?>
在浏览器中运行该搜索,然后搜索$_SERVER['SCRIPT_FILENAME']
(或只是&#34; SCRIPT_FILENAME&#34;)
这将为您提供文件所在位置的完整路径,例如
/some/dir/test.php
此路径(绝对路径/some/dir/
)可用于引用网站空间中需要包含/需要的任何其他内容,例如
require '/some/dir/config.php';
您可以使用它来测试它是否可以解决问题。如果是,问题是包含/必需文件的路径。您最终可以将其更新为相对链接 - 以便不对硬盘进行硬编码。但它应该告诉你这是否是问题的根源,我非常怀疑它是什么。
问题的另一个来源可能是行
include config('template_path') . '/template2.php';
据推测,config('template_path')
应该是从某个地方读取的字符串。它可能没有评估,因此它正在尝试加载/template2.php
。如果它之前没有任何内容,它会将/
视为&#34; root&#34;这几乎肯定不是该文件在服务器上的位置。再次,硬编码绝对路径来测试事物可能有所帮助。
除此之外,您还应该查看主机应该指向您的服务器error_log
。它可能通过控制面板(例如Plesk)访问,具体取决于服务器的安装位置。