在Hostinger中上载Laravel项目时,我遵循了不同的指南,但不幸的是,始终会出现错误,它不会加载index.php。
这是我的文件管理器中的结构。
这是我的 public 文件,位于 public_html
这是 index.php
中的代码require __DIR__.'/../sample/vendor/autoload.php';
$app = require_once __DIR__.'/../sample/bootstrap/app.php';
当我尝试打开网站时。
我错过了什么吗?
答案 0 :(得分:0)
为进一步澄清该问题,我决定发布答案。
提供的代码存在的主要问题是
require __DIR__.'/../sample/vendor/autoload.php';
$app = require_once __DIR__.'/../sample/bootstrap/app.php';
这两个路径都可能无效。从先前的评论来看,这些饲料不存在。
根据Manual _DIR_
将保存当前文件的目录-实际上更正确的说法是,它保存了文件所在的目录。
_DIR_
变量在创建绝对路径时很难使用,因为它几乎已经是当前文件的绝对路径。
还有其他几种获取正确路径的方法,其中最基本,可能最简单,也可能最快的方法是使用$_SERVER['DOCUMENT_ROOT']
,它拥有
正在执行当前脚本的文档根目录,如服务器的配置文件中所定义。 From Php Manual
我将尝试提供一些实例,以显示_DIR_
变量的问题以及如何使用$_SERVER['DOCUMENT_ROOT']
。
我还将在一个非常基本的层面上复制您的结构。
注意:我所有的示例都在Windows下的本地主机上运行,只有进一步证明_DIR_
是不可靠的
我采用了文件结构并将其简化为两个文件夹,每个文件夹中一个文件。我的相对文件结构从字面上看起来像:
public_html/index.php
和sample/include.php
。
现在放在 index.php 中,首先将这段代码放入
<?php
echo __DIR__.'/../sample/include.php<br>';
?>
运行时将输出C:\xampp\htdocs\myWordpress\public_html/../sample/include.php
。输出是Windows上的有效路径,但对它执行require
应该可以。
现在我将 index.php 更改为
<?php
echo __DIR__.'/sample/include.php<br>';
?>
注意:我基本上只从路径中删除了/../
。
当我再次运行它时-输出将为C:\xampp\htdocs\myWordpress\public_html/sample/include.php
,这在Windows上将是非常无效的路径。 -文件夹不存在。
上面的两个例子证明_DIR_
变量是不可靠的。
现在考虑以下 index.php
<?php
echo $_SERVER['DOCUMENT_ROOT'].'/sample/include.php<br>';
?>
运行此命令时-它会输出`,以便进一步澄清该问题,我决定发布答案。
提供的代码存在的主要问题是
require __DIR__.'/../sample/vendor/autoload.php';
$app = require_once __DIR__.'/../sample/bootstrap/app.php';
这两个路径都可能是无效路径,因为这两个路径可能都不存在。
根据Manual _DIR_
将保存当前文件的目录-实际上更正确的说法是,它保存了文件所在的目录。
_DIR_
变量在创建绝对路径时很难使用,因为它已经几乎是绝对路径。
还有其他几种获取正确路径的方法,其中最基本,可能最简单,也可能最快的方法是使用$_SERVER['DOCUMENT_ROOT']
,它拥有
正在执行当前脚本的文档根目录,如服务器的配置文件中所定义。 From Php Manual
我将尝试提供一些实例,以显示_DIR_
变量的问题以及如何使用$_SERVER['DOCUMENT_ROOT']
。
我还将在一个非常基本的层面上复制您的结构。
注意:我的所有示例都在Windows下的localhost上运行
我采用了文件结构并将其简化为两个文件夹,每个文件夹中一个文件。我的相对文件结构从字面上看起来像:
public_html/index.php
和sample/include.php
。
现在放在 index.php 中,首先将这段代码放入
<?php
echo __DIR__.'/../sample/include.php<br>';
?>
运行时将输出C:\xampp\htdocs\myWordpress\public_html/../sample/include.php
。但是,输出是Windows上的有效路径,对它执行require
应该可以。
现在我将 index.php 更改为
<?php
echo __DIR__.'/sample/include.php<br>';
?>
注意::我基本上仅从路径中删除/../
。
当我再次运行它时-输出将为C:\xampp\htdocs\myWordpress\public_html/sample/include.php
,这在Windows上是非常无效的路径。该文件夹不存在。
现在考虑以下 index.php
<?php
echo $_SERVER['DOCUMENT_ROOT'].'/sample/include.php<br>';
?>
当我运行此命令时-它会输出C:/xampp/htdocs/myWordpress/sample/include.php
,它是现有的有效路径,以后可以在require中使用。
一个工作示例,它显示了_DIR_
和$_SERVER['DOCUMENT_ROOT']
之间的用法和输出差异,如下所示
index.php
<?php
echo 'Directory of index.php file is:<span style="color:red">'. __DIR__.'</span></br>';
echo 'File include.php will be included from:<span style="color:red">'. $_SERVER['DOCUMENT_ROOT'].'/sample/include.php</span></br>' ;
require_once $_SERVER['DOCUMENT_ROOT']."/sample/include.php";
?>
include.php
<?php
echo 'Directory of include.php file determined by `__DIR__` is:<span style="color:red">'. __DIR__.'</span></br>';
echo 'Directory of include.php file determined by usage of $_SERVER[\'DOCUMENT_ROOT\']:<span style="color:red">'. $_SERVER['DOCUMENT_ROOT'].'/sample/include.php</span></br>';
?>
我将路径设置为红色,以引起更多注意。
此示例将显示__DIR__
和$_SERVER['DOCUMENT_ROOT']
在同一系统上,同一虚拟服务器上返回不同的结果。
DIR 也可以用于通过纯Windows路径获得相同的结果-虽然很难看。
添加行
echo 'The valid directory of include.php file using __DIR__ is:<span style="color:red">'.__DIR__.'\\..\\sample\\</span></br>';
对 index.php 的使用将表明 DIR 可以在 Windows和仅Windows!上使用,而在Unix上则应该这样做失败。它还表明它的用法在某种程度上是特定于平台的,这也意味着不是很可靠。
编辑 上面的示例实际上是非常糟糕的。它显示了错误和丑陋的编码。如果我一次也没有看到这样的实际生产代码,那么我就不会展示它。 (不是我的)
所有这些示例的底线是-在创建路径时使用$_SERVER['DOCUMENT_ROOT']
,而不使用__DIR__
。
我希望我的示例能一定程度上说明为什么我认为$_SERVER['DOCUMENT_ROOT']
是一个更好的主意。
编辑1 我想我与文档的链接和说明不是很好。
根据文件结构的图像判断,路径应为:
require $_SERVER['DOCUMENT_ROOT'].'/sample/vendor/autoload.php';
$app = require_once $_SERVER['DOCUMENT_ROOT'].'/sample/bootstrap/app.php';
但这实际上取决于$_SERVER['DOCUMENT_ROOT']
包含的内容。以及到$_SERVER['DOCUMENT_ROOT']
的相对路径。