Странная проблема php opendir / glob

#php #glob #opendir

#php #глоб #opendir

Вопрос:

У меня странная проблема с opendir (та же проблема с glob):

 $dir = "Y:\\foldername\";
if (is_dir($dir)) {
    if ($dh = opendir($dir)) {
        while (($file = readdir($dh)) !== false) {
            echo "filename: $filen";
        }
        closedir($dh);
    }
}
  

Y: — это сетевая папка с аутентификацией.
Имя моего веб-сервера — testweb, и этот скрипт вызывается tree.php .
К сожалению, моя среда основана на Windows (php 5.2.5 ISAPI, windows 2003 server).

Когда я открываю скрипт с того же компьютера, на котором запущен IIS (http://testweb/tree.php ) все работает нормально, но если я подключусь к тому же адресу с другого компьютера (например, с моего ноутбука) Я получаю следующую ошибку:

Предупреждение: opendir() .. не удалось открыть каталог. Нет ошибки В D:webtree.php

Кажется, проблема с разрешениями, но почему она работает с «локального компьютера», а не извне? Как я могу это исправить?

Спасибо за вашу помощь!!

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

1. Не используйте обратную косую черту для путей в PHP — это автоматически переведет вас в Windows. Просто используйте //server01/foldername вместо этого и избавьте себя от синдрома наклонной зубочистки

Ответ №1:

проверьте свои права доступа к этому каталогу.. вы можете сделать это с помощью функции is_readable

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

1. та же проблема … var_dump(is_readable($path)) возвращает значение true, если я открываю браузер с компьютера IIS.. но возвращает false извне ..!!

2. вы сказали, что «Y: — это сетевая папка с аутентификацией».. итак, должен ли удаленный компьютер аутентифицироваться, чтобы иметь возможность читать?

3. Нет .. Это общий ресурс, сопоставленный в Windows с определенной учетной записью домена.. Это странно, потому что с точки зрения клиента он должен быть прозрачным.. Браузер связывается с веб-сервером, и php считывает папку (и Windows должна открыть ее с соответствующим именем авторизации). Если я открою браузер на том же компьютере, что и веб-сервер, или нет, должно быть то же самое .. должен.. но, похоже, это не так!

Ответ №2:

У меня была эта ошибка раньше, даже когда я изменил разрешение и вошел в систему как администратор, ошибка сохранялась.

Я решил это, указав абсолютный путь для функции opendir(), то есть вместо написания «вложенной папки» я написал «C:wampwwwmyprojectsubfolder » и это решило мою проблему !

Спасибо