Kırık görüntüleri ile WordPress gariplik (part 2)

2 Cevap php

Bana bu senin görüşünü anlatmak, ve muhtemelen onu yeniden görmek miyim? İKİ senaryo vardır:

SCENARIO 1 (works as intended)...

$ Post-> post_content değişken (Geçerli bir görüntü src ile) bu içerir:

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

Bu kod tema header.php üstüne yerleştirilen ...

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: }

Çıkışlar bu (correctly)...

bool(true)
before Hello World! <img src="/path/to/valid_image.gif" /> after

Bu grubu PHP günlüğüne (correctly)...

[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

SCENARIO 2 (where the problem occurs)...

$ Post-> post_content değişken şimdi içerir: (Bir GEÇERSİZ görüntü src ile):

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

Çıkışlar bu (STILL correctly)...

bool(true)
before Hello World! <img src="/path/to/broken_image.gif" /> after

Bu grubu PHP günlüğüne (THIS IS THE PROBLEM)...

[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() function KEZ kendisini çalışıyor gibi görünüyor, ama sadece $post->post_content kırık bir görüntüsünü içerir.

Bilginize, Firefox ile vurarak web sayfası kaynağını yeniden olabilir CTRL-R. Kaynağını yeniden zaman, sorun yok. Tarayıcı sekmesinde (ya da herhangi bir tarayıcıda) de web sayfası yeniden Ancak, yukarıda gösterilen uyarı alıyorum.

Ben değişken $ post-> post_content bir kırık img src olduğunda gariplik sadece (ya $ sonrası değişkenlerin herhangi WordPress uzmanları için) oluşur doğruladı.

Herhangi bir şans bu yeniden ve ne düşündüğünüzü bana söyleyebilir? Ben PHP için yeni değilim, ama ben yol benim bilgi ötesinde bir şey olduğu oluyor eminim. :)

EDIT:

Ben benim yerel dev ortamı kontrol başlamak üzereydi, ama bir arkadaşım bana yazdı:

After looking at your post, I think I may have an idea what's going on.

I had assumed that the warning message you were talking about was being displayed in the browser when you loaded the page in question, but your post indicates that you're seeing the warning message in the PHP log instead. Is it only appearing in the PHP log? YES

If that's so, then consider this explanation....

In the case where you the post body contains an tag to a valid image, then your code is being run once to generate the page as expected. The browser sees the rendered page and then attempts to load the image. The server finds the image and dishes it up directly - no surprises here.

In the case where the post body contains an tag to an invalid image, then your code is being run once to generate the page, just as before. Then the browser makes a separate HTTP connection to attempt to load the image. Normally, it would just trigger a 404 error and the browser would display a broken image, end of story. However, if the broken image URL is to something under your Wordpress installation, then Wordpress overrides the default web server 404 behavior and dishes up a fancy "404 Not Found" page instead of the web server's default 404 page. Here's the kicker -- Wordpress's fancy 404 page includes the same header and footer as all the other pages it displays. So if you have this code at the top of your header, it'll get called again by the 404 page that the web server sends in response to the missing image your browser requested from it.

You never actually see the 404 page in this case, because it's being generated in response to an request, not a page request, so the browser just treats the response as a bad image and shows the broken image icon, but it is actually being generated and sent.

Compare this (a valid image URL under a Wordpress installation):

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

to this (an invalid image URL under a Wordpress installation):

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

Note the custom 404 page including header that gets returned...?

And... in the context of the 404 page, the $post object doesn't exist, so $post->post_content obviously isn't a string.

I had assumed that the warning message was being displayed in the browser on the original page load, which is why I didn't really consider this situation, but if it's just being output to your PHP log, then it makes perfect sense.

And if that is the case, then you can either ignore the warning as it really makes no difference, or you can test for that situation in your code (like the isset workaround you mentioned before).

Any other thoughts, let me know, but that seems to fit with what I know about it so far.

2 Cevap

O only PHP günlüğünde görünmesini mi?

Yes.

Tamam. Sonra eksik görüntü için istek üzerine yürütülüyor özel 404 işleyici uyarı neden olan neredeyse kesinlikle. Uyarı yerde görüntülenen değil bu yana, görmezden güvenli, ya da bunu sizin günlük yığılan istemiyorsanız size isset testi kullanabilirsiniz. Her halükarda, bu gerçekten olmayan bir konu, ama en azından artık o gelen ve bazı gerçek bir problemin işareti olmadığını nerede biliyoruz.

I (DEV) ortamı hiç onunla ilgisi olması gerektiğini sanmıyorum. Bu kurmak gerçek bir DNS girişi ile canlı bir sunucu üzerinde aynı şekilde davranır istiyorum.

Ben de bu şekilde düşünmemiştim inanamıyorum - DUH!! Arkadaşınız% 100 doğru. Bu wordpress kez kodunuzu çalıştıran böylece hizmet vermektedir kırık görüntü, yükleme firefox bulunuyor.