[PHP] opendir faalt op netwerk share

Pagina: 1
Acties:
  • 192 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • mschol
  • Registratie: November 2002
  • Niet online
ik probeer met opendir een mapped netwerk drive te benaderen.
echter krijg ik de volgende foutmelding:
Warning: opendir(Z:\): failed to open dir: Invalid argument in d:\www\ffmpeg\test.php on line 73
Error: Could not open directory: Z:\
ik maak gebruik van php 4.3.11, geinstalleerd als module onder apache 1.3.35 welk draait op Windows 2003 server

de Z:\ drive heb ik aangemaakt onder administrator m.b.v. tools-> map network drive

ik heb gegoogeld naar mijn probleem en uit de resultaten kon ik opmaken dat ik 1 van de volgende dingen moest proberen:
1 register waarde voor om nullSession op netwerk resources toe te laten
2 apache onder een andere gebruikersnaam laten draaien die wel rechten heeft op de share
zie hier
beide hebben echter niet geholpen

iemand die nog een goede ingeving voor mijn probleem heeft?
ik zou e.v.t. met exec("dir z: *.*") kunnen zoeken maar liever niet

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 11:16

TeeDee

CQB 241

Nevermind.
Klopt weer niet :)

mental note, niet meer bemoeien met php topics ;)

Is Z:\ als string gedefinieerd? Of prop je Z:\ er zo in?

[ Voor 105% gewijzigd door TeeDee op 21-11-2006 14:33 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • mschol
  • Registratie: November 2002
  • Niet online
TeeDee schreef op dinsdag 21 november 2006 @ 14:32:
Nevermind.
Klopt weer niet :)

mental note, niet meer bemoeien met php topics ;)

Is Z:\ als string gedefinieerd? Of prop je Z:\ er zo in?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
function getFiles($path, $fileFilter) {
   $dirStack = array($path);
   $files = array();

    while (null !== ($dir = array_pop($dirStack)))
    {
        $dh = opendir($dir) or die('Error: Could not open directory: '.$dir);
        while (false !== ($file = readdir($dh)))
        {
            if($file != "." && $file != "..")
            {
                $fullFile = $dir . $file;
                if (is_file($fullFile))
                {
                    if (preg_match($fileFilter, $file))
                    {
                        $files[] = $fullFile;
                    }
                } 
                else if (is_dir($fullFile))
                {
                    $dirStack[] = $fullFile . '/';
                }
            }
        }
        closedir($dh);
   }
   sort($files);
   return $files;
}

$main_dir = "Z:\\";

$files = getFiles($main_dir,'/\\.(avi|mkv|mpg|mpeg|wmv|mp4)$/i');


ik heb het ook geprobeerd met
$main_dir = "Z:/"

Acties:
  • 0 Henk 'm!

  • soulrider
  • Registratie: April 2005
  • Laatst online: 27-11-2017
waarom die array in't begin van je functie ?
//edit: deze dus:
code:
1
   $dirStack = array($path);



of probeer eens effe van
code:
1
$dh = opendir($dir) or die('Error: Could not open directory: '.$dir);

het voglende te maken:
code:
1
$dh = opendir($path) or die('Error: Could not open directory: '.$path);


doet ie het dan wel ?

werkt het wel met andere schijven zoals bv een andere lokale schijf (c-schijf of d-schijf bv)

[ Voor 23% gewijzigd door soulrider op 21-11-2006 16:41 ]


Acties:
  • 0 Henk 'm!

  • mschol
  • Registratie: November 2002
  • Niet online
soulrider schreef op dinsdag 21 november 2006 @ 16:39:
waarom die array in't begin van je functie ?

of probeer eens effe van
code:
1
$dh = opendir($dir) or die('Error: Could not open directory: '.$dir);

het voglende te maken:
code:
1
$dh = opendir($path) or die('Error: Could not open directory: '.$path);


doet ie het dan wel ?
ook getest, zelfde resultaat dat ga ik zo nog testen...
en verder draait je apache als admin of beperkte gebruiker ?
(hopelijk die laatste)
en heeft ie wel lees-rechten op die schijf ?
apache draait als local system account (en na een registry aanpassing zou hij zonder problemen die directory moeten kunnen lezen)
ook onder services -> apache -> log on as
administrator ingevuld
alleen als ik de share rechten edit kan ik geen van de server pc accounts selecteren om rechten aan toe te kennen...
als ik thuis ben zal ik wat screenshot's maken van de rechten die ik aan de share heb gegeven,

