#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 » и это решило мою проблему !
Спасибо