У меня PHP работает на веб-сервере IIS.
Сервер получает доступ к некоторым файлам, хранящимся на другом файловом сервере, однако с ограничениями доступа к файлам на уровне пользователя и возвращает содержимое обратно клиенту через Интернет. интерфейс.
По причине устаревших причин до сих пор в системе использовался PHP 5.6.31.
Теперь я обновился до PHP 8.3.9, но столкнулся с проблемой: служба PHP больше не может получить доступ к возвращаемым файлам.
В PHP8 file_exists($filename) возвращает false, а в PHP5 точно такой же код возвращает true.Это имя файла имеет формат \\xxx.xxx.xxx.xxx\sharename\filename.ext, где xxx — это IP-адрес.
Переключение назад старый PHP восстанавливает доступ к файлу.
Я предполагаю, что я что-то не так сделал в файле php.ini, но не могу это понять. Я сравнил два ini-файла, но не нашел ничего особенного.
Я установил fastcgi.impersonate = 1.
Я контролирую версию PHP через менеджер PHP в диспетчере IIS.
Этот код:
$file = trim('//FILE01/DOC');
echo "
$file:" . (file_exists($file)?'Exists':'Does not exist');
$file = trim('\\\\FILE01\\DOC');
echo "
$file:" . (file_exists($file)?'Exists':'Does not exist');
$file = trim('\\\\10.249.70.8\\DOC');
echo "
$file:" . (file_exists($file)?'Exists':'Does not exist');
$file = trim('//10.249.70.8/DOC');
echo "
$file:" . (file_exists($file)?'Exists':'Does not exist');
$file = trim('C:\PHP');
echo "
$file:" . (file_exists($file)?'Exists':'Does not exist');
$file = trim('\\PHP');
echo "
$file:" . (file_exists($file)?'Exists':'Does not exist');
С PHP 5.6 я получаю такой результат:
//FILE01/DOC:Exists
\\FILE01\DOC:Exists
\\10.249.70.8\DOC:Exists
//10.249.70.8/DOC:Exists
C:\PHP:Exists
\PHP:Exists
PHP8.3 включен и никаких других изменений:
//FILE01/DOC:Does not exist
\\FILE01\DOC:Does not exist
\\10.249.70.8\DOC:Does not exist
//10.249.70.8/DOC:Does not exist
C:\PHP:Exists
\PHP:Exists
Подробнее здесь: https://stackoverflow.com/questions/787 ... on-context