Страница PHP перестает загружаться на полпути, используя ODBC, datasource, MSSQL

#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); ?>