Acties:
  • 0 Henk 'm!

  • mschol
  • Registratie: November 2002
  • Niet online
soulrider schreef op dinsdag 21 november 2006 @ 16:39:
waarom die array in't begin van je functie ?
//edit: deze dus:
code:
1
   $dirStack = array($path);
daarmee kan ik ook door subdirectory's heen lopen (zodat ik 1 folder selecteer en vervolgens ook alle subdirectory's doorloop
werkt het wel met andere schijven zoals bv een andere lokale schijf (c-schijf of d-schijf bv)
yep lokale schijven werken prima, cd's moet ik nog eens proberen...

Acties:
  • 0 Henk 'm!

  • soulrider
  • Registratie: April 2005
  • Laatst online: 27-11-2017
mschol schreef op dinsdag 21 november 2006 @ 16:43:

alleen als ik de share rechten edit kan ik geen van de server pc accounts selecteren om rechten aan toe te kennen...
als ik thuis ben zal ik wat screenshot's maken van de rechten die ik aan de share heb gegeven,
daar zit dan wrs het probleem eh

als de apache draait onder een locale user die geen rechten heeft op de netwerkshare is het vrij logisch. (dus hij draait niet onder een gebruikersaccount die rechten heeft tot die share)

mss best doen zoals op die link die je zelf aangaf:
"To anyone who needs to use UNC mapped drives with
OpenDir(), if you are having a problem with OpenDir() reading
the directory, check your permissions for the share on the
host machine. Start with giving full permission to everyone
(which should work fine) and then back accessability until you
have a problem."
wellicht wel oplosbaar zo

Acties:
  • 0 Henk 'm!

  • mschol
  • Registratie: November 2002
  • Niet online
soulrider schreef op dinsdag 21 november 2006 @ 16:47:
[...]


daar zit dan wrs het probleem eh

als de apache draait onder een locale user die geen rechten heeft op de netwerkshare is het vrij logisch. (dus hij draait niet onder een gebruikersaccount die rechten heeft tot die share)

mss best doen zoals op die link die je zelf aangaf:

[...]


wellicht wel oplosbaar zo
al geprobeerd, helaas zonder resultaat..
ik zal straks dubbel checken

edit
checked, geen resultaat.
ik ga nu op me server zelf een share aanmaken welke ik vervolgens map en ga proberen te benaderen.

edit 2
dan kan ik WEL de share benaderen?
de $main_dir ziet er dan zo uit:
code:
1
2
3
$main_dir = "\\\\server\\mov\\";
OF
$main_dir = "//server/mov/";


overigens als ik het via de cmd en dan de php.exe <pad naar script> opgeef werkt het prima, dit komt waarschijnlijk omdat ik onder administrator het script dan uitvoer.. (overigens is het dan vreemd dat wanneer ik aan apache een andere log-on user geef dat hij het nog niet doet..)

[ Voor 29% gewijzigd door mschol op 21-11-2006 20:28 ]


Acties:
  • 0 Henk 'm!

  • Equator
  • Registratie: April 2001
  • Laatst online: 14-08 15:54

Equator

Crew Council

#whisky #barista

Wanneer jij als Administrator een netwerkmapping maakt is die niet per default beschikbaar voor elke service die er draait.
Dan zou je je service moeten laten draaien onder een account welke interactieve aanmeldrechten heeft en eens onder dat account aanmelden. Dan pas de drivemapping maken en je service starten.
Is wel een vieze oplossing.

Gewoon UNC paden gebruiken. Veel netter, en makkelijker. Je wilt niet dat een service onder een account draait wat interactieve aanmeldrechten heeft..

Acties:
  • 0 Henk 'm!

  • mschol
  • Registratie: November 2002
  • Niet online
Equator schreef op woensdag 22 november 2006 @ 08:21:
Wanneer jij als Administrator een netwerkmapping maakt is die niet per default beschikbaar voor elke service die er draait.
Dan zou je je service moeten laten draaien onder een account welke interactieve aanmeldrechten heeft en eens onder dat account aanmelden. Dan pas de drivemapping maken en je service starten.
Is wel een vieze oplossing.

Gewoon UNC paden gebruiken. Veel netter, en makkelijker. Je wilt niet dat een service onder een account draait wat interactieve aanmeldrechten heeft..
UNC paden werken niet.

