Может кто то откликнется? PHP - ODBC - Access (на сетевом)

rubalex

Новичок
Может кто то откликнется? PHP - ODBC - Access (на сетевом)

размешаю базу данных локально.
создаю DSN
в скрипте odbc_connect
- все замечательно работает.

но когда я кладу эту базу (один mdb файл) на сетевой диск и перестраиваю DSN на путь \\server\share\test.mdb
- то не работает. ругается на то что не может получить доступ к файлу () в скобках почему то ничего не написано к какому файлу. и что он или занят кем то или нет прав на просмотр.

вопрос.. о каких правах речь? где копать то?
 

rsv

Новичок
Если пхп под апачем или иисом, то может у тебя просто этот сетевой путь не виден юзеру, под которым сервер запущен?
 

rubalex

Новичок
а сервис апач запущен под LocalSystem

да я чувствую что где то в разрешениях дело.. но где именно.
кому давать права и где
 

rsv

Новичок
Ты сначала просто попытайся вывести список файлов в папке, где у тебя база лежит
вот код из хелпа
PHP:
<?php
$dir = "/tmp/";

// Open a known directory, and proceed to read its contents
if (is_dir($dir)) {
    if ($dh = opendir($dir)) {
        while (($file = readdir($dh)) !== false) {
            echo "filename: $file : filetype: " . filetype($dir . $file) . "\n";
        }
        closedir($dh);
    }
}
?>
 

rubalex

Новичок
хм... хорошая идея...
сейчас проверю

-~{}~ 02.12.04 15:16:

Автор оригинала: Astral Man
rubalex
Покажи полностью ошибку, то что выдает php.
Warning: SQL error: [Microsoft][ODBC Microsoft Access Driver] The Microsoft Jet database engine cannot open the file '(unknown)'. It is already opened exclusively by another user, or you need permission to view its data., SQL state S1000 in SQLConnect Couldn't connect to datasource.

-~{}~ 02.12.04 15:26:

Автор оригинала: rsv
Ты сначала просто попытайся вывести список файлов в папке, где у тебя база лежит
вот код из хелпа
PHP:
а как посмотреть не корень и не дирктории в корне  а
диск M:\

что записать в $dir
у меня какая то путаница с синтакисом.. помоги

[size=1][i]-~{}~ 02.12.04  18:27:[/i][/size]

[QUOTE][i]Автор оригинала: rsv [/i]
Ты сначала просто попытайся вывести список файлов в папке, где у тебя база лежит

$dir = "m:/";
$result=is_dir($dir);
echo "\$result $dir $result <br>";

так вот если подставляю локальный диск то возвращает 1
а если сетевой  то не возвращает ничего - не считает он етевой диск за директорию.  не видит!
 

nightik

PHP5 BetaTeam
Тебе уже сказали: проверь права доступа для пользователя из под которого работает web-сервер. К локальным дискам, как правило, LocalSystem имеет доступ, а вот к сетевым ресурсам - нет!
 

rubalex

Новичок
Автор оригинала: nightik
Тебе уже сказали: проверь права доступа для пользователя из под которого работает web-сервер. К локальным дискам, как правило, LocalSystem имеет доступ, а вот к сетевым ресурсам - нет!
проверил. специально завел экаунт на одном сервере и на удаленом

и из под него пустил апач.
бестолку
 

rsv

Новичок
Попробуй этот код и посмотри, что он тебе выдает
он должен подключить сетевой диск N и показать какие диски вообще видны в системе апачу
тока замени на настоящие ;)
comp_name\\work_dir - ресурс в сетке
вместо user_login - имя юзера
вместо passowrd - его пароль

PHP:
$descriptorspec = array(
   0 => array("pipe", "r"),  // stdin is a pipe that the child will read from
   1 => array("pipe", "w"),  // stdout is a pipe that the child will write to
   2 => array("file", "c:/tmp/error-output.txt", "a") // stderr is a file to write to
);
$process = proc_open("c:\\windows\\system32\\net.exe use n: \\\\comp_name\\work_dir password /USER:user_login /persistent:yes", $descriptorspec, $pipes);
$process = proc_open("c:\\windows\\system32\\wbem\\wmic.exe path Win32_LogicalDisk get", $descriptorspec, $pipes);
if (is_resource($process)) {
    // $pipes now looks like this:
    // 0 => writeable handle connected to child stdin
    // 1 => readable handle connected to child stdout
    // Any error output will be appended to /tmp/error-output.txt

    fwrite($pipes[0], " ");
    fclose($pipes[0]);

    while (!feof($pipes[1])) {
        echo str_replace("\n","<hr>",fgets($pipes[1], 1024));
    }
    fclose($pipes[1]);
    // It is important that you close any pipes before calling
    // proc_close in order to avoid a deadlock
    $return_value = proc_close($process);

    echo "command returned $return_value\n";
}
 

rubalex

Новичок
Автор оригинала: rsv
Попробуй этот код и посмотри, что он тебе выдает
он должен подключить сетевой диск N и показать какие диски вообще видны в системе апачу
нефига.

в ерор файл пишет The system cannot find the path specified.

а код возвращает command returned 1
 

rsv

Новичок
у тебя виндовоз где стоит?
здесь ? c:\\windows\\system32
может не windows а d:\\winxp например
 

rubalex

Новичок
Автор оригинала: rsv
у тебя виндовоз где стоит?
здесь ? c:\\windows\\system32
может не windows а d:\\winxp например
опс.. на этот пусть не обратил внимания у меня winnt
сейчас поправлю

-~{}~ 03.12.04 12:41:

у меня нет вот этого
wmic.exe
 

rsv

Новичок
ну вообще говоря wmic можно взять на любой тачке с winxp или win2003
но работать оно будет только на win2000 и выше
попробуй хотя бы посмотреть, оно тебе пишет после выполнения net use
закоментарь строку
$process = proc_open("c:\\windows\\system32\\wbem\\wmic.exe path Win32_LogicalDisk get", $descriptorspec, $pipes);
 

rubalex

Новичок
я похоже нашел в чем косяк.
я к серверу на котром стоит вэб подключаюсь через терминал.
и в терминальном окне запускаю скрипт через браузер.
зашел локально.. вижу все эти диски замонтироваными..
но из терминала их не вижу..

вообщем буду копать в этом направлении

-~{}~ 03.12.04 15:36:

Автор оригинала: rsv
может не windows
вообщем проблма решена.
если в краце то она была имено в терминальном подключении.

настраивать ODBC нужно локально а не подключаясь через терминал к серверу
 

nightik

PHP5 BetaTeam
кажется проблема была не в терминальном подключении, я в понимании принципов. Есть User DSN, а есть System DSN и как ты думаешь, в чем их разница?
 

rubalex

Новичок
Автор оригинала: nightik
кажется проблема была не в терминальном подключении, я в понимании принципов. Есть User DSN, а есть System DSN и как ты думаешь, в чем их разница?
нет не знаю. может пожскажешь?
как правильно сделать
 
Сверху