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

有许多原因,为什么一个人可能遇到这个错误,因此一个良好的检查清单,什么检查第一次有很大帮助。

让我们考虑我们正在排除故障以下行:

require "/path/to/file"

清单

1.检查打印错误的文件路径

>手动检查(通过目视检查路径)

>或将任何被require *或include *调用的函数移动到自己的变量,回显它,复制它,并尝试从终端访问它:

$path = "/path/to/file";

echo "Path : $path";

require "$path";

然后,在终端:

cat

2.关于相对路径和绝对路径,请检查文件路径是否正确

>如果它是由正斜杠“/”开始,则它不是指您的网站的文件夹(文档根)的根,而是指向您的服务器的根。

>例如,您的网站的目录可能是/ users / tony / htdocs

>如果它不是由正斜杠开始,那么它要么依赖于包含路径(见下文),要么路径是相对的。如果是相对的,那么PHP将相对地计算current working directory的路径。

>因此,不是相对于您的网站的根路径,或到您正在输入的文件的路径

>因此,总是使用绝对文件路径

最佳做法:

为了使您的脚本在运行时保持稳定,同时仍然在运行时生成绝对路径,您有两个选项:

>使用require __DIR__。 “/ relative / path / from / current / file”。 __DIR__ magic constant返回当前文件的目录。

>自己定义一个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设置,如include路径。

3.检查您的包含路径

另一种包括文件的方式,既不是相对也不是完全绝对的,就是依赖于include path.对于诸如Zend框架的库或框架来说,通常是这种情况。

这样的包含将如下所示:

include "Zend/Mail/Protocol/Imap.php"

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

您可以检查包含路径:

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版本为still being supported的版本。

>这仅适用于通过网络进程包括或打开文件,例如http://不是当尝试在本地文件系统上包括文件时

>这可以使用ini_get(“allow_url_include”)检查并使用ini_set(“allow_url_include”,“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

如果您运行的是Security-Enhanced Linux,则可能是由于拒绝从服务器访问文件而导致问题的原因。

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

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

setenforce 0

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

要解决它,您将必须相应地配置SELinux。

将需要以下上下文类型:

> httpd_sys_content_t用于希望服务器能够读取的文件

> httpd_sys_rw_content_t用于需要读写访问的文件

> httpd_log_t日志文件

> httpd_log_t用于缓存目录

例如,要将httpd_sys_content_t上下文类型分配到您的网站根目录,请运行:

semanage fcontext -a -t http_sys_content_t "/path/to/root(/.*)?"

restorecon -Rv /path/to/root

如果您的文件在主目录中,您还需要打开httpd_enable_homedirs布尔值:

setsebool -P httpd_enable_homedirs 1

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

Symfony

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

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

cache:clear

参与评论 您还未登录,请先 登录 后发表或查看评论
相关推荐
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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值