[PHP] Config file inlezen, en bewerken, hoe aanpakken?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • pierre-oord
  • Registratie: April 2002
  • Laatst online: 10-02 23:00
Ik zit met een probleempje met een config file van een BNC. Ik wil dat mensen verplicht 1 channel joinen, om het gebruikersaantal goed te laten zien aan de buitenwereld.

Ik heb hieronder een stukje van de grote inhoud van de file (100 users exact op dit moment):
code:
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
USER1.USER.NICK=XXPierre[Away]
USER1.USER.USER=pierre
USER1.USER.PASS==`4XXXXXXXXX`'9
USER1.USER.RIGHTS=1
USER1.USER.VLINK=0
USER1.USER.LEAVEMSG=I'm away -Please send an Email: XXXXX.com
USER1.USER.PPORT=0
USER1.USER.PARENT=0
USER1.USER.QUITTED=0
USER1.USER.DCCENABLED=1
USER1.USER.AUTOGETDCC=0
USER1.USER.AIDLE=1
USER1.USER.LEAVEQUIT=0
USER1.USER.AUTOREJOIN=0
USER1.USER.SYSMSG=1
USER1.USER.LASTLOG=0
USER1.USER.CERT=+
USER1.USER.VHOST=bnc1.fXXXXXXXg.com
USER1.USER.AWAYNICK=XXXXX]
USER1.USER.LOGIN=pierre
LINKS.LINK0.TYPE=1
USER1.SERVERS.SERVER1=blueyonder.uk.quakenet.org
USER1.SERVERS.PORT1=6668
USER1.CHANNELS.ENTRY2=#XXXX.nl
USER1.CHANNELS.ENTRY0=#joinditchannel.com
USER1.CHANNELS.ENTRY4=#XXXXX.net
USER6.USER.LOGIN=XXX
USER6.USER.USER=XXX
USER6.USER.PASS=='f`8XXXXXXXXXXX`=`x
USER6.USER.RIGHTS=0
USER6.USER.VLINK=0
USER6.USER.PPORT=0
USER6.USER.PARENT=0
USER6.USER.QUITTED=0


Wat is de bedoeling?
Nou, ik wil dat iedere gebruiker een bepaald channel joint, in dit geval #joinditchannel.com

Hoe pak ik dit aan?
Een kleine opzet heb ik hieronder gezet, maar ik heb geen flauw idee hoe ik dit in code typ. Ik ben nog niet zo heel lang bezig met PHP, en heb geen goed idee van de juiste beschikbare functie hiervoor.

While [$usernames afgaan, misschien vast inzetten, dus 1to1000?] {
if (empty($username.user.login)){
echo ('O o, deze user ID bestaat niet, misschien wat fragmentatie.');
echo ('NEXT!');
} else {
while channels van user {
channelgezet=0;
if channel=#joinditchannel.com {
channelgezet=1;
}
}
if ($channelgezet == 0){
zet channel1 van gebruiker op $joinditchannel.com
}

Ik hoop dat jullie mij kunnen helpen hiermee. Het lijkt bijna wat op een script-request, maar het gaat mij echt om de fucnties, en idee-en hoe ik die variabelen in het script in PHP krijg gestopt.

De enige andere manier die ik anders heb bedacht, is:
Zet alle gebruikers in database, met optievelden en channels.
Laat daarna een config bestand genereren door database.

En dan daarna dat config bestand opnieuw inlezen. Dit programma kan dat niet voor zover ik weet, maar dan kan ik nog overstappen op een andere BNC wat ik mogelijk toch wil doen, echter blijft dit probleem dan nog steeds gelden.

Bedankt alvast voor de $_GET['input']

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

PHP:
1
2
3
4
$config = file_get_contents('config.cfg');
for ($i = 1; $i <= $aantalusers; $i++)
  config = preg_replace("/^USER".$i."\.CHANNELS\.ENTRY0\=[.*]*$/i",
                  'USER'.$i.'.CHANNELS.ENTRY0=#joinditchannel.com');

Zoiets zou in de richting moeten komen... :?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • pierre-oord
  • Registratie: April 2002
  • Laatst online: 10-02 23:00
Thx, ik ga even kijken wat ik hiermee kan doen!

edit:
Ik probeer die preg_replace te begrijpen, maar de PHP site laat het erg slecht gedocumenteerd en op internet vind ik zo niet wat, heb je misschien een goede link voor me, (liefst NL met zo'n onderwerp als dit) ?

Ik weet nu zoveel mogelijkheden :)
Maar eerst moet ik nog wat inbouwen om alle channels af te gaan van de user, ik wil dan eerst die preg_replace eens begrijpen, ik denk ook dat ik pre_match nodig heb dan.

Dus:
- Users langsgaan
- als die geen channel hebben met iets.nl, dan channel 0 instellen als #iets.nl

En later nog checken of ze meerdere vhosts hebben ingesteld als addon, en meer dan 1 eruit halen :)
edit2: De preg-match functie heeft wel meer voorbeelden, ik kom er wel ;)

