【问题标题】:PHP 5.3.x include statement problems on iis7 with fast cgiPHP 5.3.x 在具有快速 cgi 的 iis7 上包含语句问题
【发布时间】:2011-09-09 17:41:37
【问题描述】:

我有一个运行 PHP 5.3.6 非线程安全 (VC9) 的 Web 服务器,在使用 FastCGI 的服务器 2008 R2 (iis 7.5) 上运行。

我遇到了几个错误,如下所示:

 PHP Warning:  include_once(\\DB-FUNCTIONS.PHP): failed to open stream: No such file or directory in M:\Depts\uc\uc-template\resources\library\faq-functions.php on line 3
 PHP Warning:  include_once(): Failed opening 'db-functions.php' for inclusion (include_path='.;D:\php5\extras;D:\php5\pear;D:\php5;N:\orgs;T:\Users;M:\depts;L:\Departments;M:\depts\include;') in M:\Depts\uc\uc-template\resources\library\faq-functions.php on line 3

文件调用如下:<?php ... include("DB-FUNCTIONS.PHP"); ... ?>

该文件存在于文件夹中,权限设置正确,其他包含文件正在工作。

我已将问题归结为以下问题

假设您有以下文件夹结构:

/包括 - 公司.php - 数据库.php -index.php

如果 index.php 包含 /includes/inc.php 并且 inc.php 调用 include("db.php") (没有 include/),则找不到该文件。如果您将所有文件放在一个文件夹中,它会找到它们。

还有其他人遇到这个问题吗?

我正在粘贴我的 php.ini 文件的清理版本,但我认为一切设置正确。 (对不起,双倍间距......否则它会一起运行。为了使文件更短,我只包含了与默认 php.ini 设置不同的变量。)

[PHP]

extension_dir         ="D:\PHP5\ext"
short_open_tag        = On
asp_tags              = Off
register_globals      = On
register_long_arrays  = On
register_argc_argv    = On
post_max_size         = 8M
magic_quotes_gpc      = On
include_path          = ".;D:\php5\extras;D:\php5\pear;D:\php5;M:\depts;M:\depts\include;"
cgi.force_redirect    = 0
cgi.fix_pathinfo      =1
fastcgi.impersonate   = 1;
allow_url_fopen       = On
allow_url_include     = On
fastcgi.logging       =0
extension             =php_sqlsrv_53_nts_vc9.dll
extension             =php_curl.dll
extension             =php_gd2.dll
extension             =php_imap.dll
extension             =php_oci8.dll
extension             =php_openssl.dll

我查看了几个不同的站点,但找不到与此问题真正相似的任何内容。此代码在 4.4.7 版本上运行(网站是从运行 iis6 的 2k3 服务器迁移而来,4.4.7 在 isapi 模式下)

【问题讨论】:

  • 您确实注意到\\DB-FUNCTIONS.PHP 中的双\ 前缀对吧?在 Windows 上,它可能会将其视为 UNC 路径。无论哪种方式,它看起来都不是正确的文件路径。
  • 我确实注意到了这一点,但包含语句只是“文件名”...我尝试使用 google 和 bing 搜索,但它们都从搜索中删除了标点符号,所以我没有任何运气找到任何东西。我也觉得它不对,但我找不到任何关于它的信息。

标签: php iis-7 include fastcgi


【解决方案1】:

包含行为是预期的。

PHP 包含路径中的. 仅指最外层的 PHP 文件,通常是请求调用的那个。

如果您想包含一个相对于执行包含的文件的文件,请使用__DIR__ 魔术常量,例如

include __DIR__ . '/DB-FUNCTIONS.php';

【讨论】:

  • 我当时认为这是对的,但它在 4.4.7 版本中工作,这让我感到困惑。我们只是托管服务器,我试图找到一种无需更改代码即可解决这些问题的方法。有没有办法在脚本之前自动运行一个函数?我知道 auto_prepend_file ini 设置,但如果我使用ini_set('include_path',ini_get('Include_path').__DIR__); 创建了一个脚本,它只会返回 auto_prepend_file 的目录,该目录已经在包含路径中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-22
  • 1970-01-01
相关资源
最近更新 更多