Как стать автором
Обновить

Комментарии 27

Внезапно и в тему, я лично очень рад этой новости, спасибо.
Проблема с IIS6? Вы меня пугаете мне только сегодня пришлось проект перенести с IIS7 на IIS6. Насколько серьезные проблемы со стабильностью и есть ли может какие решения? А то это администрация города, они меня загрызут если этот драйвер будет падать. А пока стояло на 7 ни разу не наблюдал ни каких происшествий с этим драйвером.
Да, были проблемы со стабильностью под IIS6. PHP падал несколько раз в минуту в 500 ошибку в произвольных местах, закономерность я не выявил. Тестировал на двух серверах под Windows server 2003 и IIE6.

Решений я к сожалению не знаю. На живом сервере у нас IIS7.
Мне пока везет не падает у меня на IIS6 но как говорится еще не вечер :)
А зачем переносить проект с IIS7 на IIS6?
Я вот тоже такой вопрос задавал :) но тестовый сервер был на 7 а боевой на 6
:) Боевой сервер. Это прекрасно!
При возникновении блокировки (deadlock), у нового драйвера нет удобного механизма обхода такой ситуации;
Обходное решение — использовать PHP функцию sleep() или usleep() и, при возникновении блокировки и через пару секунд попробовать выполнить запрос снова.

можно пример :)
Примерно так:
<?php
private function query($query) {
  ...
  ...
  $qlink = sqlsrv_query($this->connectionlink, $query);
  if (!$qlink) {
    $errNumber = $this->getErrorCode(); // получаем номер ошибки
    // deadlock
    if( $errNumber == 1205
     && ( ($this->deadlockRetryCount && $this->deadlockRetryCount >= $this->deadlockRepeatCount+1) || $this->deadlockRetryCount == -1)) {
      $this->deadlockRepeatCount++;  // число повторений
      if($this->deadlock_retry_timeout) sleep($this->deadlock_retry_timeout); // ждем
      return $this->query($query); // пробуем еще
    } else {
      // тут вызываем обработчик ошибок
    }
  }
  return 0;
}

private function getErrorCode() {
  $errNumber = 0;
  $errors = sqlsrv_errors();
  if(is_array($errors)) {
    $lastError = end(array_keys($errors)); // берем последнюю ошибку
    $err = (int)$errors[$lastError]['code'];
  }
  return $errNumber;
}
?>
Ещё благодаря усилиями MS этот драйвер и в adodb добавили.
Вы имеете в виду php библиотеку? мне никогда не было понятно, что может сейчас оправдать ее использование? ну кроме поддержки старых проектов?
Мы используем в своем проекте почти уже год. Все работает стабильно, мелкие проблемы обходятся. За статью спасибо, хоть и так это знал :)
Мелкософт в своем стиле…

Полное отсутствие поддержки под *nix системами
И как давно под *nix системами начали использоваться dll? Нет, я правда не в курсе.
а про SO фалы что-нить слышали…
Право же, такие линуксоиды меня восхищают.

Сначала твердим что:
MS — дерьмо, MS SQL — дерьмо, Linux — супер.

Потом хотим получить в супер Linux'e поддержку дерьма дерьмом? Вам его так сильно не хватает?
Сколько вам килограмм выслать? :)
все очень просто: «умный» заказчик хочет чтобы БД было именно на MS SQL + БД должно быть на отдельном сервере.
Вопрос: зачем мне для LAMP виндовый сервер? разве нельзя выпустить so под *nix?

Ответ: MS «отличные ребята», поэтому максимально делают привязку к своему «хорошему» софту (когда у самих почтовый сервер на *nix, по крайней мерее год назад был так точно)
Либо вы хреновый специалист, либо заказчик действительно умный (без кавычек). Впрочем возможны сразу оба варианта.

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

Убедить заказчика в необходимости именно LAMP вы смогли, но теперь мучаетесь и страдаете проклиная MS, хотя виноваты вы.
ладно окончим холивар…
лично мне мнение: технологии MS — зло
А завернуть это также под freetds реально?

А то ситуация «приложение под *nix, БД — MS SQL» таки иногда встречается.
Я думаю для этих целей лучше использовать php_mssql, он хорошо работает по никсами с freetds.

А вся соль нового драйвера как раз в использовании Native SQL Client, его Microsoft пока не портировали под никсы, да и врятли когда-нибудь это сделают :)
К сожалению при использовании этой библиотеки сталкиваюсь с ошибкой:
[Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию

[message] => The SQL Server Driver for PHP requires the SQL Server 2008 Native Client ODBC Driver (SP1 or later) to communicate with SQL Server. That ODBC Driver is not currently installed. Accessing the following URL will download the SQL Server 2008 Native Client ODBC driver for x86: go.microsoft.com/fwlink/?LinkId=137108

Из-за этого пока приходится отказаться от значительного прироста скорости версии 5.3.

Кто-нибудь сталкивался?
А у Ваc Native SQL Client установлен на сервере?

Если да, то посмотрите включены ли необходимые протоколы в SQL Server Configuration Manager -> SQL Native Client Configuration.
Ммм. а разве коннект должен идти через ODBC?
Да, разумеется. Одно но: веб с php и mssql на разных серверах (Windows). Native SQL Client на веб-сервере установлен, все 4 протокола активны.
Уверен, что необходимо что-то включить, но не знаю что.
Сделал первым делом, не помогло.
Попробую на днях поэкспериментировать с другой системой.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.