你能告诉我你对此的看法,并可能看看你是否可以重新创建它?有两种情况:WordPress的古怪与破碎的图像(第2部分)
情景1(按预期工作)...
的$后> POST_CONTENT变量包含此(凭有效图像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_content变量现在包含:(带有INVALID图像src):
(string) "before [hw] <img src="/path/to/broken_image.gif" /> after"
输出这个(STILL正确)...
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-> post_content(或任何$ post变量,为您的WordPress专家)中存在破损的img src时才会出现这种奇怪现象。
任何机会,你可以重现这一点,并告诉我你的想法?我是PHP的新手,但我很确定发生了一些事情,这超出了我的理解。 :)
编辑:
我正要开始检查我的本地开发环境,但是一个朋友写信给我:
看着您的文章后,我想我 可以有想法是怎么回事。
我原以为你在谈论正在显示在浏览器 当你 加载有问题的网页,但您 后表示您所看到的PHP日志中 警告消息警告消息 改为 。是否只有出现在 的PHP日志中? YES
如果真是这样,那么考虑这个 解释....
在你的身体后 包含一个标签为有效 图像的话,那么你的代码正在运行 一次按预期生成页面。 浏览器看到渲染的页面,然后尝试加载图像 。 服务器直接找到图像并将其直接放置在 之上 - 这里没有什么意外。
在后机身 包含一个标签为无效 图像的话,那么你的代码正在运行 一旦生成页面,就像 之前。然后浏览器使得一个单独的HTTP连接 尝试加载图像 。通常情况下, 只会触发404错误,并且 浏览器会显示损坏的图像, 结尾。然而,如果破 图像URL是您 的WordPress安装目录下的东西,那么WordPress的 覆盖默认的Web服务器404 行为和菜肴了一个奇特的“404 未找到”页面,而不是网络 服务器的默认404页。这里是 踢球者 - WordPress的花哨404页 包括相同的页眉和页脚作为其所显示的所有其他页面 。所以 如果你有这个代码在 的头部,它会再次被 调用404页面,网页服务器发送 来响应浏览器请求的 浏览器丢失的图像。
你从来没有真正看到了404页 这种情况下,因为它是在响应中产生一个 要求 ,而不是一个页面请求,所以 浏览器只是对待响应为 不良形象,并展示了断图片 图标,但它实际上是 生成并发送的。
( 下一个有效的图片网址WordPress安装)比较:
http://www.example.com/foo.jpg
本(一 WordPress的安装目录下的图片网址无效):
http://www.example.com/foo.jpg
请注意,自定义404页面包括 返回的标题...?
And ...在404 的页面上,$ post对象不存在, 所以$ post-> post_content显然不是 的一个字符串。
我曾以为,警告消息 正在显示在浏览器上 原来的页面加载,这就是为什么我 没有真正考虑这个情况, 但如果它只是被输出到您的 PHP的日志,那么它非常有意义。
如果是这样的话,那么你就可以 要么忽略了警告,因为它确实 没有什么区别,或者你可以在你的代码的情况下测试 (如 的isset解决方法你提到 之前)。
没有其他的想法,让我知道,但是 似乎以适应我所知道的 它为止。
谢谢你。这是一个非常有趣的练习:-) – Josh 2009-07-22 20:20:35