我正在为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";
}
我检查的文件是什么并不重要 - 找不到应用程序文件夹中的任何文件,或找不到公共文件夹中的任何文件。
答案 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
来电。