Toon posts:

[PHP] Windowsshare dir en files listen

Pagina: 1
Acties:
  • 42 views sinds 30-01-2008

Verwijderd

Topicstarter
Hoi,

Voor mijn stage schrijf ik een zoekmachine voor een Kennisbank die aanwezig is in het bedrijf. Deze Kennisbank staat op een netwerkschijf(Windows server) en is toegankelijk voor elke werknemer. De bedoeling is dat men aan de hand van trefwoorden en dergelijke bestanden kan vinden. Deze trefwoorden en categorieen worden in een database bijgehouden. De zoekmachine zelf staat op een linux-server waarop php 5 staat geinstalleerd.

Om de zoekmachine up-to-date te houden moet er regelmatig een controle zijn die controleert of de inhoud van de database overeen komt met die van de kennisbank zelf. De bedoeling op het moment is om een directory list te genereren en deze vergelijken met de inhoud van de database. Als er een directory of file niet in de database voorkomt die wel in de directory list staat moet daar een melding van komen (nieuw bestand/map melding). Als een directory of file niet in de directory list voorkomt maar wel in de database moet daar ook een melding van komen (kapotte link melding).

Het probleem is nu dat ik via php niet direct bij de kennisbank(windows share) kan komen, deze staat immers niet op server.

We laten op het moment een fileList.out en dirList.out lokaal genereren via een script. Deze 2 bestanden dienen vervolgens gelezen te worden door de applicatie. De fileList.out en dirList.out worden gemaakt door de beheerder, deze zal zelf ook het script runnen om deze 2 bestanden regelmatig te updaten.

De 2 bestanden zouden natuurlijk op de server kunnen worden gezet, maar dat zou betekenen dat er schrijf rechten op de server moeten komen, dat is niet wat we willen.

Schrijf rechten zijn alleen aanwezig op de database.

Wat ik concreet wil is:
met PHP(op een linuxserver) een directoriestructuur op een Windowsserver share doorlopen en de bestanden/dirs namen naar een PHP array kopieren zodat ik deze kan vergelijken met de inhoud in de MySQL database.

Ik hoop dat iemand kan helpen, in elk geval alvast bedankt, al is het alleen al voor het lezen van deze lap tekst ;)

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 20:31
Is het geen optie om de locatie op de windows bak te mounten onder linux met samba?

Roomba E5 te koop


Verwijderd

Topicstarter
sig69 schreef op maandag 11 september 2006 @ 14:10:
Is het geen optie om de locatie op de windows bak te mounten onder linux met samba?
liever niet, de locatie(pad) van de kennisbank(=Windowsshare met submappen en documten) zou dynamisch moeten.

Wat we willen is het pad als een database veld en deze vervolgens uitlezen.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 15:02

Janoz

Moderator Devschuur®

!litemod

Ik zie niet in waarom dit een beperking moet zijn. Je kunt voor de applicatie toch gewoon het mountpoint gebruiken terwijl je aan de gebruiker gewoon de windows url terug geeft.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • pimlie
  • Registratie: November 2000
  • Laatst online: 05-02 12:08
liever niet, de locatie(pad) van de kennisbank(=Windowsshare met submappen en documten) zou dynamisch moeten.
Dan doe je het mounten van je share toch ook gewoon in je php script?
http://nl2.php.net/exec
http://nl2.php.net/system
http://nl2.php.net/language.operators.execution

  • pistole
  • Registratie: Juli 2000
  • Laatst online: 21:02

pistole

Frutter

