Развертывание проекта Laravel в веб-хостинге - PullRequest
0 голосов
/ 29 января 2019

Я следовал различным инструкциям при загрузке моего проекта Laravel в Hostinger , но, к сожалению, всегда есть ошибка, он не загрузит index.php.

Вотструктура в моем файловом менеджере.

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

Это мои публичные файлы в 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 голосов
/ 30 января 2019

Для получения дополнительных разъяснений по этому вопросу я решил опубликовать ответ.

Основная проблема, которая была предоставлена ​​в коде:

require __DIR__.'/../sample/vendor/autoload.php';
$app = require_once __DIR__.'/../sample/bootstrap/app.php';

Возможно, оба пути недопустимы.Судя по более ранним комментариям, фодеры не существуют.

Согласно Manual _DIR_ будет содержать каталог текущего файла - на самом деле более правильным было бы сказать, что он содержит каталогфайл, в котором он находится. Переменная

_DIR_ трудна для работы, когда речь идет о создании абсолютных путей, поскольку она уже является почти абсолютным путем текущего файла.

Есть несколько других способов получить правильный путь, и среди них самый простой, вероятно, самый простой и, вероятно, самый быстрый, будет использовать $_SERVER['DOCUMENT_ROOT'], который содержит

корневой каталог документа, в котором находится текущий скриптвыполняется, как определено в файле конфигурации сервера. Из руководства по Php

Я попытаюсь привести некоторые примеры, которые показывают проблемы с переменной _DIR_ и как можно использовать $_SERVER['DOCUMENT_ROOT'].

Iтакже будет несколько копировать вашу структуру на самом базовом уровне.

ПРИМЕЧАНИЕ. Все мои примеры выполняются на локальном хосте под 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'], который содержит

Корневой каталог документа, в котором находится текущийСценарий выполняется, как определено в файле конфигурации сервера. Из руководства по Php

Я попытаюсь привести некоторые примеры, которые показывают проблемы с переменной _DIR_ и как можно использовать $_SERVER['DOCUMENT_ROOT'].

Iтакже будет несколько копировать вашу структуру на самом базовом уровне.

ПРИМЕЧАНИЕ. Все мои примеры выполняются на локальном хосте под Windows

Iвзял структуру файлов и смоделировал ее только в две папки, по одному файлу в каждой папке.Моя относительная файловая структура выглядит буквально как:

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, что является Существующий валидный путь , который позже можно будет использовать, например, требуют.

Рабочий пример, показывающий использование и разницу между выходными значениями _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 это должно и не получится.Это также показывает, что его использование в некоторой степени зависит от платформы, что также означает, что оно не очень надежно.

EDIT Приведенный выше пример на самом деле очень плохой.Это показывает неправильное и уродливое кодирование.И я бы не показал это, если бы не видел реальный производственный код, подобный этому, один раз.(Не мое)

Нижняя строка для всех этих примеров: - Используйте $_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'].

...