这两个PHP字符串分配之间可能有什么不同?

时间:2011-12-17 04:44:33

标签: php wordpress wordpress-plugin

这是Why doesn't update_post_meta work for certain strings? WordPress Answers问题的变体。我把它带到这里是因为我怀疑这可能是一个纯粹的PHP问题,而不仅仅是一个WordPress问题。

我的问题基于以下代码:

$upload = wp_handle_upload ( $_FILES [WPSM_MAIL_META_ATTACHMENT], array ('test_form' => false ) );
$path = 'C:\xampp\htdocs\wordpress/wp-content/uploads/2011/12/ReSharper-6.1-License.txt';
var_dump($path);
$path = $upload['file'];
var_dump($path);
die();
update_post_meta ( 34, WPSM_MAIL_META_ATTACHMENT, $path );

update_post_meta调用会更新WordPress数据库中的WPSM_MAIL_META_ATTACHMENT列以获取帖子号。 34.第2行中的字符串文字赋值给$path与第4行中数组成员赋值完全相同的值,但是使用代码原样,WPSM_MAIL_META_ATTACHMENT列更新为空字符串。如果我注释掉第4行,因此仅使用文字赋值,WPSM_MAIL_META_ATTACHMENT列将更新为正确的文件路径值。

我只能想象分配给$path的两个不同字符串在某种程度上与我使用我的noob调试工具var_dumpdie不可见。我怎样才能诊断出上述两种情况之间的不同之处?或者,作为妥协,我可以做些什么来修改$path = $upload['file']赋值,以便获得与文字赋值相同的结果?

此代码执行后,我的浏览器窗口中的输出完全如下所示,在一行上按原样再现,为了保真度:

string(78) "C:\xampp\htdocs\wordpress/wp-content/uploads/2011/12/ReSharper-6.1-License.txt" string(78) "C:\xampp\htdocs\wordpress/wp-content/uploads/2011/12/ReSharper-6.1-License.txt"

1 个答案:

答案 0 :(得分:1)

这很难追查,需要一些源代码挖掘: -

结果应该与功能stripslahses_deepapply_filter

相关
php > $path = 'C:\xampp\htdocs\wordpress/wp-content/uploads/2011/12/ReSharper-6.1-License.txt';
php > var_dump ( stripslashes_deep($path));
string(75) "C:xampphtdocswordpress/wp-content/uploads/2011/12/ReSharper-6.1-License.txt"

如果你这样做: -

php > var_dump ( stripslashes_deep( addslashes($path) ) );
string(78) "C:\xampp\htdocs\wordpress/wp-content/uploads/2011/12/ReSharper-6.1-License.txt"

我没有明确的结论,
可能是由斜杠引起的

开始快速调试,
尝试用

测试价值
/wp-content/uploads/2011/12/ReSharper-6.1-License.txt
C:/xampp/htdocs/wordpress/wp-content/uploads/2011/12/ReSharper-6.1-License.txt