je kan toch gewoon de share naam (//server/share) tesamen met evt credentials opslaan in de database en vervolgens gebruiken in een mount commando?

Ik frut, dus ik epibreer


Verwijderd

Topicstarter
je bedoeld met een linux commando uitvoeren om de Windowsshare in Linux te mounten en hem vervolgens benaderen?

Dat klinkt heel ingewikkeld, heb je hier toevallig een manual/howto/voorbeeld van?

  • sariel
  • Registratie: Mei 2004
  • Laatst online: 07-12-2025
- Op je windows fileserver draai je een (php) scriptje (scheduling) dat de bestanden van een bepaalde map indexeert en opslaat in een database.
- Op de Linux webserver zet je een php scriptje dat die database doorzoekt, en geeft de juiste locatie terug.
- Grafisch schilletje bouwen om het php scriptje zodat mensen een leuke vormgeving hebben.
- Klaar.

speudocode:pseudocode zelfs:
indexer:
code:
1
2
3
4
5
6
7
8
9
10
geselecteerde dir = "d:\Shares\Interessantemap"
Open dir(geselecteerde dir);
Connect to database;
while(readdir)
{
   lees bestandsnaam;
   insert into tabel (filename, locatie);
}
Close database;
Close dir;

zoeker:
code:
1
2
3
Connect to database;
$results = Select * from tabel where filename = $input;
echo $results;

[ Voor 35% gewijzigd door sariel op 11-09-2006 14:45 ]

Copy.com


  • pistole
  • Registratie: Juli 2000
  • Laatst online: 21:02

pistole

Frutter

Verwijderd schreef op maandag 11 september 2006 @ 14:37:
[...]


je bedoeld met een linux commando uitvoeren om de Windowsshare in Linux te mounten en hem vervolgens benaderen?

Dat klinkt heel ingewikkeld, heb je hier toevallig een manual/howto/voorbeeld van?
man mount ;)

Maar is betrekkelijk simpel hoor..

Ik frut, dus ik epibreer


  • pimlie
  • Registratie: November 2000
  • Laatst online: 05-02 12:08
je bedoeld met een linux commando uitvoeren om de Windowsshare in Linux te mounten en hem vervolgens benaderen?

Dat klinkt heel ingewikkeld, heb je hier toevallig een manual/howto/voorbeeld van?
Precies. Je begint je php script met het mounten van je windows share op je linux bak en je eindigt met het unmounten van die share. Daartussen kan je dan gewoon je normale indexeer code uitvoeren.

Zou iets moeten worden als:
PHP:
1
`sudo mount -t smbfs //[windows_server]/[windows_share] /mnt/kennisbank -o username=[username],password=[password]`;


Het gebruik van het commando sudo hangt af van of de gebruiker waaronder dit script draait het commando mount mag gebruiken of niet. Meer informatie vind je op google, zoeken naar mount, smbmount, sudo i.c.m. man page (of vraag de systeembeheerder ;) ).

http://www.linuxcommand.org/man_pages/smbmount8.html
http://www.linuxcommand.org/man_pages/sudo8.html

  • borgdaville
  • Registratie: December 2000
  • Laatst online: 17:52
Via google kom ik tot de volgende stappen:
1. map aanmaken op linuxserver(/mnt/kennisbank)
2. smbfs installeren(apt-get install smbfs)
3. Mount commando uitvoeren:
mount -t smbfs -o username=test,password=test2013 //rltsft-server2/public /mnt/kennisbank

Dit levert de volgende errors op:
rltsft-testserver:/mnt# mount -t smbfs -o username=test,password=** //rltsft-server2/public /mnt/kennisbank
cli_negprot: SMB signing is mandatory and we have disabled it.
15916: protocol negotiation failed
SMB connection failed

Familieman, nerd, mooi weer fietser, buitenmens en levensgenieter...


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 15:02

Janoz

Moderator Devschuur®

!litemod

Wie is nu borgdaville en wie is -Nicodemus-?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Janoz schreef op maandag 11 september 2006 @ 15:47:
Wie is nu borgdaville en wie is -Nicodemus-?
Nicodemus is de stagiare, borgdaville is de netwerkbeheerder

  • pimlie
  • Registratie: November 2000
  • Laatst online: 05-02 12:08
Zoeken op google:
http://www.google.nl/sear...we+have+disabled+it&meta=

1e resultaat zegt:
What does your smb.conf say about signing? Have you disabled it?

'client signing = yes'

should do the trick.
Die quotes natuurlijk wel ff weghalen. En ik neem ondertussen ook direct maar ff aan dat je Samba 3 gebruikt ;)

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:38

Creepy

Tactical Espionage Splatterer

En anders mounten als cifs als dat ondersteunt wordt op je Linux server (overigens ook binnen een paar seconden met google gevonden ;) ).

