typecho提交文章后出现:“指定的目录不可写”的解决办法

admin 2021-11-24 AM 1924℃ 0条

一、前言

前几天挪动一个网站,数据备份以后就关闭所有的访问,其他的没有挪动。等了一个星期后回去放开网站,却发现有部分的文章无法提交。

本人习惯使用typecho,所以对typecho出现的问题或多或少有些了解,但此次出现:指定的目录不可写的问题还是第一次碰到。

52E6E74295CC397AF81E7CDAE5B3DD62.png

凭着对typecho框架的了解,经过一番排查后终有所斩获,最后成功解决该问题。记录下来,供大家参考。

二、排查步骤

  • 步骤1:到源码中搜索:指定的目录不可写

将typecho工程的源码放到sublime编辑器中,用全局搜索功能搜索:指定的目录不可写。非常遗憾的是,最后没有查找到该文字,也就是说这不是框架发生的bug。那么就剩下两个地方会出现运行时错误:

  • 第一个地方:主题。

    主题作为typecho框架的重要组成部分,所以极有可能出现该bug。不过此次发生的问题主要集中在提交文章的地方,而别的后台设置以及前端的展示都没有出现该问题。因此认为,该问题与主题无关。

  • 第二个地方:插件

    在typecho框架中,插件被大量的使用到扩展功能当中,比如amp主题、缓存、提交文章等等。登录后天发现,后台确实有一个sitemap的插件被激活,而提交文章需要提交到sitemap中,sitemap生成目录才能让各大引擎公司的爬虫索引。初步怀疑此问题和插件有关。

为了验证问题出现的地方,我们需要开启typecho框架的debug模式。开启typecho的debug模式的方法很简单,只需要找到根目录下的config.inc.php文件,在define区域中加入以下代码即可:

define('__TYPECHO_DEBUG__', TRUE);

注意:当调试完毕后,需要将改行代码注释掉,不然在网站出错的时候将会把错误抛给浏览者,造成不好的体验。

添加后,config.inc.php的部分代码如下:


/** 定义根目录 */
define('__TYPECHO_ROOT_DIR__', dirname(__FILE__));

/** 定义插件目录(相对路径) */
define('__TYPECHO_PLUGIN_DIR__', '/usr/plugins');

/** 定义模板目录(相对路径) */
define('__TYPECHO_THEME_DIR__', '/usr/themes');

/** 后台路径(相对路径) */
define('__TYPECHO_ADMIN_DIR__', '/admin/');
/** 开启debug模式 */
define('__TYPECHO_DEBUG__', TRUE);

因为php是解释运行语言,所以添加代码后无需重启环境就可以直接调试代码。

在后台操作添加文章,果然出现如下异常信息:

.../usr/plugin/Sitemap.php xxx行报错

错误日志暴露的信息和猜测的一致,sitemap插件在生成sitemap.xml的时候没有获得足够的权限,以为抛出不可写的错误。

三、解决的办法

定位到问题以后,很容易得出解决的办法。毕竟插件一开始都是好好的,不可能无缘无故失效。所以我们利用重启大法,将插件禁用后再启用,继而去后台添加文章,文章顺利添加到后台,而且没有出现任务错误。

至此,问题得到解决,希望对大家有所帮助!

本文完结!

标签: typecho, sitemap

非特殊说明,本博所有文章均为博主原创。

评论已关闭