在Web Host中部署Laravel项目

时间:2019-01-29 10:36:10

标签: php laravel web-hosting

Hostinger中上载Laravel项目时,我遵循了不同的指南,但不幸的是,始终会出现错误,它不会加载index.php。

这是我的文件管理器中的结构。

https://imgur.com/a/3lLX9d3

这是我的 public 文件,位于 public_html

https://imgur.com/a/3xkf7PL

这是 index.php

中的代码
require __DIR__.'/../sample/vendor/autoload.php';
$app = require_once __DIR__.'/../sample/bootstrap/app.php';

当我尝试打开网站时。

https://imgur.com/a/c1odO4A

我错过了什么吗?

1 个答案:

答案 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.phpsample/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.phpsample/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']的相对路径。