Я использую решение для хостинга для своего приложения Zend Framework, но не могу загрузить его для загрузки файла application/bootstrap.php.
Когда я подключаюсь к серверу, моим корнем doc является /webspace/httpdocs/euro.millionsresults.com
Я разместил приложение, общедоступное, библиотечное и т.д. dirs в этом каталоге.
Затем я создал.htaccess, согласно http://akrabat.com/zend-framework/zend-framework-on-a-shared-host/
/webspace/httpdocs/euro.millionsresults.com/.htaccess
RewriteEngine On
RewriteRule .* index.php
Это переписывает все в файл index.php, который затем включает в себя файл public/index.php ZF, который является правильным и работает нормально. Файл index.php:
/webspace/httpdocs/euro.millionsresults.com/index.php
<?php
include 'public/index.php';
Если я поставлю эхо в файле public/index.php, он отлично работает, показывая, что public/index.php теперь вызывается при попытке получить доступ к сайту.
Проблема в том, что файл public/index.php должен включать файл.. /application/bootstrap.php:
/webspace/httpdocs/euro.millionsresults.com/public/index.php
<?php
echo "this is working";
require('../application/bootstrap.php');
Однако приложение /bootstrap.php не включается.
Если я положил кубик в самый верх приложения /bootstrap.php, ничего не получится.
Я попробовал следующее для public/index.php:
требуется ( '../../../приложения /Bootstrap.php'); требуется ( '/Webspace/httpdocs/euro.millionsresults.com/приложение /Bootstrap.php');
Но ничего не работает в том числе application/bootstrap.php.
Кто-нибудь знает, что делать здесь? Это дешевый хост, на котором я нахожусь, без доступа к php.ini.
Дополнительная информация:
Проблема, похоже, связана с include_path. Когда я получаю get_include_path(), у меня есть:
:/php/includes:/usr/share/pear:/usr/libexec/php4-cgi/share/pear:/opt/alt/php55/usr/share/pear:/opt/alt/php54/usr/share/pear:/opt/alt/php53/usr/share/pear
Я могу set_include_path(), но к чему я его устанавливаю?
Я пытался:
set_include_path('/webspace/httpdocs/euro.millionsresults.com/application' . PATH_SEPARATOR. get_include_path());
set_include_path('/../../../application' . PATH_SEPARATOR . get_include_path());
set_include_path('../application' . PATH_SEPARATOR . get_include_path());
Ни одна из них не работает, т.е. Когда в моем общедоступном /index.php файле есть следующее: я всегда получаю "не существует":
<?php
echo "In file public/index.php <br>";
set_include_path('/../../../application' . PATH_SEPARATOR . get_include_path());
echo get_include_path();
if (file_exists('/../application/bootstrap.php')){
echo "<br>exists";
}
else {
echo "<br>does not exist";
}
Не имеет значения, какой файл я проверяю на наличие - любой файл в папке приложения или какая-либо папка, не публичная, не найдена.
В вашем public/index.php
файле эта строка:
require('../application/bootstrap.php');
предполагает, что ваш текущий рабочий каталог является public/
и что по отношению к этому директору, один dir вверх, есть application/bootstrap.php
- relative require
calls относятся к текущему рабочему каталогу или к include_path. Кажется, что код ZF предполагает, что public/
является корнем документа, что неверно в вашем случае.
Обычно в веб-средах текущий рабочий каталог является корневым документом. Поэтому в вашем случае вы можете захотеть изменить require('../application/bootstrap.php')
на:
require('application/bootstrap.php');
Если это не сработает, я предлагаю узнать, что текущий рабочий каталог находится в каталоге public/index.php
, запустив что-то вроде:
var_dump(getcwd(), __DIR__);
(если ваша версия PHP устарела, замените __DIR__
на dirname(__FILE__)
)
и, чтобы ваш запрос require
от этого.