typecho提交文章后出现:“指定的目录不可写”的解决办法
一、前言
前几天挪动一个网站,数据备份以后就关闭所有的访问,其他的没有挪动。等了一个星期后回去放开网站,却发现有部分的文章无法提交。
本人习惯使用typecho,所以对typecho出现的问题或多或少有些了解,但此次出现:指定的目录不可写
的问题还是第一次碰到。
凭着对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的时候没有获得足够的权限,以为抛出不可写的错误。
三、解决的办法
定位到问题以后,很容易得出解决的办法。毕竟插件一开始都是好好的,不可能无缘无故失效。所以我们利用重启大法,将插件禁用后再启用,继而去后台添加文章,文章顺利添加到后台,而且没有出现任务错误。
至此,问题得到解决,希望对大家有所帮助!
本文完结!