【问题标题】:Getting require_once in Zend to find files在 Zend 中获取 require_once 以查找文件
【发布时间】:2012-09-30 14:42:50
【问题描述】:

我是 ZEnd 的新手,非常感谢任何帮助

我有多个承包商在我的网站上工作,事情变得一团糟,同一文件夹的多个副本位于不同的位置。现在我要进去尝试收拾东西。乐趣!!!我遇到的问题之一是 Zend 中的 require_once 语句没有找到他们正在寻找的文件。我必须进去改变路径,如下所示。假设这是在 Zend/Gdata/App/FeedEntryParent.php 中找到的代码

不工作(找不到文件):

require_once 'Zend/Gdata/App/Extension/Updated.php';

似乎工作正常:

require_once '/home/paul13/paul13.com/includes/library/Zend/Gdata/App/Extension/Updated.php';

问题是大多数 require_once 语句的写法都像第一个。没有进入并手动编辑所有这些,有没有办法告诉要求语句在指示的目录中查找? '/home/paul13/paul13.com/includes/library/' 使用 php.ini?我试着输入

include_path=".:/home/paulthetutor/paulthetutors.com/includes/library"

在 php.ini 中,但这似乎并不能解决问题。

【问题讨论】:

  • 知道了。我会回去接受有帮助的答案。抱歉,没有意识到这是其中的一部分。
  • 一个问题:您的站点是使用 Zend Framework 作为 MCV 应用程序还是您的承包商只是使用了一些零碎的东西?还有什么版本?
  • @RockyFord 我相信这是版本 23775 2011-03-01 17:25:24Z ralph
  • @MatteoTassinari 返回并接受了回答我之前问题的答案。我查看了我的 php.ini 文件,没有找到任何关于“include_path”的信息。我在不同的文件夹中有 3 个 php.ini 文件。希望这不是问题。
  • 您是在远程尝试在此站点上工作,还是您有一个可以工作的本地开发环境?

标签: php zend-framework zend-db require-once


【解决方案1】:

您问题的标题似乎与您发布的内容无关。

我有多个承包商在我的网站上工作...找不到文件

您已经付钱给承包商以交付不起作用的代码?

问题显然是路径在第一个

否 - 问题是您的包含路径设置不正确。如果您使用包含路径作为避免输入大量内容的机制,那么您做错了。您的包含路径不应包含指向由其他人维护的目录树内的条目。如果没有非常具体和有效的目标,您也不应该更改此结构。

作为一种临时解决方法,直到您首先将 include/require 语句修复为它们应该是的状态,然后更改您的包含路径 - 在 php.ini、httpd.conf、.htaccess 中,通过自动-prepend 或在每个脚本的顶部。

(顺便说一句,您将文件夹与目录混淆了)

【讨论】:

  • 你说得对。我发现它们是并且我需要更正包含路径,但没有更新标题。我现在正试图弄清楚如何在 php.ini 中指定正确的路径关于承包商,代码在他们交付时工作,但我的网站在不同的地方与相同文件夹和文件的不同版本一团糟.我正在尝试清理并了解一些有关 php.ini 的知识,包括路径、Zend 和过程中的其他内容
【解决方案2】:

您在问题中提到的文件夹是 Zend 库的一部分。您可以检查 Zend Framework 项目中是否有库文件夹以及它是否包含该文件

'Zend/Gdata/App/Extension/Updated.php'

要包含整个 ZF 库,请在 public/index.php 或 Bootstrap.php 文件中使用以下代码。

 // Define path to application directory
 defined('APPLICATION_PATH')
      || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));

 // Define application environment
   defined('APPLICATION_ENV')
      || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));

  // Ensure library/ is on include_path
 set_include_path(implode(PATH_SEPARATOR, array(
     realpath(APPLICATION_PATH . '/../library'),
    get_include_path(),
   )));

是的,有选择地逐一删除 require 语句和本地复制的库文件版本(当然,在确保它们没有更新的代码之后)。

您可能需要检查默认 Zend Framework 应用程序结构 here 以比较文件夹结构。

【讨论】:

  • ZF 库本身充斥着includerequire 语句。小心更改它们。
  • 假设除了这些 require_once 语句之外没有人进行任何修改,那么仅仅获得它的新版本是否有意义?我总是可以保存旧版本并在需要时将其放回原处。如果是这样,我在哪里可以买到?
  • @janenz00 - 对不起,如果这听起来很愚蠢,但我是直接复制此代码,还是必须将某些单词更改为我自己的文件夹名称?另外,我似乎有 2 个 bootstrap.php 文件,一个在 /Applications/Bootstrap,一个在 /Applications/Bootstrap
  • 此代码应该已经存在于文件application/public/index.php 或类似文件中。您可能有多个 bootstrap.php 文件,一个用于应用程序,一个用于每个附加模块。用干净的版本替换已安装的 Zend 框架可能有助于故障排除,请仔细备份旧版本。
  • 查看 Zend/Applications 我什至没有看到公用文件夹。听起来是个坏兆头,不是吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-17
  • 1970-01-01
  • 1970-01-01
  • 2015-04-13
  • 2013-08-27
  • 2013-11-17
  • 1970-01-01
相关资源
最近更新 更多