服务器迁移了一段时间了,也没怎么整过博客,今天本想新建个页面放文章归档,也想给博客增加点活力。可是新建页面的时候发现竟然没有选模版的地儿?!我记得是可以选的啊,赶紧打开本地看看,也是正常有的啊!
网上搜索了下,都说是模版文件头部要加声明注释,赶紧去看了下代码,也有啊,再说如果是因为这个问题,那么在本地就不应该显示,关键是现在本地正常,而服务器上不对。
后台不是提供在线编辑主题吗,那咱就去在线编辑下模版试试呗。尼玛、不点不知道,一点吓一跳!编辑模版也不能用了?!直接提示”噢,没有这个文件。请重新检查文件名,然后再试。谢谢。”
分析了一下,感觉应该是下面几点的原因:
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了。(不过,为了以后升级兼容和其他项目的兼容,还是走正常路线吧。。。)