最近又重新研究了一下dedecms CMS,深入了解了dedecms 5.5的功能,发现其功能确实强大。于是将它上传到我的Dreamhost主机,并使用一个临时域名进行测试。然而,在测试过程中遇到了一些问题,例如无法采集内容,甚至DEDE发布文章时的“下载远程图片和资源”功能也无法正常使用。

经过一番排查,我回忆起之前有文章提到Dreamhost的主机禁用了allow_url_fopen,这可能是导致无法采集的原因。在网上搜索后,找到了几篇建议通过自己编译PHP来让Dreamhost支持采集的文章。参考Dreamhost官网的教程,通过SSH折腾了半天,终于成功编译了自己的PHP版本。满怀期待地再次尝试采集,但依旧失败。上传探针检查后发现,allow_url_fopen确实是启用状态,这让我感到非常困惑。

继续深入研究并反复测试后,我发现Dreamhost实际上已经默认启用了allow_url_fopen,网上那些教程大多是2008年以前的文章,可能当时Dreamhost确实禁用了这个功能,但现在显然已经放开限制。

经过两天的努力,虽然解决了部分问题,但dede的采集功能依然无法正常工作。为了验证是否是dede本身的问题,我上传了Supesite和php168进行测试,结果它们的安装和采集功能都能顺利完成。这表明问题确实出在dede上。在dede官网搜索后,发现有不少网友反映在国外Linux主机下采集功能不可用。最终,我找到了解决方法,只需要修改一个文件即可。

问题文件位于include/dedehttpdown.class.php。用本文提供的附件覆盖该文件后,采集功能便能正常使用,同时在发布文章时也能顺利使用“下载远程图片和资源”功能。对比原文件后,我发现修改了以下几处:

// 修改内容如下:
// 1. 注释掉第280行的代码
// fputs($this->m_fp, $headString);

// 2. 找到304行的代码,替换成以下内容
$headString .= "Connection: Close\\\\r\\\\n\\\\r\\\\n";
// fputs($this->m_fp,"Connection: Close\\\\r\\\\n\\\\r\\\\n");

// 3. 找到308行的代码,替换成以下内容
$headString .= "\\\\r\\\\n";
// fputs($this->m_fp,"\\\\r\\\\n");

// 4. 在315行的代码“//获取应答头状态信息”上方插入以下代码
fputs($this->m_fp, $headString);

完成以上修改后,问题迎刃而解。

通过这次经历,我深刻体会到,有时候问题的根源可能并不在于服务器配置,而是程序本身的兼容性问题。希望这篇文章能够帮助到遇到同样问题的朋友。