为什么我的代码仅适用于虚拟服务器?

时间:2017-12-03 11:22:09

标签: php apache

我刚刚完成了项目中的一些事情,所以我决定将它发布到我们在学校的服务器上。但是,每当我尝试运行任何东西时,它都没有显示任何内容。这是我在index.php中使用的一些代码:

<?php require '/root.php'; ?>

在我的root.php中,我指定了要应用于服务器上所有页面的所有内容,例如:

<?php
$root_php = (realpath(dirname(__FILE__)));
?>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
<?php
$db_connection = mysqli_connect("localhost", "username", "password", "db_main");
?>

上面的行工作正常,但问题在于:当我尝试使用正斜杠包含任何脚本时#34; /&#34;在开始时确保路径&#34;开始&#34;在路径上&#34; root.php&#34;脚本被执行,脚本断开只返回简单的未完成的HTML页面。当我尝试查看源代码时,它总是看起来像这样:

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">

打破它的代码看起来像这样:

require_once '/account/login_verify.php';

(开头有斜线,我需要在那里确保脚本不会尝试在其他地方找到它)

我还尝试了另外一个托管PHP&amp; MySQL支持,但它返回(几乎)相同的结果:

<!doctype html>
<html>
<head>

它既不适用于开头的斜杠,也不适用$root_php变量来设置脚本的整个路径。

Apache / PHP配置有问题吗?如果没有,为什么代码在虚拟服务器上完全可用,而在物理服务器上什么都不做?任何想尝试的想法都非常感谢。顺便说一句,我无法访问我们学校的重新配置服务器,但如果我告诉他应该改变什么,我们的一位老师已经可以重新配置它。

提前致谢!

1 个答案:

答案 0 :(得分:0)

尽管不通过某种外部配置设置拉入路径,但请尽量不要包含/要求具有绝对路径的文件。

绝对路径会因您安装应用的系统而异。因此,您最好的选择是从已知的入口点开始到文件系统(例如,当前文件的位置),并从那里开始相对处理。

这样,无论文件系统位于何处,您的代码都可以跨系统移植。

如果root.php与当前文件位于同一目录中,请尝试<?php require 'root.php'; ?>而不是<?php require realpath(__DIR__ . '/../../root.php'); ?>。如果没有,你可以相对地解决它,如下:

new Vue({ el: '#app', data: { numberWatched: 1, numberAfter: 1 }, watch: { numberWatched: (val) => { this.numberAfter = this.numberWatched * 4; } } })

(调整文件系统布局的实际路径)

如果您希望了解现代PHP应用程序如何处理目录布局和代码包含,请查看PSR4标准及其使用方法:

https://www.google.de/search?q=psr4+tutorial