Get_Option()无法返回二进制结果

时间:2011-12-13 作者:Axonn

出于某种原因,get_option() 当我将网站从本地主机移动到web服务器时,返回二进制结果时开始失败。我通过FTP上传文件迁移了WordPress

然而,其他一切都很完美。甚至wp-admin 工作正常:我可以编辑、发布等。这只是一行代码,让我感到沮丧。它来自我正在使用的一个主题,但没有特定于主题的行为:它在此之前崩溃了。该行代码尝试执行以下操作:

$sqbtn_1 = unserialize(get_option(\'magaling_ads_468060_1\')); //returns null.
$sqbtn_1 = $sqbtn_1->is_empty() ? $ad_def : $sqbtn_1;  //CRASHES: is_empty on a non-object.
如果我创建一个简单的PHP文件,我可以证明数据正确来自MySQL。我的WordPress选项表中有“magaling\\u ads\\u 468060\\u 1”字段,它包含以下内容:

mysql_query(\'SET NAMES utf8\');
$result = mysql_query("select * from wp_options WHERE option_name = \'magaling_ads_468060_1\'");
//prints out the following value of the option_value field:
s:376:"O:18:"Padd_Advertisement":5:{s:27:"Padd_Advertisementimg_url";s:88:"http://www.echysttas.org/wp-content/themes/magaling/images/advertisement-468x060_1.jpg";s:28:"Padd_Advertisementalt_desc";s:15:"Axonn Echysttas";s:27:"Padd_Advertisementweb_url";s:24:"http://www.echysttas.org";s:26:"Padd_Advertisementtarget";s:4:"_new";s:29:"Padd_Advertisementcss_class";s:0:"";}";
所以MySQL返回数据!但是,get\\u选项返回nothing. 我回音了,它是空的。在另一边。。。

get_option(\'magaling_installed\'); //works and returns "1"
其他一切都很好,甚至返回其他特定于主题的(整数或字符串)值。

var_dump( get_option(\'magaling_ads_468060_1\') ); //shows bool(false) 
var_dump( get_option(\'magaling_installed\') ); //shows string(1) "1" 
var_dump( get_option(\'blogname\') ); //string(9) "Echysttas" 

1 个回复
最合适的回答,由SO网友:Axonn 整理而成

发现问题。和A WORD OF WARNING to people MIGRATING their WordPress Installations. 阅读本文,了解get\\u选项在以下情况下如何开始失败unserializing 来自数据库的二进制数据。

我所做的是以核心方式迁移WordPress:将所有文件复制到web服务器,恢复完整的SQL数据库脚本。

在还原之前,我在SQL数据库中进行了大规模替换,将URL从本地更改为web服务器。这就是问题所在。

数据库中存在PHP序列化对象。在序列化字符串的地方,其长度是在前面加上前缀的。而且,你可以猜到我陷入了什么样的混乱:既然我大量替换了主机名,我应该在所有序列化主机名的地方修改序列化对象的字符串长度。

使用默认WordPress安装不会有问题,因为WordPress不使用此类功能。但是,如果你使用插件或主题,并且你使用这种方法来迁移你的博客,你就是在问问题。

幸运的是,在序列化对象中,以前只有很少的本地URL,准确地说,只有两个。

我希望我与这个问题的7个小时的斗争能对某人有所帮助。

结束

相关推荐

将发布内容的自定义API集成到管理界面和公共网站

将问题编辑得更加具体,并添加了悬赏,希望有人有一个可靠的编码解决方案:所以,这里有一个有趣的任务,我一直在努力寻找解决方案。我已经添加了一个悬赏,我将以工作代码的形式奖励给最佳解决方案。我在这里试图做的是利用wordpress作为网站所有标准内容的默认CMS。我正在寻找的解决方案涉及我想要的特定“自定义帖子类型”(称为:位置)。对于此自定义帖子类型,我特别希望根据此维基百科页面中每个城市的城市列表数据和内容自动填充帖子和内容:http://en.wikipedia.org/wiki/List_of_cit