php帮助文档无法打开,PHP - 无法打开流:没有这样的文件或目录

有很多原因导致人们可能遇到这个错误,因此一个好的检查列表首先要检查的内容有很大帮助。

让我们考虑一下我们正在对以下行进行故障排除:require "/path/to/file"

清单

1.检查拼写错误的文件路径手动检查(通过目视检查路径)

或移动任何被其调用require*或调用include*其自己的变量,回显它,复制它,并尝试从终端访问它:$path = "/path/to/file";echo "Path : $path";require "$path";

然后,在一个终端:cat 

2.检查相对于绝对路径注意事项的文件路径是否正确如果它以正斜杠“/”开头,那么它不是指网站文件夹的根目录(文档根目录),而是指服务器的根目录。例如,您的网站目录可能是 /users/tony/htdocs

如果它不是以正斜杠开始,那么它要么依赖于包含路径(见下文),要么路径是相对的。如果是相对的,则PHP将相对于当前工作目录的路径进行计算。因此,不是相对于网站根目录的路径,也不是相对于您键入的文件

因此,始终使用绝对文件路径

最佳做法:

为了使您的脚本在您移动的同时保持健壮,同时仍然在运行时生成绝对路径,您有两个选择:用require __DIR__ . "/relative/path/from/current/file"。该__DIR__幻常量返回当前文件的目录。

SITE_ROOT自己定义一个常量:在您网站目录的根目录下,创建一个文件,例如 config.php

在config.php,写define('SITE_ROOT', __DIR__);

在每个要引用站点根文件夹的文件中,包括config.php,然后在SITE_ROOT任何您喜欢的地方使用常量:require_once __DIR__."/../config.php";...require_once SITE_ROOT."/other/file.php";

这两种做法也使您的应用程序更具可移植性,因为它不依赖于包含路径等ini设置。

3.检查包含路径

包含文件的另一种方式,无论是相对还是纯粹绝对,都是依赖于包含路径。对于诸如Zend框架之类的库或框架,通常就是这种情况。

这样的包含将如下所示:include "Zend/Mail/Protocol/Imap.php"

在这种情况下,您需要确保“Zend”所在的文件夹是包含路径的一部分。

您可以使用以下命令检查包含路径:echo get_include_path();

您可以使用以下方法为其添加文件夹:set_include_path(get_include_path().":"."/path/to/new/folder");

4.检查您的服务器是否有权访问该文件

可能一起,运行服务器进程的用户(Apache或PHP)根本没有读取或写入该文件的权限。

要检查服务器运行的用户,可以使用posix_getpwuid:$user = posix_getpwuid(posix_geteuid());var_dump($user);

要查找文件的权限,请在终端中键入以下命令:ls -l 

5.检查PHP设置

如果以上都不起作用,那么问题可能是某些PHP设置禁止它访问该文件。

三个设置可能是相关的:如果设置了此项,PHP将无法访问指定目录之外的任何文件(甚至不能通过符号链接)。

但是,默认行为是不设置它,在这种情况下没有限制

这可以通过调用phpinfo()或使用来检查ini_get("open_basedir")

