WordPress与破碎图像的奇怪之处(第1部分)

WordPress oddity with broken images (part 1)

提问人:Jeff 提问时间:7/22/2009 最后编辑:Jeff 更新时间:7/24/2009 访问量:179

问:

你能告诉我你对此的看法吗,并可能看看你是否可以重新创建它:

目前,$post->post_content 变量包含:

"before <img src="/path/to/valid_img.gif" /> after"

此代码放置在主题标题 .php 的顶部...

------ Code --------
    1: $str = $post->post_content;
    2: assert( isset( $str ) );
    3: assert( is_string( $str ) );
    4: echo $str;
    5: $str = 'before <img src="/path/to/nonexistant.gif" /> after';
    6: assert( isset( $str ) );
    7: echo $str;
--------------------

输出这个...

------ Output ------
before <img src="/path/to/valid_img.gif" /> after
before <img src="/path/to/nonexistant.gif" /> after
--------------------

有了这些警告......

--- PHP Warnings ---
PHP Warning:  assert() [<a href='function.assert'>function.assert</a>]: Assertion
failed in /path/to/header.php on line 2
PHP Warning:  assert() [<a href='function.assert'>function.assert</a>]: Assertion
failed in /path/to/header.php on line 3
--------------------

如果 assert() 失败两次,为什么第 100 行会正确回显$str,而我知道它应该 100% 成功?

损坏的图像 src 与设置或取消设置变量 $str 有什么关系?WordPress错误/奇怪?

现在疯狂的部分......

当第 5-7 行被注释掉,从而消除不存在的 .gif 时,assert() 警告不会出现,输出仍然正确产生这个......

------ Output ------
before <img src="/path/to/valid_img.gif" /> after
--------------------

你有没有机会重现这个并告诉我你的想法?我是PHP的新手,但我很确定这是疯狂的。:)

PHP 的wordpress

评论


答:

0赞 smoove 7/22/2009 #1

assert() 在您的代码中没有意义,您想要的是一个 if 语句。

评论

0赞 Jeff 7/22/2009
真?我以为assert()是用来调试的?
0赞 smoove 7/22/2009
最好使用 var_dump(isset($str)),这样你看到的是 isset() 的返回值,而不是 assert() 的返回值
0赞 smoove 7/22/2009
php 手册中的 assert(): de.php.net/assert ,断言不是你想要的,你想知道 isset() 是否返回 true,你可以通过 var_dump() 检查这一点,正如我上面所说,assert() 不适用于此任务。
0赞 Jeff 7/22/2009
谢谢smoove,我现在正在重新解决我的问题。非常感谢。
1赞 Josh 7/23/2009
Jeff 之所以使用 assert,是因为他想在日志中按顺序查看错误,并收到 PHP 警告......仅供参考...
0赞 Kuroki Kaze 7/22/2009 #2

你不应该把断言作为一个字符串吗?

评论

0赞 Jeff 7/22/2009
根据我上面的代码,除非我弄错了assert()的目的,否则它似乎正在完成它的工作。
0赞 Kuroki Kaze 7/22/2009
我想说的是尝试将断言参数转换为字符串。这似乎会导致您的错误。assert(TRUE)
0赞 Kuroki Kaze 7/22/2009
我想这里的“断言”已经到位 - 一种防御性编程,以防 $post->post_content 包含一些垃圾而不是字符串。为什么它失败了是另一个问题:)
0赞 Kuroki Kaze 7/23/2009
问题中的“编辑”附近必须有“关闭”按钮。我想你应该将其中一个答案标记为接受才能这样做,但也许不是。