linux — PHP-функции, связанные со статистикой файлов / каталогов, не работают на смонтированном CIFS

Я использую PHP на 32-битном Linux для обхода смонтированной удаленной файловой системы (CIFS), и я заметил, что функции Unix, связанные со статистикой, не работают (stat(), filemtime(), is_dir(), и так далее).

Это отправная точка:

$ sudo mkdir /mnt/cifs-mount-point
$ sudo mount -t cifs -o user="user",password="password" //example.local/share /mnt/cifs-mount-point

И вот некоторые тесты:

<?php

stat('/mnt/cifs-mount-point/directory');   // This will rise a Warning and return false
is_dir('/mnt/cifs-mount-point/directory'); // Will return false

Я проверил то же самое в Bash, и он работает как ожидалось:

$ stat /mnt/cifs-mount-point
$ if [ -d /mnt/cifs-mount-point ] ; then echo "is dir"; fi

1

Решение

stat() может не работать на смонтированных CIFS ‘в 32-битных системах, если вы не укажете опцию noserverino при монтаже. Например:

mount -t cifs -o user="user",password="password",noserverino //example.local/share /mnt/cifs-mount-point

Другие функции, основанные на stat() данные, такие как функции времени файла и is_dir() затронуты так же.

Это происходит потому, что если вы не укажете опцию noserverino удаленный индекс может быть 64-битным, и, следовательно, локальная система не может его обработать.

1

Другие решения

Других решений пока нет …