#php #sql-server #odbc #loading
#php #sql-сервер #odbc #Загрузка
Вопрос:
У нас есть страница, которая в основном статична с несколькими PHP-включениями, каждое из которых извлекает данные из нашей базы данных MSSQL.
Существует очень странная проблема, из-за которой страницы случайным образом перестают отображаться. Проблема носит спорадический характер и не всегда видна. Иногда страницы загружаются правильно, иногда они останавливаются, не дойдя до конца файла.
Рассматриваемая страница, на которой вы можете увидеть проблему, находится в Dev: http://author.www.purdue.edu/discoverypark/climate/ Результат: http://www.purdue.edu/discoverypark/climate/index.php
Мы надеемся, что при повторном обновлении страницы вы сможете увидеть проблему. Проблема существует только на страницах, которые включают вызовы к нашей базе данных, но опять же, большую часть времени страницы загружаются совершенно нормально; только иногда вывод страницы прекращается. Произошел сбой внутри обычного html, а также до и внутри блоков php.
Проблема, похоже, почти усугубляется в производственной среде; единственной разницей между ними было бы подключение источника данных к БД.
Есть ли какие-либо известные проблемы с PHP, ODBC и MSSQL? Очевидно, что это связано с вызовами базы данных, которые являются всеми хранимыми процедурами. Может ли это быть проблемой с источником данных?
Приветствуется любой ввод.
Комментарии:
1. Вы видите какие-либо ошибки в журнале ошибок? Похоже, что должен быть либо код, либо проблема с подключением, прерывающая обработку страницы.
2.
error_reporting
Настройка в php.ini — ваш друг! Установите его на регистрацию всех ошибок, включите ведение журнала (убедитесь, что вы НЕ отображаете ошибки в рабочей среде) и проверьте свои журналы… Если это проблема с PHP, вы увидите, что она появляется в журналах, если нет, вы знаете, что вам придется искать в другом месте.3. Я проверил у администраторов нашего сервера, и ведение журнала ошибок включено, но я не вижу никаких ошибок, связанных с этой проблемой.
4. Вы когда-нибудь находили решение? Потому что у нас сейчас очень похожая проблема.
Ответ №1:
Я постоянно вижу это в «Просмотр источника», когда он умирает:
<div class=»wrap»> <a href=»/research/vpr/»>OVPR</a> <img alt=»>» src=».
Я бы предположил, что ваше кэширование изображений, генерация URL-адресов изображений или обработка изображений, вероятно, где-то нарушены, и это прерывается из-за отсутствия изображения.
Значение alt > ВНУТРИ также не является кошерным. Этого нужно избежать с помощью http://php.net/htmlentities
Это может «работать», но не будет проходить проверку, а страница, которая не проходит проверку, просто сломана.
Различия в подключении к БД, скажем, между localhost в DEV и отдельными блоками в PROD, вероятно, меняют время / частоту проблемы, но почти наверняка являются отвлекающим маневром…
Хотя, если вызов DB для поиска изображения OVPR выполняет die()…
Однако наверняка, если у вас нет 10 строк обработки ошибок при каждом вызове odbc_ * или mssq_ * в коде вашей базы данных, значит, вы сделали это неправильно, и вам нужно это добавить.
PS Должно быть тривиально переключиться с ODBC на mssql_ * или sybase_ * драйвер, или PDO::* и устранить по крайней мере одного возможного конкурента, если ничего из вышеперечисленного не сработает. Однако я еще раз говорю, что база данных на 99% наверняка является отвлекающим маневром, и вы сделали что-то, что станет очевидным, смею сказать глупым, как только вы проследите за этим до реальной причины…
Ответ №2:
Убедитесь, что нигде в коде нет символа die или exit
Редактировать — Если есть, удалите это и просмотрите ошибку
Ответ №3:
Вы проверили обычные методы отладки? Как выглядит код — в частности, обработка ошибок при ваших вызовах ODBC? У вас нет возврата верхнего уровня или неуместного die (), не так ли?
Когда я вижу страницу в состоянии «не рендеринг», кажется, что это потому, что страница явно неполная, и это XHTML.
Я вижу, что здесь она обычно умирает —
<a href="/research/vpr/">OVPR</a>
Ответ №4:
Попробуйте повысить уровень отчетов об ошибках, чтобы вы могли видеть любые предупреждения, ошибки, информацию, которые могут быть подавлены на уровне сервера.
http://php.net/manual/en/function.error-reporting.php
// Report all PHP errors
<?php error_reporting(-1); ?>