【问题标题】:Modifying .htaccess file to set include path to ZendFramework修改 .htaccess 文件以设置 ZendFramework 的包含路径
【发布时间】:2012-10-14 00:39:46
【问题描述】:

我试图在一个网站上包含 ZendFramework,但没有成功。最近我尝试像这样修改 .htaccess 文件:

php_value include_path ":/home/u230474/Zend"

我也试过了

php_value include_path ".:/home/u230474/Zend"

但在每种情况下,我都无法再查看网站中的任何页面。

我做了这些修改,因为我试图让系统理解以下代码:

<?php 
$libreria='/Zend/ZendFramework/library';
set_include_path(get_include_path().PATH_SEPARATOR.$libreria);
require_once('Zend/Loader/Autoloader.php');
Zend_Loader_Autoloader::getInstance(); 

我已经尝试了很多天了,尽管我已经与我的提供者进行了交谈,但我们似乎在理解需求方面存在问题。

我用一个名为 InstallationChecker.php 的脚本进行了测试以检查 ZendFramework 的安装,该脚本应该表明安装 Zend Framework 成功,但实际上该脚本会抛出如下错误:

Exception thrown trying to access Zend/Loader.php using 'use_include_path' = true. Make sure you include Zend Framework in your include_path which currently contains: .:/usr/lib/php:/usr/local/lib/php

这就是我尝试修改 .htaccess 的原因

有谁知道我做错了什么(显然是的)?修改 htaccess 文件以便同时包含 `/usr/lib/php 和 /usr/local/lib/php 的正确方法是什么?

我还了解到,当您包含 htaccess 时,您还必须将 .htaccess 文件包含到创建包含的每个子目录中。我的大部分 php 脚本都直接在公用文件夹中,但我在子目录中也有很多。我应该如何进行?

我按照 Mike 的建议进行了一些更改,并包含了整个自定义路径,如下所示:

$libreria='Zend/ZendFramework/library/Zend/Loader';

然后我查看了 php.info,它仍然没有显示对 include_path 的任何更改。此外,我注意到我正在运行以检查 ZendFramework 是否安装的测试中的错误告诉我 Zend 文件夹中有一个类 Loader.php,它实际上存在,但仍然没有加载任何内容。

好的,所以我做了几个测试,看看出了什么问题,因为 Zend 框架似乎加载正常。首先,我将此代码添加到设置包含路径的文件“libreria.php”中(显然没问题,因为库已加载)。我这样做了:

$libreria='/home/u230474/public_classes/Zend/ZendFramework/library';
set_include_path(get_include_path().PATH_SEPARATOR.$libreria);
require_once('Zend/Loader/Autoloader.php');
$libload = Zend_Loader_Autoloader::getInstance();
if(!$libload) echo "Librer&iacute;a Zend Framework cargada"; else echo "Error al cargar la librer&iacute;a";

因此,它会输出:“Error al cargar la librería”。

我还设置了一个小测试,看看区分大小写是否有问题。在一些有问题的页面上,我在包含标题和库之后立即放置了这段代码:

//codigo para probar equidad de nombre de archivo---------->
$filename = basename($_SERVER['SCRIPT_FILENAME']);
$request = basename($_SERVER['SCRIPT_NAME']);
if($filename != $request)
  die('Case of filename and request do not match!');

而且它不会死,所以没关系。 (如果我做对了,如果我的文件名略有不同,结果会有所不同,如浏览器地址和服务器所见,但也许我错了)。

然后,我调用 Autoloader.php 类的方式发生了一些变化,但我没有看到与 Zend 对 Autoloader 文档的介绍中的静态方法不同的调用方式,它说“Autoloader,基本用法'

【问题讨论】:

  • 检查您的 error_reporting 级别和/或您的 PHP 错误日志。如果自动加载器返回 false,则说明某处有问题。

标签: php .htaccess zend-framework include


【解决方案1】:

.htaccess 可能不是进行此更改的地方,因为将要包含的新路径附加到现有路径会更加困难。您所做的只是用您在 .htaccess 中指定的路径覆盖所有包含路径。这把事情搞砸了。

如果您查看包含的 PHP 代码的第二行,它会向您展示如何附加到包含路径(通过获取当前路径并向其附加新路径。)只需对您想要的路径执行类似操作包括。

【讨论】:

  • 谢谢,但我就是这么做的。我在一个名为 libreria.php 的文件中有 php 代码,我在需要它的脚本上 require_once,但后来我想知道为什么脚本 InstallationChecker.php 会向我抛出上面的错误,并且没有显示测试过的 ZendFramework 的每一部分。我和我的提供商谈过,他们说这可能是大小写兼容性的问题(我在 Windows 中开发)但是我的所有文件都是用骆驼大小写完全调用的,而 mysql 表最初是小写的,所以我找不到问题是什么.
  • 谢谢,但我就是这么做的。我在一个名为 libreria.php 的文件中获得了该 php 代码,我需要在我需要的每个脚本上使用它。我尝试了很多路径,包括 ../ 之类的相对路径,甚至是根 /,但都没有。我的提供者说这可能是一个大写问题(我在 Windows 上开发),但我调用每个脚本的方式与用 camelCase 编写的完全一样,而 mysql 表最初是小写的,所以我没有看到问题。另外,info.php 给了我这个 include_path:.:/usr/lib/php:/usr/local/lib/phpso 我应该用这些编辑 .htaccess 吗?
  • 尽管有您的建议,我还是更改了 htaccess,包括 /usr/lib/php 的路径,以及其余部分,正如您所料,我只是破坏了整个站点。但正如我所说,我已经尝试了各种可能的方式来设置包含路径(不更改 php.ini,我不能)并且无法解决它。我是否应该在每个脚本中简单地包含 Autoloader.php 类。它绝对不会优雅。
  • 另外,如果我查看我自己的 Wamp 服务器上的 include_path,我发现它是 C:\php\pear;我真的不太了解梨,也无法在我的遥控器上更改此值,但还有另一个问题。我看到远程上的 php 是作为 FastCGI API 处理的,所以安装 ZendFramework 可能是个问题
  • 上次编辑:我所做的是将代码 sn-p 到 set_include_path 正确地放在脚本 installation_checker 上,现在我对 Zend Framework 安装的测试通过了,我遵循了我在这里阅读过的建议站点将 Zend Framework 放在公用文件夹的姊妹文件夹上。我会看看我是否可以只包含名为 libreria.php 的文件,以便找出我的代码无法正常工作的原因。我想我会继续发帖
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-04
  • 2011-09-24
  • 1970-01-01
  • 1970-01-01
  • 2015-08-03
  • 2012-02-24
  • 2013-01-06
相关资源
最近更新 更多