Zend Framework Hosting - 不能包含bootstrap.php

时间:2014-11-15 18:36:11

标签: php zend-framework

我正在为Zend Framework应用程序使用托管解决方案,但无法加载application / bootstrap.php文件。

当我ftp到服务器时,我的doc root是/webspace/httpdocs/euro.millionsresults.com

我将应用程序,公共,库等dirs放在这个目录中。

然后我根据http://akrabat.com/zend-framework/zend-framework-on-a-shared-host/

创建了一个.htaccess

/webspace/httpdocs/euro.millionsresults.com/.htaccess

RewriteEngine On
RewriteRule .* index.php

这会将所有内容重写到我的index.php文件中,然后该文件包含ZF的public / index.php文件,这是正确的并且工作正常。 index.php文件是:

/webspace/httpdocs/euro.millionsresults.com/index.php

<?php
include 'public/index.php';

如果我在public / index.php文件中放入一个echo,它运行正常,证明当你试图访问该站点时,现在调用了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');

但是, application / bootstrap.php未包含在内。

如果我把一个骰子放在application / bootstrap.php的最顶层,那么什么都不会被渲染。

我为public / index.php尝试了以下内容:

需要(&#39; ../../../应用/ bootstrap.php中&#39); 要求(&#39; /webspace/httpdocs/euro.millionsresults.com/application/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());

没有一个工作,即当我在我的public / index.php文件中有以下内容时,我总是得到&#34;不存在&#34;:

<?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";
}

我检查的文件是什么并不重要 - 找不到应用程序文件夹中的任何文件,或找不到公共文件夹中的任何文件。

1 个答案:

答案 0 :(得分:1)

public/index.php文件中,此行:

require('../application/bootstrap.php');

假设您的当前工作目录public/相对于此目录,一个目录,有一个application/bootstrap.php - 相对require次调用是相对于当前工作目录或include_path的。似乎ZF代码假定public/是文档根,在您的情况下不是这样。

在Web环境中,通常,当前工作目录是文档根目录。因此,在您的情况下,您可能希望将require('../application/bootstrap.php')更改为:

require('application/bootstrap.php');

如果这不起作用,我建议通过运行以下内容找出当前工作目录与public/index.php目录的内容:

var_dump(getcwd(), __DIR__);

(如果您的PHP版本已过时,请将__DIR__替换为dirname(__FILE__)

并且,相对于此require来电。