这种问题通常发生在将 Joomla 网站迁移到新的服务器上之后,而且多见于 Linux 服务器。具体症状是:当在浏览器中访问网站前台(任何页面)时,浏览器无法显示正常的网页内容,取而代之的是一些出错提示,其中第一行就是: Error: 0 - Cannot open file for writing log

查找问题的根源

以“Cannot open file for writing log”这一句为搜索子串,对整个 Joomla 核心的所有 PHP 文件进行一次内容检索,就会发现这句话只在一个文件中出现:

打开 /libraries/joomla/log/logger/formattedtext.php 这个文件,在大概第229行(Joomla 3.4.8)开始可看到如下代码:

		// Open the file for writing (append mode).
		if (!$this->file = fopen($this->path, 'a'))
		{
			throw new RuntimeException('Cannot open file for writing log');
		}

其中第232行的功能就是显示这句出错提示:Cannot open file for writing log 。

通过观察这个 PHP 文件所在的路径,我们可以很容易推测出这是跟 log(日志)功能有关的文件。同时,把“Cannot open file for writing log”这句话翻译成中文就是“无法打开文件来写入日志”,这提示很可能发生了以下这些情况的一种或多种:

  1. 某个文件不存在;
  2. 某个文件无法打开;
  3. 某个文件无法写入;

通常情况下,如果文件不存在,Joomla 会直接提示“XX文件不存在”。所以,第一种很容易就排除了。后面两种,无论是无法打开还是无法写入,最常见的原因就是文件/目录权限问题。

如果你曾经研究过 Joomla 的主配置文件,或者仔细研究过 Joomla 后台“全局设置”的各项参数,就会记得其中有一项是“日志文件夹路径”。那么,很可能就是这个路径相关的问题。

如何正确填写“日志文件夹路径”

一般的 Joomla 用户不会记得这个参数,是因为在常规的 Joomla 核心安装过程中,安装程序会自动探测服务器上的文件夹路径并自动填写这个参数。但是,当你迁移服务器的时候,由于各家主机商经常使用不同的 web 路径,就导致备份包中保存的旧路径值与新服务器的实际路径不一致。这是 Cannot open file for writing log 这个问题最常见的一种根本原因。

因此,在迁移网站的时候,一定要将“日志文件夹路径”这个参数修改为符合新服务器实际路径的值。这个参数可以直接在 Joomla 后台“全局设置”中填写。如果你发现甚至都无法打开“全局设置”,也可以通过手工编辑 Joomla 主配置文件(/configuration.php 文件)中的 $log_path 这个变量来解决。

Joomla之门 曾经在论坛上推荐过一种通用路径,就是填写“../logs”这个值(不含引号)。一般来说,这个值适合于大部分的服务器,并且不管网站迁移到哪个服务器上,这个值都是正确的,因为这是一种“相对路径”。

但是,在发生了 Cannot open file for writing log 错误的网站上,往往是上述这种相对路径也无法工作。对这种情况,我们就必须设置成完整的“绝对路径”。

如何得知正确的绝对路径?

因为 Joomla 本身的“系统信息”里面并未提供任何与“绝对路径”相关的服务器环境信息,要想快速得知你的 Joomla 根目录下 logs 目录的绝对路径,最方便的途径就是直接问你的主机商客服。但是很遗憾,大多数情况下主机商很不情愿告诉你这个值,或者,有时候主机商的响应没有那么及时。那么,我们来用一个简单的办法快速得到绝对路径:

随便选一个文本编辑器(例如开源的 Notepad++),创建一个新的 php 文件,名称可以随便取,例如叫做 mypath.php,内容如下:

 

<?php
 $path = getcwd();
 echo "您的绝对路径是:<br /> ";
 echo $path;
 ?>

 

将这个文件通过 FTP 上传到你网站的 /logs 目录下,然后通过浏览器访问这个文件(网址应该是 http://域名/logs/mypath.php ),你就会立即看到浏览器打开的页面上显示了该文件所在目录(也就是你的日志文件夹)的绝对路径,将这个值填写到“全局设置”里面即可。(你也可以下载我制作好的这个 mypath.zip 文件,别忘了下载之后解压,然后上传压缩包里面的 mypath.php)。

如果你只能通过手工编辑配置文件的方法来定义日志文件夹路径,那么请用文本编辑器打开 Joomla 根目录下的 /configuration.php 文件,找到 public $log_path 这个变量,将它的值(等号后面双引号以内的内容)修改为刚刚获得的绝对路径值。

 

使用自定义的日志文件夹

一般来说,设置了正确的、绝对路径格式的“日志文件夹路径”之后,就不会再发生 Cannot open file for writing log 这个问题了。但是,有时候会碰到一种“二般情况”:某些服务器会自动将网站根目录下的 logs 目录列为服务器自身使用的日志文件夹,并且“锁定”(lockdown)这个文件夹,不允许其它程序写入。在这种情况下,我们需要给 Joomla 另外定义一个日志文件夹。

方法很简单:通过 FTP 软件,在你的 Joomla 根目录下创建一个新的文件夹,名为 log2 或者 mylogs 等等,然后在“全局设置”中,将“日志文件夹路径”值修改为这个新文件夹的路径 —— 别忘了使用绝对路径。

如果你通过上述两种方式,仍然无法解决 Cannot open file for writing log 这个问题,欢迎到 Joomla中文论坛 发帖讨论,我们一起来研究一下。

PS:顺便说一下,如果你得到了你的 Joomla 在服务器上的绝对路径之后,最好把“全局设置”里面的“临时目录路径”(主配置文件中的变量是 public $tmp_path )也修改为正确的、绝对路径格式的值。

  1. 评论 (0)

  2. Add Yours

评论 (0)

这里还没有人发表评论

免费下载最新Joomla!核心中文版

扫描此二维码,立即开始下载 Joomla 3 核心中文版

付费下载汉化版扩展

付费后即可下载独家海量

Joomla! CMS 扩展汉化版

了解付费会员制度

点击这里给我发消息

了解 joomlagate.com 网站的付费会员制度