[PHP] benaderen bestanden op netwerk share

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • AtlonXP1800
  • Registratie: Augustus 2001
  • Laatst online: 29-01 12:01
Ik ben een script aan het maken in PHP waarmee ik wil uitlezen welke files zich in een directory bevinden.
De directory bevind zich op een andere server, waarnaar ik een mapped network drive heb.

Het script dat ik wil gebruiken is deze:
code:
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$path = "w:\\outputfiles";

$dir_handle = @opendir($path) or die("kan $path niet openen");

while ($file = readdir($dir_handle)) 
{
echo $file . "\r\n";
}

closedir($dir_handle);
?>


Start ik dit script vanaf de commandline, dan werkt het prima. Probeer ik het script te draaien via de webserver (wat ik uiteindelijk wel wil, want deze code moet in een soapserver komen), dan krijg ik meteen de melding dat het pad niet geopend kan worden.

De webserver (apache) draait onder de zelfde user als waarmee ik het script vanaf de commandline draai, ik had dan ook verwacht dat deze toegang zou hebben tot de mapped network drive, maar dit is kennelijk niet het geval.

Ik heb ook geprobeerd om de directory via een UNC pad te benaderen, maar voor zover ik kon vinden op internet ondersteund opendir() dat niet.

Heeft iemand enig idee hoe ik dit wel kan doen? of probeer ik nu iets dat onmogelijk is?

Acties:
  • 0 Henk 'm!

  • Kalentum
  • Registratie: Juni 2004
  • Laatst online: 20:45
Lukt het openen niet vanwege een rechtenprobleem of omdat het bestand niet gevonden kan worden? Wat is de foutmelding die je krijgt?

Acties:
  • 0 Henk 'm!

  • hostname
  • Registratie: April 2009
  • Laatst online: 17-09 17:56
Haal eerst is het apenstaartje voor opendir() weg en post de echte foutmelding.

Acties:
  • 0 Henk 'm!

  • AtlonXP1800
  • Registratie: Augustus 2001
  • Laatst online: 29-01 12:01
rutgerw schreef op maandag 13 juli 2009 @ 12:03:
Lukt het openen niet vanwege een rechtenprobleem of omdat het bestand niet gevonden kan worden? Wat is de foutmelding die je krijgt?
Ik vermoed omdat w: niet gevonden kan worden door de webserver.

De echte foutmelding is: Warning: opendir(w:\outputfiles) [function.opendir]: failed to open dir: No such file or directory

Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
AtlonXP1800 schreef op maandag 13 juli 2009 @ 12:28:
[...]


Ik vermoed omdat w: niet gevonden kan worden door de webserver.

De echte foutmelding is: Warning: opendir(w:\outputfiles) [function.opendir]: failed to open dir: No such file or directory
Kun je wel je c:\ uitlezen op dezelfde manier? Overigens, ik weet het niet precies, maar maakt het nog uit of je de slash andersom plaatst, dus deze / gebruikt.

Acties:
  • 0 Henk 'm!

  • vinnux
  • Registratie: Maart 2001
  • Niet online
Probeer voor $path eens het UNC path \\SERVERX\SHAREY\outputfiles
Daarnaast kan het goed een rechten probleem zijn aangezien het als een service draait.

[ Voor 40% gewijzigd door vinnux op 13-07-2009 12:35 ]


Acties:
  • 0 Henk 'm!

  • AtlonXP1800
  • Registratie: Augustus 2001
  • Laatst online: 29-01 12:01
Noork schreef op maandag 13 juli 2009 @ 12:29:
[...]

Kun je wel je c:\ uitlezen op dezelfde manier? Overigens, ik weet het niet precies, maar maakt het nog uit of je de slash andersom plaatst, dus deze / gebruikt.
ja, c:\ uitlezen werkt wel (c:/ trouwens ook)

Ik denk dat jullie gelijk hebben dat het een rechten probleem is. Ik dacht dat UNC paden niet werkte met opendir(), maar doe ik $path = "\\\\localhost\\htdocs", dan krijg ik gewoon netjes de uitvoer.

Het probleem zit er dan waarschijnlijk in, dat als ik verbind met de server waar ik naar toe wil (bijvoorbeeeld bij het aanmaken van de mapped network drive) , ik een naam en een wachtwoord op moet geven (die niet gelijk zijn aan die waar apache onder draait), volgens mij bied de mannier die ik nu probeer te gebruiken hier ook geen mogelijkheid voor.

Acties:
  • 0 Henk 'm!

Verwijderd

AtlonXP1800 schreef op maandag 13 juli 2009 @ 12:28:
[...]


Ik vermoed omdat w: niet gevonden kan worden door de webserver.

De echte foutmelding is: Warning: opendir(w:\outputfiles) [function.opendir]: failed to open dir: No such file or directory
Dat kan zeer zeker een rechtenprobleem zijn.

Acties:
  • 0 Henk 'm!

  • Dricus
  • Registratie: Februari 2002
  • Laatst online: 19-09 12:26

Dricus

ils sont fous, ces tweakers

