Это сводит нас с ума.
У нас есть веб-сервер IIS, на котором работает php с использованием wincache.
В iis у нас есть корень документа и вторая часть веб-сайта, отображенная с использованием виртуального каталога.
Во-первых, вот ошибка:
PHP Fatal error: session_start(): Failed to initialize storage module: wincache (path: C:\Windows\Temp)
Мы получили ошибку для дублирования в простом однострочном php-файле:
<?php
session_start();
?>
Вот кикер
Этот файл НЕ выдает ошибок, если находится в любой папке root. НО после размещения в виртуальном каталоге он будет работать около 5 минут, а затем потерпит неудачу. Он будет продолжать работать до тех пор, пока мы не перезапустим IIS.
У нас также есть 2 одинаково настроенных сервера. Он работает без проблем на 2 серверах.
Не совсем тот ответ, который я искал. Но мы просто потратили пару часов, переключаясь на Apache. Ошибка ушла, сервер быстрее, все хорошо.
Похоже, идентификатор пула приложений IIS, под которым работает PHP, не имеет разрешения на запись в C: \ Windows \ Temp. Вы должны проверить списки ACL для папки, чтобы узнать, доступна ли она для записи по идентификатору пула приложений.
c:\Windows>icacls Temp
Temp NT AUTHORITY\SYSTEM:(OI)(CI)(S,RD)
BUILTIN\IIS_IUSRS:(OI)(CI)(S,RD)
BUILTIN\Users:(CI)(S,WD,AD,X)
BUILTIN\Administrators:(F)
BUILTIN\Administrators:(OI)(CI)(IO)(F)
NT AUTHORITY\SYSTEM:(F)
NT AUTHORITY\SYSTEM:(OI)(CI)(IO)(F)
CREATOR OWNER:(OI)(CI)(IO)(F)
Если вы не видите BUILTIN \ IIS_IUSRS в ACL, то идентификатор пула приложений по умолчанию не может выполнить запись в этот каталог. Если вы используете пользовательский идентификатор пользователя для пула приложений, вам нужно убедиться, что он находится в ACL для папки.