Intereting Posts
Как получить идентификатор последней вставленной строки при использовании PDO в PHP? Избавьтесь от Index.php в URL-адресах CodeIgniter Zend Framework 2 Лучший способ реализации сеансов Пустое отклика на запрос cURL PHP как создать отчет между двумя датами, используя datepicker, ajax, php, mysql.? Получение домена, который вызывает PHP-файл на вашем сервере через AJAX Неправильный относительный путь Zend Route Как переписать с .htaccess Предупреждение: fgetcsv () ожидает, что параметр 1 будет ресурсом, boolean задан в C: Ограничить тип и размер файла в загрузке формы PHP Как загрузить и сохранить файлы с желаемым именем Вызывает ли вызов ob_end_clean () один раз в верхней части скрипта, гарантировать, что ob_flush () никогда не требуется? Необработанный символ в начале ответа Вставка значения Integer в mysql int с помощью INSERT SQLSTATE Доступ запрещен для пользователя 'root' @ 'localhost' (с использованием пароля: YES) symfony2

Нечеткость WordPress со сломанными изображениями (часть 2)

Можете ли вы рассказать мне свое мнение об этом и, возможно, посмотреть, сможете ли вы его воссоздать? Существует два сценария:

СКЭНАРИО 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-> 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 содержит сломанное изображение.

FYI, с помощью Firefox вы можете перезагрузить источник веб-страницы, нажав CTRL-R . При перезагрузке источника никаких проблем. Однако при перезагрузке веб-страницы на вкладке браузера (или в любом браузере) я получаю предупреждение, показанное выше.

Я подтвердил, что странность возникает только тогда, когда в переменной $ post-> post_content (или любой из $ post-переменных, для вас, Гуру WordPress) есть некорректная img src.

Есть ли шанс, что вы можете воспроизвести это и рассказать мне, что вы думаете? Я новичок в PHP, но я почти уверен, что что-то происходит, это далеко не мое знание. 🙂

РЕДАКТИРОВАТЬ:

Я собирался начать проверку локальной среды, но друг написал мне:

Посмотрев на ваш пост, я думаю, у меня может возникнуть идея, что происходит.

Я предположил, что предупреждающее сообщение, о котором вы говорили, отображалось в браузере, когда вы загрузили эту страницу, но ваше сообщение указывает, что вместо этого вы видите предупреждающее сообщение в журнале PHP. Является ли это только в журнале PHP? ДА

Если это так, то рассмотрите это объяснение ….

В случае, когда тело сообщения содержит тег к допустимому изображению, ваш код запускается один раз для генерации страницы, как ожидалось. Браузер видит отображаемую страницу, а затем пытается загрузить изображение. Сервер находит изображение и готовит его прямо – никаких сюрпризов здесь.

В случае, когда тело сообщения содержит тег к недопустимому изображению, ваш код запускается один раз для создания страницы, как и раньше. Затем браузер делает отдельное HTTP-соединение для попытки загрузки изображения. Обычно это просто вызовет ошибку 404, и браузер отобразит сломанное изображение, конец истории. Однако, если URL-адрес сломанного изображения – это что-то под вашей установкой WordPress, то WordPress переопределяет поведение по умолчанию на веб-сервере по умолчанию и тарелки на странице «404 Not Found» вместо страницы 404 веб-сервера по умолчанию. Вот кикер. На странице 404 страницы WordPress есть тот же заголовок и нижний колонтитул, что и все остальные страницы, которые он отображает. Поэтому, если у вас есть этот код в верхней части заголовка, он снова будет вызван страницей 404, которую веб-сервер отправит в ответ на недостающее изображение, которое ваш браузер запросил у него.

В этом случае вы никогда не видите страницу 404, потому что она генерируется в ответ на запрос, а не на запрос страницы, поэтому браузер просто рассматривает ответ как плохое изображение и показывает значок сломанного изображения, но он фактически генерируется и послал.

Сравните это (допустимый URL-адрес изображения при установке WordPress):

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

к этому (недопустимый URL-адрес изображения при установке WordPress):

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

Обратите внимание на пользовательскую страницу 404, включая заголовок, который возвращается …?

И … в контексте страницы 404 объект $ post не существует, поэтому $ post-> post_content явно не является строкой.

Я предположил, что предупреждающее сообщение отображается в браузере при загрузке исходной страницы, поэтому я действительно не рассматривал эту ситуацию, но если он просто выводится на ваш журнал PHP, тогда это имеет смысл.

И если это так, то вы можете игнорировать предупреждение, так как оно действительно не имеет значения, или вы можете проверить эту ситуацию в своем коде (например, об обходном пути isset, о котором вы говорили ранее).

Любые другие мысли, дайте мне знать, но это похоже на то, что я знаю об этом до сих пор.

Является ли это только в журнале PHP?

Да.

ОК. Тогда пользовательский обработчик 404, выполняющийся при запросе на недостающее изображение, почти наверняка вызывает предупреждение. Поскольку предупреждение не отображается нигде, безопасно игнорировать, или вы можете использовать свой тест isset, если вы не хотите, чтобы он загромождал ваш журнал. В любом случае, это действительно не проблема, но по крайней мере теперь вы знаете, откуда это происходит, и что это не является признаком какой-то реальной проблемы.

Я не думаю, что среда (DEV) должна иметь к этому какое-то отношение. Он будет вести себя одинаково на реальном сервере с реальной настройкой DNS.

Не могу поверить, что я об этом не думал – DUH !!!! Ваш друг на 100% прав. Это firefox, загружающий сломанное изображение, которое выполняет WordPress, и дважды запускает ваш код.