@borgdaville en -Nicodemus-: Zouden jullie Programming Beleid - De Quickstart eens door willen kijken? Dan zie je precies wat we van iemand verwachten voordat er een topic wordt geopend of een vraag word gesteld :)

[ Voor 52% gewijzigd door Creepy op 11-09-2006 17:01 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 03-02 08:37
Kan je geen FTP toegang regelen? Eventueel kan je die FTP user bijvoorbeeld alleen rechten geven om de structuur te lezen zonder dat ze de content van de bestanden kunnen lezen.

  • borgdaville
  • Registratie: December 2000
  • Laatst online: 17:52
pimlie schreef op maandag 11 september 2006 @ 16:53:
Zoeken op google:
http://www.google.nl/sear...we+have+disabled+it&meta=

1e resultaat zegt:

[...]


Die quotes natuurlijk wel ff weghalen. En ik neem ondertussen ook direct maar ff aan dat je Samba 3 gebruikt ;)
uiteraard heb ik gegoogled en dat geprobeerd, maar helaas blijft de fout hetzelfde.

de 'client signing' kwam niet in mijn smb.conf voor, ik heb hem toegevoegd onder de [global] settings

edit: en samba herstart natuurlijk!

[ Voor 3% gewijzigd door borgdaville op 11-09-2006 17:03 ]

Familieman, nerd, mooi weer fietser, buitenmens en levensgenieter...


  • pimlie
  • Registratie: November 2000
  • Laatst online: 05-02 12:08
Welke versie Samba & Windows hebben we het nu precies over?

Of is dit meer iets voor een nieuw topic in /23 ?

  • borgdaville
  • Registratie: December 2000
  • Laatst online: 17:52
pimlie schreef op maandag 11 september 2006 @ 18:51:
Welke versie Samba & Windows hebben we het nu precies over?

Of is dit meer iets voor een nieuw topic in /23 ?
ik denk dat het beter is een nieuwe te beginnen, ik zal een mooi topic met alle info inelkaar knutselen! Bedankt zover!

Voor geinteresseerden:
[samba] Win2003 Share mounten

[ Voor 13% gewijzigd door borgdaville op 12-09-2006 08:35 ]

Familieman, nerd, mooi weer fietser, buitenmens en levensgenieter...


Verwijderd

Topicstarter
hier is nicodemus weer:

de server is nu ingericht zodat het mogelijk is om de Windows 2003 share te mounten. Dit werkt als men met het root account inlogt en het volgende commando invoert:
mount -t cifs -o username=test,password=test //192.168.0.3/public /mnt/kennisbank

Echter, vanuit PHP, lukt het nog niet echt:
Deze:
echo exec('whoami');
echo exec('mkdir /mnt/kennisbank');

worden gewoon uitgevoerd, echter:
echo exec('mount -t cifs -o username=test,password=test //192.168.0.3/public /mnt/kennisbank');

word niet uitgevoerd. Ik heb geprobeerd de output te krijgen met:
$output = shell_exec('mount -t cifs -o username=test,password=test //192.168.0.3/public /mnt/kennisbank');
echo $output;

en

$last_line = system('mount -t cifs -o username=test,password=test //192.168.0.3/public /mnt/kennisbank', $retval);
echo '</pre><hr />Last line of the output: ' . $last_line . '<hr />Return value: ' . $retval;

Maar dit levert ook niets op!?!?
Ik denk dat het iets met de rechten te maken heeft, maar hoe kan ik bv. inloggen met een bepaalde gebruiker oid???
Wie kan mij verder helpen?

edit:
in het apache error.log word de fout duidelijk:
mount: only root can do that

Hoe lossen we dit op???

[ Voor 5% gewijzigd door Verwijderd op 12-09-2006 14:14 ]


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 15:02

Janoz

Moderator Devschuur®

!litemod

Met alle respect, maar dat los je op door fatsoenlijk linux systeembeheer. Dit is absoluut geen programmeer probleem meer. Aangezien het geen programmeer probleem meer is gaat dit topic op slot.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1

Dit topic is gesloten.