提问人:Jeff 提问时间:7/23/2009 最后编辑:Jeff 更新时间:7/24/2009 访问量:939
WordPress与损坏图像的奇怪之处(第2部分)
WordPress oddity with broken images (part 2)
问:
你能告诉我你对此的看法吗,看看你是否可以重新创建它?有两种情况:
场景 1(按预期工作)...
$post->post_content 变量包含以下内容(带有 VALID image src):
(string) "before [hw] <img src="/path/to/valid_image.gif" /> after"
此代码放置在主题标题 .php 的顶部...
1: echo test_out();
2:
3: function test_out() {
4: global $post;
5: error_log( 'stage_1' );
6: $str = $post->post_content;
7: error_log( 'stage_2' );
8: var_dump( isset( $str ) );
9: error_log( 'stage_3' );
10: $str = test_core_wp( 'test_shortcode', $str );
11: error_log( 'stage_4' );
12:
13: return $str;
14: }
15:
16: function test_shortcode( $content ) {
17: return str_replace( '[hw]', 'Hello World!', $content );
18: }
19:
20: function test_core_wp( $function, $a = NULL ) {
21: $wrap = array ( 'test_shortcode' => 'test_shortcode' );
22:
23: if ( isset( $a ) ) $args[] = $a;
24:
25: return call_user_func_array( $wrap[ $function ], $args );
26: }
输出这个(正确)...
bool(true)
before Hello World! <img src="/path/to/valid_image.gif" /> after
在PHP日志中(正确地)...
[22-Jul-2009 11:49:36] stage_1
[22-Jul-2009 11:49:36] stage_2
[22-Jul-2009 11:49:36] stage_3
[22-Jul-2009 11:49:36] stage_4
场景 2(出现问题的地方)...
$post->post_content 变量现在包含:(带有 INVALID 图像 src):
(string) "before [hw] <img src="/path/to/broken_image.gif" /> after"
输出这个(仍然正确)...
bool(true)
before Hello World! <img src="/path/to/broken_image.gif" /> after
在PHP日志中(这就是问题所在)...
[22-Jul-2009 11:56:11] stage_1
[22-Jul-2009 11:56:11] stage_2
[22-Jul-2009 11:56:11] stage_3
[22-Jul-2009 11:56:11] stage_4
[22-Jul-2009 11:56:11] stage_1
[22-Jul-2009 11:56:11] stage_2
[22-Jul-2009 11:56:11] stage_3
[22-Jul-2009 11:56:11] PHP Warning: Missing argument 1 for test_shortcode() in
/path/to/header.php on line 16
[22-Jul-2009 11:56:11] stage_4
该函数似乎在运行两次,但仅当包含损坏的图像时。test-out()
$post->post_content
仅供参考,使用 Firefox,您可以通过点击重新加载网页源代码。重新加载源时,没有问题。但是,在浏览器选项卡(或任何浏览器)中重新加载网页时,我收到如上所示的警告。CTRL-R
我已经确认,只有当变量 $post->post_content(或任何$post变量,对于 WordPress 大师来说)中有一个损坏的 img src 时,才会发生奇怪的现象。
你有没有机会重现这个并告诉我你的想法?我是PHP的新手,但我很确定正在发生一些超出我知识范围的事情。:)
编辑:
我正要开始检查我的本地开发环境,但一个朋友给我写信:
看了你的帖子后,我想我 可能知道发生了什么。
我以为警告消息 你说的是 当您在浏览器中显示时 加载了有问题的页面,但您的 post 表示您看到的是 PHP 日志中的警告消息 相反。它只出现在 PHP日志?是的
如果是这样,那么请考虑一下 解释。。。。
在你帖子正文的情况下 包含一个标记到一个有效的 image,则您的代码正在运行 一次按预期生成页面。 浏览器看到呈现的页面和 然后尝试加载图像。这 服务器找到图像并对其进行处理 直接向上 - 这里没有惊喜。
在帖子正文的情况下 包含无效标记 image,则您的代码正在运行 一次生成页面,就像 以前。然后浏览器会做一个 单独的 HTTP 连接以尝试 加载图像。通常,它会 只需触发 404 错误,然后 浏览器会显示一个损坏的图像, 故事到此结束。但是,如果损坏 图片 URL 是你下面的东西 Wordpress 安装,然后是 Wordpress 覆盖默认的 Web 服务器 404 行为和盘子花哨的“404 未找到“页面,而不是 Web 服务器的默认 404 页面。这是 kicker -- Wordpress 的花哨 404 页面 包括与 它显示的所有其他页面。所以 如果此代码位于 你的标头,它将再次被调用 Web 服务器发送的 404 页面 为了响应丢失的图像,您的 浏览器请求它。
您永远不会真正看到 404 页面 这种情况,因为它正在 为响应 请求,而不是页面请求,所以 浏览器只是将响应视为 图像错误并显示损坏的图像 图标,但它实际上是 生成和发送。
比较一下(有效的图像 URL 在 a Wordpress 安装):
http://www.example.com/foo.jpg
到这个(无效的图像 URL 在 Wordpress安装):
http://www.example.com/foo.jpg
请注意自定义 404 页面,包括 返回的标头...?
和。。。在 404 的背景下 页面上,$post对象不存在, 所以$post->post_content显然不是 一个字符串。
我以为警告消息 在浏览器中显示 原始页面加载,这就是为什么我 没真正考虑过这种情况, 但是,如果它只是输出到您的 PHP日志,那么它就很有意义了。
如果是这样的话,那么你可以 要么忽略警告,因为它真的 没有区别,或者你可以测试 对于代码中的这种情况(例如 您提到的 ISSET 解决方法 之前)。
任何其他想法,请告诉我,但是 这似乎与我所知道的相符 到目前为止。
答:
它只出现在PHP日志中吗?
是的。
还行。然后,对丢失图像的请求运行的自定义 404 处理程序几乎可以肯定是导致警告的原因。由于警告不会显示在任何地方,因此可以安全地忽略它,或者如果您不希望它使日志混乱,则可以使用 isset 测试。无论如何,这真的不是一个问题,但至少现在你知道它来自哪里,而且这不是一些真正问题的迹象。
我不认为(DEV)环境应该与它有任何关系。它在设置了真实 DNS 条目的实时服务器上的行为方式相同。
我简直不敢相信我没有想到这一点——呃!!!你的朋友是100%正确的。它是 firefox 加载损坏的图像,wordpress 正在提供该图像,从而运行您的代码两次。
评论