您能否告诉我您对此的看法,并可能看看您是否可以重新创建它?有两种情况:
情景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解决方法 前)。
任何其他想法,让我知道,但是 这似乎符合我所知道的 关于它到目前为止。
答案 0 :(得分:2)
仅出现在PHP日志中吗?
是的。
行。然后,对丢失图像的请求运行的自定义404处理程序几乎肯定是导致警告的原因。由于警告没有在任何地方显示,因此可以安全地忽略,或者如果您不希望它混乱您的日志,则可以使用您的isset测试。无论如何,这真的是一个非问题,但至少现在你知道它来自哪里,并不是一个真正问题的迹象。
我认为(DEV)环境根本不应该与它有任何关系。它在具有真实DNS条目设置的实时服务器上的行为方式相同。
答案 1 :(得分:1)
我无法相信我没想到 - DUH !!!!你的朋友100%正确。它是firefox加载破坏的图像,wordpress正在服务,因此运行你的代码两次。