你能告訴我你對此的看法,並可能看看你是否可以重新創建它?有兩種情況: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