服务器迁移了一段时间了,也没怎么整过博客,今天本想新建个页面放文章归档,也想给博客增加点活力。可是新建页面的时候发现竟然没有选模版的地儿?!我记得是可以选的啊,赶紧打开本地看看,也是正常有的啊!

网上搜索了下,都说是模版文件头部要加声明注释,赶紧去看了下代码,也有啊,再说如果是因为这个问题,那么在本地就不应该显示,关键是现在本地正常,而服务器上不对。

[![select_template_server](/images/2015/01/select_template_server.jpg)](/images/2015/01/select_template_server.jpg)服务器
[![本地](/images/2015/01/select_template_local.jpg)](/images/2015/01/select_template_local.jpg)本地
那肯定就是服务器上哪里跟本地不一样了,刚开始想到的就是Linux下大小写敏感,于是按照官方给的实例一个个替换了下,还是不行。

后台不是提供在线编辑主题吗,那咱就去在线编辑下模版试试呗。尼玛、不点不知道,一点吓一跳!编辑模版也不能用了?!直接提示”噢,没有这个文件。请重新检查文件名,然后再试。谢谢。”
theme_editor
分析了一下,感觉应该是下面几点的原因:

1.服务器权限

第一时间想到的就是服务器权限的问题,可是查看了服务器配置之后发现权限是够用的啊,改成777也是不行,基本上可以排除服务器权限的问题了。

2.服务器迁移导致数据出错

因为我迁站是直接从老服务器把站点copy过来,数据库导出来,批量替换了下该改的地儿,可能是我哪里替换出问题了,于是重新理了一遍数据库,也没有发现问题。

3.环境配置问题

其实这个是我最后考虑到的,但事实证明、我应该先考虑到他的,因为我本地运行是正常的,放在服务器上才出的问题,那么肯定是环境的问题,亦或者说是Win与Linux的差异性。但我大概对比了下,实在是没找到哪里出错了。

于是祭出了我惯用的最笨的办法——逐步断点代码。既然同时出现了无法选择模版和无法编辑模版,那么就暂时可以归到一起了,从 wp-admin/theme-editor.php 开始排查往下追,最终给定位到了非常蛋疼的一个地儿,scandir 函数返回模版下的文件列表是,一直为空?!翻看日志和配置文件,发现部署环境的时候,PHP把scandir函数给禁用了!

说到这里,大概也都知道怎么解决了,直接去php.ini修改disable_functions,把scandir函数放出来就ok了。当然,这个也算是正常的解决办法,但是如果你的服务器上只准备放这一个项目,并且为了所谓的安全性不想放出scandir,也可以去根目录自定义个aascandir什么的跟scandir函数功能一样的函数,然后去把wp里用到scandir的都替换成这个就OK了。(不过,为了以后升级兼容和其他项目的兼容,还是走正常路线吧。。。)