file_exists() и file_get_contents() не работают с файлом, который находится на смонтированном сетевом диске

Довольно понятно. Например, файл (AB.txt) находится как на моем диске C, так и на моем (NFS) смонтированном диске W. Кстати, операционная система Windows 7 x64.

function fileExists($path){
     return (@fopen($path,"r")==true);
 }

var_dump(fileExists('C:\AB.txt'));
var_dump(fileExists('W:\AB.txt'));
var_dump(file_exists('C:\AB.txt'));
var_dump(file_exists('W:\AB.txt'));

Дает

boolean true
dir='ltr'>boolean false


boolean true
dir='ltr'>boolean false

Я не могу найти объяснение этому поведению в вики php или при поиске с помощью Google.


person Boelensman1    schedule 07.10.2012    source источник
comment
Что такое fileExists? Кроме того, вы пробовали fopen?   -  person Eric    schedule 07.10.2012
comment
вы имеете в виду file_exists() или созданную вами пользовательскую функцию?   -  person Ibu    schedule 07.10.2012
comment
Извините, это на самом деле пользовательская функция, добавил свой код. Просто забыл скопировать.   -  person Boelensman1    schedule 07.10.2012
comment
зачем воссоздавать внутреннюю функцию (file_exists())? Это будет медленнее   -  person    schedule 07.10.2012
comment
Эта функция возвращает FALSE для файлов, недоступных из-за ограничений безопасного режима, и для символических ссылок, указывающих на несуществующие файлы. Также проверьте настройки разрешений   -  person krg    schedule 07.10.2012


Ответы (1)


Если вы пытаетесь получить доступ к общему сетевому ресурсу Windows, вам необходимо настроить веб-сервер с достаточными разрешениями, например:

$file = fopen("\\siscomx17\c\websapp.log",'r');

Вы получите сообщение об ошибке, сообщающее, что имя пути не существует, это будет связано с тем, что Apache или IIS работают как LocalSystem, поэтому вам придется войти в Службы и настроить Apache на «Открыть сеанс как». Создайте нового пользователя с достаточными разрешениями, а также убедитесь, что целевая общая папка имеет соответствующие разрешения.

person Khôi    schedule 07.10.2012
comment
Как видно из этого изображения: updo.nl/file/1798782d.png. Разрешение на диске 777. Вы это имели в виду? - person Boelensman1; 07.10.2012
comment
Частично. Но вы не можете получить доступ к сетевым ресурсам с именами дисков, поскольку веб-сервер (как и все серверы) не видит подключенные сетевые диски. Я бы предложил попробовать с FDQN - person Khôi; 07.10.2012
comment
Чтобы уточнить: буквы дисков (например, `W:`) предназначены для каждого пользователя. Другие пользователи в системе, такие как веб-сервер, видят другой набор букв дисков, который не включает ваши подключенные серверы. - person ; 08.10.2012