zoals ik hier boven vermelde:
UNC paden naar de server zelf toe werken prima, echter naar een andere pc in het netwerk werkt niet, ookal staat op de share "Everyone" op full controll
drive mappings naar andere pc werken niet, drive mapping naar de server zelf heb ik niet getest.

de optie "Service kan interactief met bureaublad worden uitgevoerd" heb ik niet geprobeerd, en ga ik wel proberen :P (als het maar werkt :P )

--edit--
ik heb nu ook geprobeerd om via passthrou() en exec() het volgende uit te voeren:
dir z: (of cmd|dir z: )

en daar komt ook geen resultaat uit
UNC paden ook geprobeerd met bovenstaande methode..
geen resultaat..
ik weet et niet meer :{

ik heb mijn error log eens na gekeken en ik krijg daar (als ik net use verstuur) network name cannot be found
en als ik dir z: doe krijg ik de melding: Path specified doesnt exist

tips zijn welkom
ik heb nu alleen ook apache draaien op de machine die ik via het netwerk wilde benaderen, gewoon om van al het gezeik af te zeik :D

[ Voor 20% gewijzigd door mschol op 22-11-2006 16:38 ]


Acties:
  • 0 Henk 'm!

  • Radiant
  • Registratie: Juli 2003
  • Niet online

Radiant

Certified MS Bob Administrator

Waarom werken UNC paden niet, en hetzelfde UNC pad gemount op een drive letter wel :?

Acties:
  • 0 Henk 'm!

  • mschol
  • Registratie: November 2002
  • Niet online
Radiant schreef op woensdag 22 november 2006 @ 19:46:
Waarom werken UNC paden niet, en hetzelfde UNC pad gemount op een drive letter wel :?
ik heb ethereal even me netwerk laten monitoren op het moment dat ik de share wil benaderen en de te benaderen pc stuurt dit terug:
code:
1
NT Status: STATUS_ACCESS_DENIED (0xc0000022)

en dat lijkt dan weer te komen door dat er een request wordt gedaan met:
User: /

geen idee hoe dat op te lossen
nog een klein overzichtje van wat wel en niet werkt: (na nogmaals alles uitproberen)

$main_dir = "\\\\server\\www\\"; -> OK
$main_dir = "\\\\10.0.0.180\\www\\"; -> OK
$main_dir = "\\\\netwerkpc\\e\\"; -> FAILED
$main_dir = "\\\\10.0.0.155\\e\\"; -> FAILED
Z:\ in windows 2003 onder administrator gekoppeld aan een netwerk schijf (zie bovenstaand rijtje)
$main_dir = "Z:\\"; -> FAILED
$main_dir = "Z:\\"; -> FAILED
$main_dir = "Z:\\"; -> FAILED
$main_dir = "Z:\\"; -> FAILED
volgens mij heb ik ergens niet goed getest eerst.. :X
anyway..
drivemapping werkt niet maar UNC ook niet... (tenminste, deels)
en de slashes maken niks uit helaas...

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 04-08 18:40
Mappings zijn per user account, dus zorg dat php (en dus apache/iis) als de zelfde user wordt uitgevoerd als de mapping.

LOCAL SYSTEM heeft geen netwerk rechten, gebruik hiervoor iets als LOCAL NETWORK service., of een "echte" user account.

  • mschol
  • Registratie: November 2002
  • Niet online
_js_ schreef op donderdag 23 november 2006 @ 00:04:
Mappings zijn per user account, dus zorg dat php (en dus apache/iis) als de zelfde user wordt uitgevoerd als de mapping.

LOCAL SYSTEM heeft geen netwerk rechten, gebruik hiervoor iets als LOCAL NETWORK service., of een "echte" user account.
al geprobeerd apache te laten draaien onder de user administrator waar ik ook een drive mapping had aangemaakt, alleen nog steeds dezelfde melding...

--edit--

nou snap ik het echt niet meer...
draai apache nu onder administrator (net zoals eerst)
en als ik nu deze gebruik:
$main_dir = "\\\\pcmilo\\d$\\";

werkt het wel?? :? :? :? :?
}:| daar ben ik dus 3 dagen mee bezig geweest terwijl het gewoon werkt....
nu alleen nog
$main_dir = "//pcmilo/d$/"; testen (please laat dit werken :D )

[ Voor 26% gewijzigd door mschol op 23-11-2006 15:11 ]

Pagina: 1