您可以通过编辑php.ini文件或httpd.conf文件来更改设置如果启用此限制可能适用。但是,这已在PHP 5.4中删除。如果您仍然使用支持安全模式升级到仍受支持的PHP版本的版本。这仅适用于在尝试在本地文件系统上包含文件时通过网络进程(例如http://)包含或打开文件

这可以通过检查ini_get("allow_url_include")和设置ini_set("allow_url_include", "1")

转角案件

如果上述任何一个都无法诊断问题,则可能会发生以下特殊情况:

1.包含依赖于包含路径的库

您可以使用相对路径或绝对路径包含库,例如Zend框架。例如 :require "/usr/share/php/libzend-framework-php/Zend/Mail/Protocol/Imap.php"

但是你仍然会遇到同样的错误。

这可能是因为您(成功)包含的文件本身具有另一个文件的include语句,而第二个include语句假定您已将该库的路径添加到包含路径。

例如,之前提到的Zend框架文件可能包含以下内容:include "Zend/Mail/Protocol/Exception.php"

这既不是相对路径的包含,也不是绝对路径。假设Zend框架目录已添加到包含路径。

在这种情况下,唯一可行的解决方案是将目录添加到包含路径。

2. SELinux

如果您正在运行安全增强型Linux,则可能是因为拒绝从服务器访问该文件而导致问题的原因。

要检查系统上是否已启用SELinux,请sestatus在终端中运行该命令。如果该命令不存在,则SELinux不在您的系统上。如果它确实存在,那么它应该告诉你它是否被强制执行。

要检查SELinux策略是否是问题的原因,您可以尝试暂时关闭它。但要小心,因为这将完全禁用保护。不要在生产服务器上执行此操作。setenforce 0

如果您不再关闭SELinux的问题,那么这就是根本原因。

要解决此问题,您必须相应地配置SELinux。

以下上下文类型是必要的:httpd_sys_content_t 对于您希望服务器能够读取的文件

httpd_sys_rw_content_t 对于您想要读写访问权限的文件

httpd_log_t 用于日志文件

httpd_cache_t 用于缓存目录

例如,要将httpd_sys_content_t上下文类型分配给您的网站根目录,请运行:semanage fcontext -a -t httpd_sys_content_t "/path/to/root(/.*)?"restorecon -Rv /path/to/root

如果您的文件位于主目录中,则还需要打开httpd_enable_homedirs布尔值:setsebool -P httpd_enable_homedirs 1

在任何情况下,SELinux拒绝访问文件的原因可能有多种,具体取决于您的策略。所以你需要调查一下。这是一个专门为Web服务器配置SELinux的教程。

3. Symfony

如果您正在使用Symfony,并在上传到服务器时遇到此错误,则可能是应用程序的缓存未被重置,因为app/cache已上载或尚未清除缓存。

您可以通过运行以下控制台命令来测试并修复此问题:cache:clear

4. Zip文件中的非ACSII字符

显然,zip->close()当zip中的某些文件的文件名中包含非ASCII字符(例如“é”)时,也会发生此错误。

可能的解决方案是utf8_decode()在创建目标文件之前包装文件名。

致Fran Cano确认并建议解决此问题的方法

php官方中文帮助手册,2013最新版 ■版权信息 ■PHP 手册■序言 ■入门指引■简介 ■简明教程 ■安装与配置■安装前需要考虑的事项 ■Unix 系统下的安装 ■Mac OS X 系统下的安装 ■Windows 系统下的安装 ■Installation on Cloud Computing platforms ■FastCGI 进程管理器 (FPM) ■PECL 扩展库安装 ■还有问题? ■运行时配置 ■语言参考■基本语法 ■类型 ■变量 ■常量 ■表达式 ■运算符 ■控制结构 ■函数 ■类与对象 ■命名空间 ■异常处理 ■引用的解释 ■预定义变量 ■预定义异常 ■预定义接口 ■Context options and parameters ■Supported Protocols and Wrappers ■安全■简介 ■总则 ■以 CGI 模式安装时 ■以 Apache 模块安装时 ■文件系统安全 ■数据库安全 ■错误报告 ■使用 Register Globals ■用户提交的数据 ■魔术引号 ■隐藏 PHP ■保持更新 ■特点■用 PHP 进行 HTTP 认证 ■Cookie ■会话 ■处理 XForms ■文件上传处理 ■使用远程文件 ■连接处理 ■数据库永久连接 ■安全模式 ■PHP 的命令行模式 ■垃圾回收机制 ■函数参考■影响 PHP 行为的扩展 ■音频格式操作 ■身份认证服务 ■日历和事件相关扩展 ■命令行特有的扩展 ■压缩与归档扩展 ■信用卡处理 ■加密扩展 ■数据库扩展 ■文件系统相关扩展 ■国际化与字符编码支持 ■图像生成和处理 ■邮件相关扩展 ■数学扩展 ■非文本内容的MIME输出 ■进程控制扩展 ■其它基本扩展 ■其它服务 ■搜索引擎扩展 ■面向服务器的扩展 ■Session 扩展 ■文本处理 ■与变量和类型有关的扩展 ■Web Services ■Windows 平台下的扩展 ■XML 操作 ■PHP 核心:Zend 引擎的黑客指南■序言 ■"counter" 扩展 - 一个连续的实例 ■PHP 5 构建系统 ■扩展的结构 ■内存管理 ■变量的使用 ■函数的编写 ■类和对象的使用 ■资源的使用 ■INI 设置的使用 ■的使用 ■PDO 驱动 ■扩展相关 FAQ ■Zend Engine 2 API 参考 ■Zend Engine 2 操作码列表 ■Zend Engine 1 ■FAQ — FAQ:常见问题■一般信息 ■邮件列表 ■获取 PHP ■数据库问题 ■安装 — 安装常见问题 ■编译问题 ■使用 PHP ■Password Hashing — Safe Password Hashing ■PHP 和 HTML ■PHP 和 COM ■PHP 和其它语言 ■从 PHP 4 移植到 PHP 5 ■杂类问题 ■附录■PHP 及其相关工程的历史 ■Migrating from PHP 5.3.x to PHP 5.4.x ■从 PHP 5.2.x 移植到 PHP 5.3.x ■Migrating from PHP 5.1.x to PHP 5.2.x ■Migrating from PHP 5.0.x to PHP 5.1.x ■从 PHP 4 移植到 PHP 5 ■类与对象(PHP 4) ■PHP 的调试 ■配置选项 ■php.ini 配置 ■扩展库分类 ■函数别名列表 ■保留字列表 ■资源类型列表 ■可用过滤器列表 ■所支持的套接字传输器(Socket Transports)列表 ■PHP 类型比较表 ■解析器代号列表 ■Userland Naming Guide ■关于本手册 ■Creative Commons Attribution 3.0 ■索引 ■CHM 版本■关于此版本 ■Using PHP Manual CHM Edition ■The Full Text Search ■Specialities of this Edition ■Integrating the PHP Manual ■Skin development ■CHM Edition Credits
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值