edit3:
Nou, dit lijkt toch het eerste te zijn waarvan ik geen info kan vinden op internet wat ieder ^ etc doet. Het is nu voor mij onleesbare code ;(

edit4:
Misschien kun je het mij een beetje uitleggen:
Wat ik nu begrijp voor de zoekopdracht:

De zoekopdracht wordt een pattern genoemd, en staat tussen 2 /-tekens in.
Als je de zoekopdracht laat eindigen met /i, dan is het hoofdletter ongevoelig. Als je tussen een bepaald stuk in de zoekopdracht \b en \b zet, dan moet dat deel exact dat woordt zijn, los gescheiden door spaties niet aan elkaar.

edit5:
MM, ik was beetje blind, op de php pagina staat een uitleg page over al die characters :X

Ik probeer hieronder wat:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$config = file_get_contents('config.cfg');
for ($i = 1; $i <= $aantalusers; $i++){
# Even geen insping, anders vliegt de code je browser venster uit

if (preg_match("/^USER".$i, $config)) {
    # De gebruiker bestaat, dus nu checken op channel:

    if(!preg_match("/^USER".$i."\.CHANNELS\.ENTRY\d{1,}\=#joinditchannel.com$/i", $config)){
        # Ok, geen channel met 1 of 2 numerieke characters bevat #joinditchannel.com, dan toevoegen:
        
        # Trouwens nieuw voor mij, iets zonder $  voor een variable. 
        # De variabel staat ook niet ingevuld in de preg_replace, nog ff naar kijken
        config = preg_replace("/^USER".$i."\.CHANNELS\.ENTRY0\=[.*]*$/i",
        'USER'.$i.'.CHANNELS.ENTRY0=#joinditchannel.com');
    }
}
}


Klopt dit een beetje? Ik probeer vanmiddag de code te testen.

Ik begrijp alleen het voorbeeld preg_replace stukje,
code:
1
preg_replace("/^USER".$i."\.CHANNELS\.ENTRY0\=[.*]*$/i"

niet helemaal.
Het laatste stuk, is matchen (Ik gebruik _ voor per teken):
ENTRY0=eenteken_1ofmeertekens_1ofmeertekens_einderegel

Klinkt dit niet wat dubbel? Waarom niet gewoon
ENTRY0=*_einderegel

?

[ Voor 186% gewijzigd door pierre-oord op 05-10-2004 13:31 ]


Acties:
  • 0 Henk 'm!

  • pierre-oord
  • Registratie: April 2002
  • Laatst online: 10-02 23:00
Wie neemt er een kijkje bij m'n grote edits bovenaan? :)

Acties:
  • 0 Henk 'm!

  • ludo
  • Registratie: Oktober 2000
  • Laatst online: 26-04-2024
Zie de P&W FAQ - Regular expressions :)
Hier staat ook een linkje naar drm's regular expression tutorial, waarvan ook een vernieuwde versie bestaat: http://www.melp.nl/site/index/4 , maar die is nog niet af.

Misschien kun je hier wat verder mee komen :)