Het is geen rechtenprobleem. Als je onder een gebruiker één of meerdere netwerkdrives gemapped hebt, dan worden deze vziw alléén automatisch automatisch gemapped als je zelf via het login scherm op die gebruiker inlogt. Als je een service onder diezelfde gebruikersnaam laat draaien dan worden die netwerkdrives niet automatisch voor je gemapped. Als je dus (zoals hierboven gesuggereerd) met een UNC pad werkt moet het wel goed gaan (er vanuit gaande dat deze gebruiker leesrechten heeft op die share natuurlijk).

Stel niet uit tot morgen wat je vandaag nog tot morgen kunt uitstellen...


Acties:
  • 0 Henk 'm!

  • AtlonXP1800
  • Registratie: Augustus 2001
  • Laatst online: 29-01 12:01
Dricus schreef op maandag 13 juli 2009 @ 14:08:
Het is geen rechtenprobleem. Als je onder een gebruiker één of meerdere netwerkdrives gemapped hebt, dan worden deze vziw alléén automatisch automatisch gemapped als je zelf via het login scherm op die gebruiker inlogt. Als je een service onder diezelfde gebruikersnaam laat draaien dan worden die netwerkdrives niet automatisch voor je gemapped. Als je dus (zoals hierboven gesuggereerd) met een UNC pad werkt moet het wel goed gaan (er vanuit gaande dat deze gebruiker leesrechten heeft op die share natuurlijk).
nee, dat 2e (UNC paden) werkte ook niet,m dan kreeg ik dezelfde melding.
Ik ben nu even aan het proberen om de gebruiker waar apache onder draait dezelfde username / password te geven als de netwerk share, volgens sommige sites die ik via google vond zou dat moeten werken.

Acties:
  • 0 Henk 'm!

Verwijderd

AtlonXP1800 schreef op maandag 13 juli 2009 @ 14:22:
[...]


nee, dat 2e (UNC paden) werkte ook niet,m dan kreeg ik dezelfde melding.
Ik ben nu even aan het proberen om de gebruiker waar apache onder draait dezelfde username / password te geven als de netwerk share, volgens sommige sites die ik via google vond zou dat moeten werken.
Ik had hetzelfde probleem met IIS. IISUSR moest ook rechten krijgen, ik kreeg ook diezelfde foutmelding.

Acties:
  • 0 Henk 'm!

  • AtlonXP1800
  • Registratie: Augustus 2001
  • Laatst online: 29-01 12:01
ha, gelukt!

Ik heb op de server waar apache op draaide een nieuwe user aangemaakt, met de zelfde username en password als de server die ik wil benaderen.
Daarna heb ik apache laten starten onder de nieuw aangemaakte gebruiker, en toen weer mijn originele script gebruikt, maar dan met een UNC pad er in.

Toch is het wel een beetje vreemd dat dit zo moet, stel ik wil in een ander script een share op een andere server benaderen, dan heb je een probleem...

Acties:
  • 0 Henk 'm!

  • Dricus
  • Registratie: Februari 2002
  • Laatst online: 19-09 12:26

Dricus

ils sont fous, ces tweakers

AtlonXP1800 schreef op maandag 13 juli 2009 @ 14:22:
[...]
nee, dat 2e (UNC paden) werkte ook niet,m dan kreeg ik dezelfde melding.
Ik ben nu even aan het proberen om de gebruiker waar apache onder draait dezelfde username / password te geven als de netwerk share, volgens sommige sites die ik via google vond zou dat moeten werken.
Vandaar mijn 'disclaimer' tussen haakjes ;).

Als je webserver in een domain draait, dan is een mogelijke oplossing om in dat domain een gebruiker aan te maken. Deze gebruiker geef je dan leesrechten op de share en apache laat je onder die gebruiker draaien. Zo niet, dan is het denk ik het handigst om per computer waar je (een) share(s) van wilt benaderen de gebruikersnaam en het wachtwoord bij de webapp bekend te maken en de webapp zelf in te laten loggen, bijvoorbeeld met behulp van het volgende shell commando (misschien kan het ook wel direct met PHP, maar dat weet ik niet):

net use \\server\share /user:user password

Als je het zo doet is het niet meer nodig om Apache onder een bepaalde gebruiker te draaien.

Stel niet uit tot morgen wat je vandaag nog tot morgen kunt uitstellen...


Acties:
  • 0 Henk 'm!

  • AtlonXP1800
  • Registratie: Augustus 2001
  • Laatst online: 29-01 12:01
Dricus schreef op maandag 13 juli 2009 @ 14:45:
[...]

Vandaar mijn 'disclaimer' tussen haakjes ;).

Als je webserver in een domain draait, dan is een mogelijke oplossing om in dat domain een gebruiker aan te maken. Deze gebruiker geef je dan leesrechten op de share en apache laat je onder die gebruiker draaien. Zo niet, dan is het denk ik het handigst om per computer waar je (een) share(s) van wilt benaderen de gebruikersnaam en het wachtwoord bij de webapp bekend te maken en de webapp zelf in te laten loggen, bijvoorbeeld met behulp van het volgende shell commando (misschien kan het ook wel direct met PHP, maar dat weet ik niet):

net use \\server\share /user:user password

Als je het zo doet is het niet meer nodig om Apache onder een bepaalde gebruiker te draaien.
Goed punt, door dat commando met exec uit te voeren voordat je het opendir commando uitvoert werkt het ook, bedankt!
Pagina: 1