Нужно получить файлы из сетевой папки через php (web-сервер Apache+php на Windows2008 R2 Enterprise)
На самом сервере я могу подключить сетевую папку, все данные мне в ней доступны, но когда пытаюсь тоже самое сделать через php, в ответ получаю
false.
Пробовала подключаться следующим образом:
$directory_path="\\192.168.1.5\my_dir\";
//$directory_path="//192.168.1.5my_dir";
if(!is_dir($directory_path))
die($directory_path.' is not direction!');
if(!file_exists($directory_path.'text.txt'))
die($directory_path.'text.txt not found!');
Программа валится еще на проверке директории. Пробовала прописывать разные пути. На сам каталог дала пользователям полные права, Apache запускаю под администратором, в реестре пробовала прописывать переменную HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesLanmanServerParametersRestrictNullSessAccess = 0 по совету отсюда.
Пожалуйста, подскажите, какие еще настройки нужно сделать, чтобы эта сетевая папка стала доступной?
P.S. Попробовала создать ссылку по рекомендации.
mklink /D MySymLink "\serverpathtofolder"
PHP видит каталог MySymLink но на все что внутри него выводит false.
within PHP (XAMPP) installed on a Windows XP Computer Im trying to read a dir which exists on a local network server. Im using is_dir()
to check whether it is a dir that I can read.
In Windows Explorer I type \serverdir
and that dir is being shown.
When I map a network drive a can access it with z:dir
as well.
In PHP I have that script:
<?php if( is_dir($dir){ echo 'success' } ) ?>
For $dir
I tried:
/server/dir
//server/dir
serverdir
\serverdir
\\server\dir
and
z:dir
z:\dir
z:/dir
z://dir
But I never get success?
Any idea?
thx
Gumbo
635k107 gold badges772 silver badges839 bronze badges
asked Jul 20, 2009 at 14:11
I solved it by changing some stuff in the registry of the server as explained in the last answer of this discussion:
http://bugs.php.net/bug.php?id=25805
Thanks to VolkerK and Gumbo anyway!
I love stackoverflow and their great people who help you so incredibly fast!!
EDIT (taken from php.net):
The service has limited access to network resources, such as shares
and pipes, because it has no credentials and must connect using a null
session. The following registry key contains the NullSessionPipes and
NullSessionShares values, which are used to specify the pipes and
shares to which null sessions may connect:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesLanmanServerParameters
Alternatively, you could add the REG_DWORD value
RestrictNullSessAccess to the key and set it to 0 to allow all null
sessions to access all pipes and shares created on that machine.`
add RestrictNullSessAccess=0 to your registery.
answered Jul 20, 2009 at 20:10
MaxMax
1,1043 gold badges15 silver badges21 bronze badges
3
You probably let xampp install apache as service and run the php scripts trough this apache. And the apache service (running as localsystem) is not allowed to access the network the way your user account is.
A service that runs in the context of the LocalSystem account inherits the security context of the SCM. The user SID is created from the SECURITY_LOCAL_SYSTEM_RID value. The account is not associated with any logged-on user account.
This has several implications:
…
* The service presents the computer’s credentials to remote servers.
…
You can test this by starting the apache as console application (apache_start.bat in the xampp directory should do that) and run the script again. You can use both forward and backward slashes in the unc path. I’d suggest using //server/share since php doesn’t care about / in string literals.
<?php
$uncpath = '//server/dir';
$dh = opendir($uncpath);
echo "<pre>n";
var_dump($dh, error_get_last());
echo "n</pre>";
answered Jul 20, 2009 at 15:15
VolkerKVolkerK
94.8k20 gold badges162 silver badges226 bronze badges
Try the file:
URI scheme:
file://server/dir
file:///Z:/dir
The begin is always file://
. The next path segment is the server. If it’s on your local machine, leave it blank (see second example). See also File URIs in Windows.
answered Jul 20, 2009 at 14:15
GumboGumbo
635k107 gold badges772 silver badges839 bronze badges
2
Yes, I know this is an old post, but I still found it, and if anyone else does…
On Windows, with newer servers, verify the SMB is installed and enabled on the target machine.
answered Jan 17, 2020 at 15:54
JamsJams
113 bronze badges
within PHP (XAMPP) installed on a Windows XP Computer Im trying to read a dir which exists on a local network server. Im using is_dir()
to check whether it is a dir that I can read.
In Windows Explorer I type \serverdir
and that dir is being shown.
When I map a network drive a can access it with z:dir
as well.
In PHP I have that script:
<?php if( is_dir($dir){ echo 'success' } ) ?>
For $dir
I tried:
/server/dir
//server/dir
serverdir
\serverdir
\\server\dir
and
z:dir
z:\dir
z:/dir
z://dir
But I never get success?
Any idea?
thx
Gumbo
635k107 gold badges772 silver badges839 bronze badges
asked Jul 20, 2009 at 14:11
I solved it by changing some stuff in the registry of the server as explained in the last answer of this discussion:
http://bugs.php.net/bug.php?id=25805
Thanks to VolkerK and Gumbo anyway!
I love stackoverflow and their great people who help you so incredibly fast!!
EDIT (taken from php.net):
The service has limited access to network resources, such as shares
and pipes, because it has no credentials and must connect using a null
session. The following registry key contains the NullSessionPipes and
NullSessionShares values, which are used to specify the pipes and
shares to which null sessions may connect:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesLanmanServerParameters
Alternatively, you could add the REG_DWORD value
RestrictNullSessAccess to the key and set it to 0 to allow all null
sessions to access all pipes and shares created on that machine.`
add RestrictNullSessAccess=0 to your registery.
answered Jul 20, 2009 at 20:10
MaxMax
1,1043 gold badges15 silver badges21 bronze badges
3
You probably let xampp install apache as service and run the php scripts trough this apache. And the apache service (running as localsystem) is not allowed to access the network the way your user account is.
A service that runs in the context of the LocalSystem account inherits the security context of the SCM. The user SID is created from the SECURITY_LOCAL_SYSTEM_RID value. The account is not associated with any logged-on user account.
This has several implications:
…
* The service presents the computer’s credentials to remote servers.
…
You can test this by starting the apache as console application (apache_start.bat in the xampp directory should do that) and run the script again. You can use both forward and backward slashes in the unc path. I’d suggest using //server/share since php doesn’t care about / in string literals.
<?php
$uncpath = '//server/dir';
$dh = opendir($uncpath);
echo "<pre>n";
var_dump($dh, error_get_last());
echo "n</pre>";
answered Jul 20, 2009 at 15:15
VolkerKVolkerK
94.8k20 gold badges162 silver badges226 bronze badges
Try the file:
URI scheme:
file://server/dir
file:///Z:/dir
The begin is always file://
. The next path segment is the server. If it’s on your local machine, leave it blank (see second example). See also File URIs in Windows.
answered Jul 20, 2009 at 14:15
GumboGumbo
635k107 gold badges772 silver badges839 bronze badges
2
Yes, I know this is an old post, but I still found it, and if anyone else does…
On Windows, with newer servers, verify the SMB is installed and enabled on the target machine.
answered Jan 17, 2020 at 15:54
JamsJams
113 bronze badges
Firework 102 / 93 / 36 Регистрация: 01.04.2013 Сообщений: 649 |
||||
1 |
||||
Доступ к сетевой папке27.11.2013, 10:09. Показов 9103. Ответов 16 Метки нет (Все метки)
Когда файл лежит у меня, я его читаю хорошо. Но вот мне нужно считать файл в сетевой папке.
Но ничего не выходит.
0 |
127 / 127 / 25 Регистрация: 20.11.2009 Сообщений: 498 |
|
27.11.2013, 10:32 |
2 |
Скорее всего придется пользоваться curl(); чтобы передавать логин и пароль для доступа
0 |
102 / 93 / 36 Регистрация: 01.04.2013 Сообщений: 649 |
|
27.11.2013, 11:35 [ТС] |
3 |
Я об этом тоже думал. Только вот как? С курлом мало знаком. Нужен пример.
0 |
Vovan-VE 13207 / 6595 / 1041 Регистрация: 10.01.2008 Сообщений: 15,069 |
||||||||
27.11.2013, 15:38 |
4 |
|||||||
0 |
Firework 102 / 93 / 36 Регистрация: 01.04.2013 Сообщений: 649 |
||||
28.11.2013, 15:02 [ТС] |
5 |
|||
Ничего не изменилось…
0 |
13207 / 6595 / 1041 Регистрация: 10.01.2008 Сообщений: 15,069 |
|
28.11.2013, 15:09 |
6 |
Ничего не изменилось…
Я сделал автоматический вход. Скрипт выполняется в какой ОС?
0 |
102 / 93 / 36 Регистрация: 01.04.2013 Сообщений: 649 |
|
28.11.2013, 15:12 [ТС] |
7 |
Win7.
0 |
13207 / 6595 / 1041 Регистрация: 10.01.2008 Сообщений: 15,069 |
|
28.11.2013, 15:53 |
8 |
Win7. На всякий случай продолжу.
0 |
Firework 102 / 93 / 36 Регистрация: 01.04.2013 Сообщений: 649 |
||||
28.11.2013, 15:58 [ТС] |
9 |
|||
Понятия не имею. Думаю от моего же имени. Добавлено через 3 минуты
Вот так находит содержимое файла с фтп-сервера. Где ivanov — login, 123421 — password.
0 |
13207 / 6595 / 1041 Регистрация: 10.01.2008 Сообщений: 15,069 |
|
28.11.2013, 16:01 |
10 |
Понятия не имею. Думаю от моего же имени. Значит, надо выяснить. В этом и может заключаться проблема: это у Вас автовход, а у него — нет. Добавлено через 59 секунд
0 |
102 / 93 / 36 Регистрация: 01.04.2013 Сообщений: 649 |
|
28.11.2013, 16:06 [ТС] |
11 |
а у него — нет У кого у него? Я сам же этот скрипт запускаю. Добавлено через 3 минуты
Значит, надо выяснить. В этом и может заключаться проблема: это у Вас автовход, а у него — нет. Добавлено через 59 секунд не получается
0 |
13207 / 6595 / 1041 Регистрация: 10.01.2008 Сообщений: 15,069 |
|
28.11.2013, 16:09 |
12 |
У кого у него? Еще раз:
0 |
Firework 102 / 93 / 36 Регистрация: 01.04.2013 Сообщений: 649 |
||||
28.11.2013, 16:13 [ТС] |
13 |
|||
Мне просто надо знать как прописывать пароль и логин к защищённой сетевой папке.
Т.е. логин и пароль прописываются перед адресом.
0 |
13207 / 6595 / 1041 Регистрация: 10.01.2008 Сообщений: 15,069 |
|
28.11.2013, 16:25 |
14 |
Насколько я понял, для UNC вообще не предусмотрено возможности указать логин и пароль.
0 |
102 / 93 / 36 Регистрация: 01.04.2013 Сообщений: 649 |
|
28.11.2013, 16:35 [ТС] |
15 |
UNC щта???
0 |
13207 / 6595 / 1041 Регистрация: 10.01.2008 Сообщений: 15,069 |
|
28.11.2013, 16:37 |
16 |
щта??? Этот Ваш \hostpath — это оно и есть. Не проще сетевой диск перманентно подключить для общего пользования?
0 |
102 / 93 / 36 Регистрация: 01.04.2013 Сообщений: 649 |
|
29.11.2013, 14:49 [ТС] |
17 |
Ну тут такая политика компании. Добавлено через 1 минуту Добавлено через 22 часа 6 минут
0 |
Подскажите как реализовать на php доступ к расшарам другого компа в сети, например хочу вывести все расшаренные папки с компа адрес которого 10.18.29.1
может я просто туплю:) но все равно кто если знает подскажите плиз)
5 ответов
36K
25 января 2008 года
dmdz
3 / / 25.01.2008
Таже проблема. Пытаюсь прочитать все файлы из расшаренной папки:
Код:
foreach (glob(«\x.x.x.xx*.*») as $name)
echo $name . «<br/>»;
Так не вышло. Пытался монтировать расшаренную папку как диск в системе.
Код:
foreach (glob(«x:*.*») as $name)
echo $name . «<br/>»;
Так тоже не работает. Неужели PHP не умеет работать с расшаренными папками?
8
25 января 2008 года
mfender
3.5K / / 15.06.2005
права посмотрите на директорий. у апача должен быть доступ хотя бы на чтение. апач не является ни администратором, ни опытным пользователем.
36K
26 января 2008 года
dmdz
3 / / 25.01.2008
Total Commander то нормально открывает шару. Он запущен от того же пользователя что и Apache.
36K
27 января 2008 года
dmdz
3 / / 25.01.2008
Решил проблему поставив одинаковый пароль для Administrator’а на обоих системах, в этом случае система не запрашивает пароль при открытии расшаренной папки. Решение кривоватое, но работает. -) Наверно можно конечно объединить компы в домен и открыть доступ к папке для конкретного пользователя на другой машине, но не стал заморачиваться. При обращении к расшаренной папке также следует экранировать обратные слеши:
Код:
opendir(‘\\computer_name\shared_folder’);
Почему-то по-прежнему не работает обращение к сетевому диску:
Код:
Но это уже не столь важно обращаться к шаре напрямую даже удобней. -)
35K
01 февраля 2008 года
Elizar
2 / / 13.01.2008
решил проблему обращаясь scandir(‘//10.18.29.1/shared’) выводит все что в этой папке содержится,но осталась проблема что не может собснно открыть корень,т.е scandir(‘//10.18.29.1’) не прокатывает
За последние 24 часа нас посетили 9773 программиста и 1237 роботов. Сейчас ищут 250 программистов …
-
Volt(220)
Активный пользователь- С нами с:
- 11 июн 2009
- Сообщения:
- 1.640
- Симпатии:
- 1
Есть:
Две машины под Windows. Назовем их С1 и С2.
На С1 есть папка resource. У этой папки открыт доступ по сети для определенного пользователя.
Задача:
1) С помощью PHP взять файлы из этой папки и положить их в папку на С2.
2) С помощью PHP положить файлы в эту папку.
Вопросы:
1) Как подключиться?
2) Чем брать? -
Костян
Активный пользователь- С нами с:
- 12 ноя 2009
- Сообщения:
- 1.724
- Симпатии:
- 1
- Адрес:
- адуктО
-
Volt(220)
Активный пользователь- С нами с:
- 11 июн 2009
- Сообщения:
- 1.640
- Симпатии:
- 1
Костян
Стучаться на С1 по IP через 135 порт по протоколу TCP? -
подключится при помощи
net
команды/ключи монтирования дисков поищи сам.
А дальше тупо копируешь -
Volt(220)
Активный пользователь- С нами с:
- 11 июн 2009
- Сообщения:
- 1.640
- Симпатии:
- 1
-
да.
Только может их проще подключить на этапе настройки? Зачем козе баян и монтирование дисков из скрипта?
-
Volt(220)
Активный пользователь- С нами с:
- 11 июн 2009
- Сообщения:
- 1.640
- Симпатии:
- 1
Попробуем.В смысле?
-
copy(«\\10.20.30.40\resource\tt.txt», «dirForCopy/tt.txt»);
??
-
Ну если ты подмонтировал его как диск.
То и копировать с диска на диск.-
copy(‘D:/file’, ‘O:/file’);
А понимает ли php функция copy() под винду такое указание путей я не в курсе.
какая-то из cmd команд понимала. -
-
Volt(220)
Активный пользователь- С нами с:
- 11 июн 2009
- Сообщения:
- 1.640
- Симпатии:
- 1
Похоже что понимает, но вся эта конструкция выдает:
перед copy идет:
-
$cmd=«net use $path $pass /user:$user«;
-
Прав нет?
Собственно:
— берешь в руки консоль.
— монтируешь диск
— копируешь файлы.
Если не получается, то надо смотреть почему.
Если все получается, воспроизводишь эти же действия в скрипте.Или не понимает могло не найти файла.
Я не помню точно синтаксиса. Но все же, указывай для copy путь от дисков, а не от имени ПК.
Т.е. D:path1
а не \compnamepathpath1 -
Volt(220)
Активный пользователь- С нами с:
- 11 июн 2009
- Сообщения:
- 1.640
- Симпатии:
- 1
Из консоли то выходит, т.е. тот же net use в cmd, и иконки между окошками спокойно таскаются.
\compnamepath — в окошках работает, а вот дать этому диску букву и попробовать работать через нее стоит.
Спасибо за помощь.
-
Volt(220)
Активный пользователь- С нами с:
- 11 июн 2009
- Сообщения:
- 1.640
- Симпатии:
- 1
При назначении буквы:
scandir — failed to open dir: No error
copy — failed to open stream: No such file or directory
glob — возвращает пустой массивНо
Все то же самое с моего компьютера работает ну ура.
Вывод:
Либо пользователю под которым работает php не хватает прав.
Либо связка Windows Server+IIS+php работает с файлами как-то иначе, чем Windows XP+Apache+php. -
- С нами с:
- 2 фев 2007
- Сообщения:
- 4.680
- Симпатии:
- 1
- Адрес:
- Минск
-
Volt(220)
Активный пользователь- С нами с:
- 11 июн 2009
- Сообщения:
- 1.640
- Симпатии:
- 1
На Apache все работает.
Хотя кто сказал что IIS не может страдать тем же самым?…
-
Apache небось с mod_php
а
небось FastCGI
рекомендую посмотреть под каким пользователем запускается PHP.
-
Apple
Активный пользователь- С нами с:
- 13 янв 2007
- Сообщения:
- 4.984
- Симпатии:
- 2
Во избежании недоразумений всегда и везде используем обратный слеш — это раз.
Работаем со всем с помощью стандартных функций командной строки Windows.
Я бы работал с proc_open, но можем и с system/execТ.е copy берется не со стороны РНР, а в командной строке (exec(‘copy …’)).
Команды subst, mkdir, rmdir и т.д.
Не используй функции РНР. -
Volt(220)
Активный пользователь- С нами с:
- 11 июн 2009
- Сообщения:
- 1.640
- Симпатии:
- 1
в PHP (XAMPP), установленном на компьютере с Windows XP, Im пытается прочитать dir, который существует на сервере локальной сети. Im, используя is_dir()
чтобы проверить, является ли это dir, который я могу прочитать.
в Проводнике Windows я набираю serverdir
и этот dir показывается.
Когда я сопоставляю сетевой диск, он может получить к нему доступ с помощью z:dir
как хорошо.
в PHP у меня есть этот скрипт:
<?php if( is_dir($dir){ echo 'success' } ) ?>
на $dir
I попробовал:
/server/dir
//server/dir
serverdir
serverdir
-
serverdir
и
z:dir
z:dir
z:/dir
z://dir
но я никогда не добиваюсь успеха?
Есть идеи?
thx
3 ответов
Я решил это, изменив некоторые вещи в реестре сервера, как описано в последнем ответе этого обсуждения:
http://bugs.php.net/bug.php?id=25805
спасибо VolkerK и Гамбо в любом случае!
Я люблю stackoverflow и их великих людей, которые помогают вам так невероятно быстро!!
EDIT (взято из php.net):
сервис имеет ограниченный доступ к сетевым ресурсам, таким как акции
и трубы, потому что она имеет нет учетных данных и должен подключиться с помощью null
сессия. Следующий раздел реестра содержит NullSessionPipes и
Значения NullSessionShares, используемые для указания каналов и
акции нулевых сессий может подключиться:
Система реестра HKEY_LOCAL_MACHINE\CurrentControlSet науслугиLanmanServerпараметры
Кроме того, вы можете добавить значение REG_DWORD
RestrictNullSessAccess к ключу и установите его в 0, чтобы разрешить все null
сеансы для доступа ко всем каналам и общим ресурсам, созданным на этом машина.`
добавьте RestrictNullSessAccess=0 в свой реестр.
вы, вероятно, позволите xampp установить apache в качестве службы и запустить PHP-скрипты через этот apache. И служба apache (работает как localsystem) не разрешен доступ к сети, как ваша учетная запись пользователя.
служба, которая выполняется в контексте учетной записи LocalSystem, наследует контекст безопасности SCM. SID пользователя создается из значения SECURITY_LOCAL_SYSTEM_RID. учетная запись не связана ни с одним зарегистрированным пользователем счет.
Это имеет несколько последствий:
…
* служба представляет учетные данные компьютера удаленным серверам.
…
вы можете проверить это, запустив Apache как консольное приложение (apache_start.bat в каталоге xampp должен это сделать) и снова запустить скрипт. Вы можете использовать как прямые, так и обратные косые черты в пути unc. Я бы предложил использовать / / server / share, так как php не заботится о / in string константы.
<?php
$uncpath = '//server/dir';
$dh = opendir($uncpath);
echo "<pre>n";
var_dump($dh, error_get_last());
echo "n</pre>";
попробовать file:
схема URI:
file://server/dir
file:///Z:/dir
начало всегда file://
. Следующий сегмент пути-сервер. Если он находится на вашем локальном компьютере, оставьте его пустым (см. Второй пример). См. также файл URIs в Windows.