ZendServer

想基于typecho给自己的公司做一个企业宣传站,个人MACBOOK上的PHP开发部署采用的Zend Server Develop Edition. 说实话用Zend Server作为部署环境确实挺方便, 无需做过多的配置修改, 利用自带的zdpack工具,在development.xml完成应用的配置,然后生成打包文件.zpk.直接在后台上传,仅通过简单的web可视化界面就可以轻松完成应用的部署,包括vhost,PHP版本,mysql等的配置都不需要做过多的操作.

直接在typecho官方网站上下载了最新的版本1.0(14.10.10).然后通过打包,代码上传,在install.php的引导下完成了数据库,管理员,邮箱,站点URL等的配置. 比较顺利,提示安装完成.不过接下来当我通过提示的链接,访问控制台时,浏览器直接调到了空白页.

访问站点主页:http://localhost:10088/typecho(zend server默认采用10088端口自主安装app的访问).

接下来问题来了, 站点主页中除了首页链接点击访问正常, 其余链接皆无法正常访问.通过浏览器查看源码发现. 除首页外的所有链接均变为: http://localhost:10088:10088/typecho/***.

那么问题就来了,在站点设置中自定义的站点url在这里怎么就成了这样?

只能追代码了....

1.首先查看默认主题中的 /usr/themes/default/header.php
发现


 

主题中的CSS链接正常.关于的链接在line 60

is('page', $pages->slug)): ?> class="current" href="permalink(); ?>" title="title(); ?>">title(); ?> 

这里的$pages->permalink()返回的结果异常.全局搜索:permalink, 结果太多,无从下手.

想到关于typecho的库表中有一个option表,会不会是URL设置错误.结果siteUrl是正常的, 其余相关的URL设置也均无异样.

没办法, 直接通过传统的输出调试吧. 不知怎么的突然想到在 header.php中直接打印$this来寻找下眉目.

 

结果不出所料, 从$this的打印结果中看到了这样一个选项 [rootUrl] => 'http://localhost:10088:10088/typecho'.好了,接下只要定位rootUrl在何处生成的就可以了.

通过rootUrl定位查找, 确定/var/Widget/Options.php中的line 373:

$this->rootUrl = $this->request->getRequestRoot(); 

然后找到request相关代码:/var/Typecho/Request.php中的

/**
 * 获取url前缀 
 * 
 * @access public
 * @return string
 */
public static function getUrlPrefix() {
    if (empty(self::$_urlPrefix)) {
        self::$_urlPrefix = (self::isSecure() ? 'https' : 'http') 
            . '://' . (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME'])
            . (in_array($_SERVER['SERVER_PORT'], array(80, 443)) ? '' : ':' . $_SERVER['SERVER_PORT']);
    }

    return self::$_urlPrefix;
} 

这里关于端口有限制为80或443, 问题的根源找到了. 根据个人的需求,添加上10088的支持, OK了. 突然发现Typecho的框架很大, 源码理解起来工作量很大. 有时间想进一步学习其中的开发思想. 不错的一次体验, 记载以供自己日后回顾此时的处理问题思路, 说不定也可以给其他遇到类似问题的朋友一点帮助

你可能感兴趣的:(typecho)