嗨,老铁,欢迎来到我的博客!

如果觉得我的内容还不错的话,可以关注下我在 segmentfault.com 上的直播。我主要从事 PHP 和 Java 方面的开发,《深入 PHP 内核》作者之一。

[视频直播] PHP 进阶之路 - 亿级 pv 网站架构的技术细节与套路 直播中我将毫无保留的分享我这六年的全部工作经验和踩坑的故事,以及会穿插着一些面试中的 考点难点加分点

周梦康 发表于 2014-05-24 6295 次浏览 标签 : PHPCMS

打开安装,提示No permission resources.,初步确定是因为没有定义IN_PHPCMS

include '../phpcms/base.php';
define('INSTALL_MODULE',true);
defined('IN_PHPCMS') or exit('No permission resources.');//在这里出错

我想,难道是因为没有找到../phpcms/base.php

echo dirname(__FILE__).'/../phpcms/base.php';

在终端使用输出的地址,发现没问题,能编辑到,为什么呢?从上到下的权限都是www:www(755)。我在../phpcms/目录下面新建了一个test.php(代码为return 'test')。 然后在install.php里写

echo include dirname(__FILE__).'/../phpcms/test.php';
exit;

本地能正常输出,测试服务器上没有内容输出。因为是../phpcms/base.php,所以考虑到phpcms父目录的权限是否够,权限也是www:www(755)

扯了这么多,就一句话:文件存在,权限也应该够,在本地能包含到,但是在服务器上却包含不到?

测试服务器,调试应该默认开启错误显示,和先说错误的级别,居然忘记了这个,在install.php最开始添加

ini_set('display_errors','On');
error_reporting(E_ALL);

报错内容为:

Warning: include(): open_basedir restriction in effect. File(/home/wwwroot/webtest/test1/phpcms/test.php) is not within the allowed path(s): (/home/wwroot/webtest/test1/:/tmp/) in /home/wwwroot/webtest/test1/install/install.php on line 6 
Warning: include(/home/wwwroot/webtest/test1/phpcms/test.php): failed to open stream: Operation not permitted in /home/wwwroot/webtest/test1/install/install.php on line 6 
Warning: include(): Failed opening '/home/wwwroot/webtest/test1/install/../phpcms/test.php' for inclusion (include_path='/home/wwwroot') in /home/wwwroot/webtest/test1/install/install.php on line 6

这个问题以前没有遇到过,又是一片知识空白。 

include操作时,open_baseidr约束导致了错误。为什么第一行里说的,/home/wwwroot/webtest/test1/phpcms/test.php文件不在允许的路径/home/wwroot/webtest/test1/:/tmp/里,为什么这里的路径是/home/wwroot,而非/home/wwwroot

也就是说我现在项目的open_baseidr/home/wwroot/webtest/test1/,打开测试服务器的php.ini文件查看,发现了Zend Optimizer模块,里面对各个虚拟主机的open_baseidr做了限定。PHPCMS安装文件install.php里面include '../phpcms/base.php'无效

我将其修改为了

[HOST=xxx.com]
open_basedir=/home/wwwroot/webtest/test1/:/tmp/
[PATH=/home/wwwroot/webtest/test1]
open_basedir=/home/wwwroot/webtest/test1/:/tmp/
重启了php-fpm,再访问OK了。一次纠结的调错,关于这里的Zend Optimizer模块是如何自动生成的,为什么会出错?难道是我最开始在创建虚拟主机的时候写成了/home/wwroot/,而后期再修改,它却有没跟着修改?

嗨,老铁,欢迎来到我的博客!

如果觉得我的内容还不错的话,可以关注下我在 segmentfault.com 上的直播。我主要从事 PHP 和 Java 方面的开发,《深入 PHP 内核》作者之一。

[视频直播] PHP 进阶之路 - 亿级 pv 网站架构的技术细节与套路 直播中我将毫无保留的分享我这六年的全部工作经验和踩坑的故事,以及会穿插着一些面试中的 考点难点加分点

评论列表