Копирование файла с сетевого диска

@RuSHA

Guest
Копирование файла с сетевого диска

Скрипт должен скопировать с сетевого диска файл( файл обновляется каждые 5 секунд) в папку и вывести его содержимое..
Проблема состоит в том, что РНР упорно не хочет работать с сетевыми дисками... с локальных копирует без проблем, но только стоит обратиться к сетевому диску... как буд-то и не обращался... даже запуск bat-файла не помогает...
если кто сталкивался и решил данную проблему, подскажите
 

@RuSHA

Guest
Автор оригинала: neko
что пишет?
В том то и дело, что ничего не пишет.... ни копирует и не ошибка..
выполнение bat-файла:
___________________________________________
c:\program files\nusphere\apache\htdocs\month>cd \

C:\>copy C:\jc.pic "C:\Program Files\nusphere\apache\htdocs\Month"
‘Є®ЇЁа®ў _® д ©«®ў: 1.

C:\>copy "X:\Program Files\TMeter\отчеты\Month\CurrentMonth.xml" "C:\Program Files\nusphere\apache\htdocs\Month"

C:\>copy X:\jc2.pic "C:\Program Files\nusphere\apache\htdocs\Month"
___________________________________
"X:\" - сетевой диск, подключен с правами администратора...
при прямом выполнении bat-файла( запуск из проводника) выполняются все три копирования...
 

bizon-k

Guest
Есть решение навроде такого

Проблема скорее всего в том, что апач стартует как localhost
В этом случае он не видит тех дисков, которые подмаплены другим юзверем. Правда вот выяснилось, что если его стартовать и под правильным юзверем - тоже есть ошибка (ну не хочется сейчас рассказывать какая - долго писать лень).
Решили проблемы написанием вот такой функции и исполнением везде где нужно работать с сетевыми дисками

PHP:
function map_network_drive($drive_name, $remote_dir)
{
    $drive_name = strtoupper($drive_name);
    $remote_dir = strtoupper($remote_dir);
    $map = false;
    $str = mysystem("net use");
    $str = preg_split("/\r{0,}\n/", $str, -1, PREG_SPLIT_NO_EMPTY);
	foreach ($str as $val) {
		$data = preg_split("/\s{1,}/", $val, -1, PREG_SPLIT_NO_EMPTY);
		if(count($data) == 6) {
		    if(strtoupper($data[1]) == $drive_name) {
		        if(strtoupper($data[0]) == 'OK') {
		            if(strtoupper($data[2]) == $remote_dir) {
                       	return true;
                       	}
			        }
		    	}
			else {
			    $unmap = mysystem("net use " . $drive_name . " /delete");
			    $map = mysystem("net use " . $drive_name . " " . $remote_dir);
			    break;
				}
			}
		}
    return $map;
	}

function mysystem($command) {
 $out = '';
 if (!($p=popen("($command)2>&1","r"))) { 
   return 126;
 }
 while (!feof($p)) {
   $line=fgets($p,1000);
   $out .= $line;
 }
 pclose($p);
 return $out; 
}
Т.е. мапим диски прям из под апача.
 
Сверху