【问题标题】:WordPress oddity with broken images (part 2)带有损坏图像的 WordPress 怪异(第 2 部分)
【发布时间】:2009-07-22 16:09:31
【问题描述】:

您能告诉我您对此的看法,并可能看看您是否可以重新创建它?有两种情况:

场景 1(按预期工作)...

$post->post_content 变量包含以下内容(带有 VALID 图像 src):

(string) "before [hw] <img src="/path/to/valid_image.gif" /> after"

这段代码放在主题header.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 变量现在包含:(带有无效图像 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-&gt;post_content 包含损坏的图像时。

仅供参考,使用 Firefox,您可以通过点击 CTRL-R 重新加载网页源代码。重新加载源时,没有问题。但是,在浏览器选项卡(或任何浏览器)中重新加载网页时,我收到上面显示的警告。

我已经确认,只有在变量 $post->post_content(或任何 $post 变量,对于您的 WordPress 专家)中存在损坏的 img src 时才会发生奇怪的情况。

你有没有机会复制这个并告诉我你的想法?我是 PHP 新手,但我很确定正在发生的事情超出了我的知识范围。 :)

编辑:

我正要开始检查我的本地开发环境,但一位朋友给我写信:

看了你的帖子,我觉得我 可能知道发生了什么。

我以为警告信息 你说的是 当您在浏览器中显示 加载了相关页面,但您的 帖子表明您正在查看 PHP 日志中的警告消息 反而。是出现在 PHP 日志?

如果是这样,那么考虑一下 解释....

在您发布正文的情况下 包含一个有效的标签 图像,然后您的代码正在运行 一次按预期生成页面。 浏览器看到渲染的页面并且 然后尝试加载图像。这 服务器找到图像并对其进行处理 直接向上 - 这里没有惊喜。

在帖子正文的情况下 包含一个无效标签 图像,然后您的代码正在运行 一次生成页面,就像 前。然后浏览器生成一个 单独的 HTTP 连接以尝试 加载图像。通常,它会 只需触发 404 错误,然后 浏览器会显示损坏的图像, 故事结局。但是,如果断了 图片 URL 指向您下面的内容 Wordpress 安装,然后是 Wordpress 覆盖默认的 Web 服务器 404 行为和菜肴花哨的“404 未找到”页面而不是网络 服务器的默认 404 页面。这是 kicker -- Wordpress 的精美 404 页面 包含相同的页眉和页脚 它显示的所有其他页面。所以 如果您在顶部有此代码 你的标题,它会被再次调用 Web 服务器发送的 404 页面 作为对丢失图像的回应,您的 从它请求的浏览器。

您从未真正看到过 404 页面 这种情况,因为它正在 响应于生成 请求,而不是页面请求,所以 浏览器只是将响应视为 图像不好并显示损坏的图像 图标,但实际上是 生成并发送。

比较这个(一个有效的图像 URL 下 Wordpress 安装):

http://www.example.com/foo.jpg

对此(a 下的无效图像 URL Wordpress 安装):

http://www.example.com/foo.jpg

注意自定义 404 页面,包括 返回的标头...?

并且...在 404 的上下文中 页面,$post 对象不存在, 所以 $post->post_content 显然不是 一个字符串。

我以为警告信息 正在浏览器中显示 原始页面加载,这就是为什么我 没有真正考虑到这种情况, 但如果它只是输出到您的 PHP日志,那么它就很有意义了。

如果是这样的话,那么你可以 要么忽略警告,因为它真的 没有区别,或者你可以测试 对于您的代码中的这种情况(例如 您提到的 isset 解决方法 之前)。

任何其他想法,请告诉我,但是 这似乎符合我所知道的 到目前为止。

【问题讨论】:

  • 谢谢。这是一个非常有趣的练习:-)
  • 哈哈,好东西,乔希!我只玩了四天,直到有人通过电子邮件向我发送了正确答案。直接到我的收件箱。 ;)

标签: php wordpress


【解决方案1】:

是否出现在 PHP 日志中?

是的。

好的。然后,针对丢失图像的请求运行的自定义 404 处理程序几乎可以肯定是导致警告的原因。由于警告没有显示在任何地方,因此可以安全地忽略,或者如果您不希望它弄乱您的日志,您可以使用您的 isset 测试。无论如何,这确实不是问题,但至少现在您知道它的来源,并且这不是真正问题的迹象。

我认为(DEV)环境根本不应该与它有任何关系。在设置了真实 DNS 条目的实时服务器上,它的行为方式相同。

【讨论】:

    【解决方案2】:

    我不敢相信我没有想到这一点- DUH!!!!!!你的朋友是 100% 正确的。它是 Firefox 加载损坏的图像,wordpress 正在提供服务,因此运行您的代码两次。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-22
      • 2018-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多