WordPress奇怪与破碎的图像(第2部分)

时间:2009-07-22 16:09:32

标签: php wordpress

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

情景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-&gt; 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()函数似乎在运行TWICE,但仅在$post->post_content包含损坏的图像时才会运行。

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

我已经确认只有当变量$ post-&gt; post_content(或任何$ post变量,对于你的WordPress大师)中存在损坏的img src时才会出现奇怪现象。

你有机会重现这个并告诉我你的想法吗?我是PHP的新手,但我很确定正在发生的事情超出了我的想法。 :)

修改

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

  

看完你的帖子后,我想我   可能知道发生了什么。

     

我曾经假设过警告信息   你正在谈论的是   当你在浏览器中显示   加载了有问题的页面,但你的   帖子表明你正在看到   PHP日志中的警告消息   代替。是出现在   PHP日志?的

     

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

     

在你身体的情况下   包含有效的标记   图像,然后您的代码正在运行   一次按预期生成页面。   浏览器会看到呈现的页面和   然后尝试加载图像。该   服务器找到图像和菜肴   直接 - 这里没什么惊喜。

     

在邮政体的情况下   包含无效的标记   图像,然后您的代码正在运行   一旦生成页面,就像   之前。然后浏览器制作一个   单独的HTTP连接尝试   加载图像。通常,它会   只是触发404错误而且   浏览器会显示损坏的图像,   故事结局。但是,如果破了   图片网址是你的下面的东西   Wordpress安装,然后Wordpress   覆盖默认Web服务器404   行为和菜肴看起来很花哨“404   找不到“页面而不是网页   服务器的默认404页面。这是   踢球者 - Wordpress的幻想404页面   包含相同的页眉和页脚   它显示的所有其他页面。所以   如果你有这个代码在顶部   你的标题,它会被再次调用   Web服务器发送的404页面   为了回应你的失踪形象   浏览器要求它。

     

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

     

比较一下(有效的图片网址下)   一个Wordpress安装):

     

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

     

到此(一个无效的图像URL下)   Wordpress安装):

     

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

     

请注意自定义404页面   返回的标题......?

     

而且......在404的背景下   页面,$ post对象不存在,   所以$ post-&gt; post_content显然不是   一个字符串。

     

我曾经假设过警告信息   正在浏览器中显示   原始页面加载,这就是我的原因   没有真正考虑过这种情况,   但如果它只是输出到你的   PHP日志,然后它是完全合理的。

     

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

     

任何其他想法,让我知道,但是   这似乎符合我所知道的   关于它到目前为止。

2 个答案:

答案 0 :(得分:2)

  

出现在PHP日志中吗?

是的。

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

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

答案 1 :(得分:1)

我无法相信我没想到 - DUH !!!!你的朋友100%正确。它是firefox加载破坏的图像,wordpress正在服务,因此运行你的代码两次。