最近不知道瞎点了什么东西,结果点出来一个typecho,看着挺简洁的,速度也不错,然后。。。就深深的陷入爬坑之旅。
相信用typecho的有很多个人站长,只是想做个blog记录下自己的生活工作点滴。因此相比有很多人会用SAE、GAE、BAE等空间去搭建自己的网站。我用的也是万网最便宜的一款虚拟主机(共享版,299/年)。
然后搭建好了自己的博客,想着先写篇文章试试效果吧,结果到传图片的时候,入坑了。图片怎么也传不上去。各种百度,查各种官方论坛,结果都不奏效。无奈,只能自己去调试他代码了,找了半天。
终于发现在程序是在 /var/Widget/upload.php的第99行
if (!self::checkFileType($ext) || Typecho_Common::isAppEngine()) {
然后想,自己后台的设置的后缀都是包含在内的,肯定不是前边的判断语句,然后就找isAppEngine看他到底是个什么函数。果不其然,在 /var/Typecho/Common.php 此函数是这样定义的:
public static function isAppEngine() { return !empty($_SERVER['HTTP_APPNAME']) // SAE || !!getenv('HTTP_BAE_ENV_APPID') // BAE || !!getenv('SERVER_SOFTWARE') // BAE 3.0 || (ini_get('acl.app_id') && class_exists('Alibaba')) // ACE || (isset($_SERVER['SERVER_SOFTWARE']) && strpos($_SERVER['SERVER_SOFTWARE'],'Google App Engine') !== false) // GAE ; }
就是说,他会当前的服务器环境是不是SAE,BAE,ACE及是否是国内常见的虚拟主机,如果是则不让上传附件。
然后,把此函数改成
public static function isAppEngine() { return false; }
测试,图片上传毫无问题。
至此,图片不能上传问题完美解决。
但是,我想不通的是为什么typecho团队要这样做。想在的千把块钱一年的虚拟空间动辄几十个G的硬盘,月流量搞不好已经不限制了,如果站长在上传图片的时候对图片稍作压缩,只要不是图片站,基本可以达到日访问1000IP了。