在 Zend 中获取 require_once 以查找文件
Posted
技术标签:
【中文标题】在 Zend 中获取 require_once 以查找文件【英文标题】:Getting require_once in Zend to find files 【发布时间】: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 文件。希望这不是问题。 您是在远程尝试在此站点上工作,还是您有一个可以工作的本地开发环境? 【参考方案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 库本身充斥着include
和require
语句。小心更改它们。
假设除了这些 require_once 语句之外没有人进行任何修改,那么仅仅获得它的新版本是否有意义?我总是可以保存旧版本并在需要时将其放回原处。如果是这样,我在哪里可以买到?
@janenz00 - 对不起,如果这听起来很愚蠢,但我是直接复制此代码,还是必须将某些单词更改为我自己的文件夹名称?另外,我似乎有 2 个 bootstrap.php 文件,一个在 /Applications/Bootstrap,一个在 /Applications/Bootstrap
此代码应该已经存在于文件application/public/index.php
或类似文件中。您可能有多个 bootstrap.php 文件,一个用于应用程序,一个用于每个附加模块。用干净的版本替换已安装的 Zend 框架可能有助于故障排除,请仔细备份旧版本。
查看 Zend/Applications 我什至没有看到公用文件夹。听起来是个坏兆头,不是吗?以上是关于在 Zend 中获取 require_once 以查找文件的主要内容,如果未能解决你的问题,请参考以下文章
警告:require_once(Zend / Application.php)[function.require-once]:无法打开流:没有这样的文件或目录