[php] meerdere txt bestanden aanmaken in een loop

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • w00d
  • Registratie: Juni 2004
  • Laatst online: 09:09
Meestal kom ik er zelf wel uit, maar nu even niet meer. Ik ben bezig met een eigen script aan te passen die ik gebruik voor het monitoren van de schrijfruimte van onze servers.

via een vbs script haal ik de info op (hieronder een deel ervan):
HTML:
1
2
3
###29-5-2009#
SERVER4;C:;33,90;26,66#
SERVER4;D:;67,83;30,19#


Deze code lees ik uit in php en verwerk ik zodat ik er grafieken er dergelijke mee kan maken. Voor één deel van de code moet ik allemaal losse .txt files hebben met daarin de waarde per server.

De txt files hebben de naam van de server + driveletter. Nu gebruik ik onderstaand script om de gegevens uit te lezen en de bestanden aan te maken: (ik test nu eerst alleen even om de bestanden aan te maken)

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$days = explode("###", $data); //dagen splitsen
$total_days = substr_count($data, "###"); //tel aantal dagen in de file.

    for($day=1;$day<=$total_days;$day++){
    /* PART 2 - per dag de servers opzoeken */  
    $servers[$day] = explode("#", $days[$day]);
    $total_servers[$day] = substr_count($days[$day], "#");
        
        for($server=1;$server<=$total_servers[$day];$server++){ //Iedere server af, datum veld overslaan
            $info[$day][$server] = explode(";", $servers[$day][$server]);
    
            $drive = substr($info[$day][$server][1],0,-1);
            echo $info[$day][$server][0];
            $file[$server] = fopen("data/".$info[$day][$server][0].".txt", 'w'); //het bestand openen ( en overschrijven )of aanmaken.
            fclose($file[$server]);
        }
    }
}


Die echo weergeeft keurig alle server namen, maar alleen van de eerste server wordt het bestand aangemaakt. Als ik start bij 2 (for($server=2;$server<=$total_servers[$day];$server++) Krijg ik helemaal geen één bestand.

Pak ik dit nu gewoon compleet verkeerd aan of zie ik iets kleins over het hoofd?

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Om dat uit te vinden zul je toch echt moeten gaan debuggen :) Sloop het hele bestandaanmaakgedeelte er eens uit en print gewoon de entries die je hebt gevonden?

Ik zou sowieso de file per regel inlezen, en dan kijken of de regel gevuld is en niet met drie hekjes begint. Als dat klopt, is de huidige regel een server-bericht. Dat kun je vervolgens verder gaan bewerken.

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • w00d
  • Registratie: Juni 2004
  • Laatst online: 09:09
Ik heb er al een paar uur debuggen opzitten. Dit werk bijv ook gewoon:

fopen("data/".$server.".txt", 'w')

Dan krijgt ik txt bestandjes genummerd vanaf 1 tot 19 ofzo.

Acties:
  • 0 Henk 'm!

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

Janoz

Moderator Devschuur®

!litemod

Zit er in server 2 (of alle servers boven 1) soms een speciaal teken wat niet geldig is in een bestandsnaam?

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


Acties:
  • 0 Henk 'm!

  • w00d
  • Registratie: Juni 2004
  • Laatst online: 09:09
nope, alle data is gewoon platte eenvoudig tekst:

###29-5-2009#
SERVER4;C:;33,90;26,66#
SERVER4;D:;67,83;30,19#
SERVER5;C:;33,90;26,66#
etc

Het stomme is dat de oude code een soortgelijke constructie had. Alleen de data wordt nu door een ander script opgehaald, dus de indeling is ook anders geworden (eenvoudiger). maar het principe van een for loop waarin ik bestanden aanmaken met de naam van de server heb ik al eerder gedaan.

Het lijkt er meer op dat hij moeite heeft met die multy array, want gewoon een eenvoudig doornummering vind die wel leuk |:( .

Acties:
  • 0 Henk 'm!

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

Janoz

Moderator Devschuur®

!litemod

Een : (dubbele punt) vind ik persoonlijk nu niet echt teken dat ik onder de 'platte envoudige tekst' vindt vallen, zeker in de context van bestandsnamen. Ik zie wle allemaal substring geneuzel, dus misschien wordt hij gefilterd. Zou je een lijstje kunnen posten van de ge-echode bestandsnamen die hij aan zou moeten maken?

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


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Je doet een explode op #. Wat gebeurt er met de regeleinde die na het # staat ;)

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • w00d
  • Registratie: Juni 2004
  • Laatst online: 09:09
Janoz schreef op vrijdag 29 mei 2009 @ 16:55:
Een : (dubbele punt) vind ik persoonlijk nu niet echt teken dat ik onder de 'platte envoudige tekst' vindt vallen, zeker in de context van bestandsnamen. Ik zie wle allemaal substring geneuzel, dus misschien wordt hij gefilterd. Zou je een lijstje kunnen posten van de ge-echode bestandsnamen die hij aan zou moeten maken?
Op dit dubbele punt heb ik helaas geen controle. Maar kan je vertellen dat de vorige data die een soort gelijk script moest inlezen, nog veel complexer was.

En idd hier: $drive = substr($info[$day][$server][1],0,-1); haal ik de dubbele punt weg.

Wat hij moet uitspugen is bijv: server4c.txt server4d.txt server5c.txt etc. Dus per server, per drive een losse txt file.

@LuCard: Ik vat em even niet. Het explode op de # gaat opzich goed.

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

w00d schreef op vrijdag 29 mei 2009 @ 20:54:
[...]


Op dit dubbele punt heb ik helaas geen controle. Maar kan je vertellen dat de vorige data die een soort gelijk script moest inlezen, nog veel complexer was.

En idd hier: $drive = substr($info[$day][$server]\[1],0,-1); haal ik de dubbele punt weg.

Wat hij moet uitspugen is bijv: server4c.txt server4d.txt server5c.txt etc. Dus per server, per drive een losse txt file.

@LuCard: Ik vat em even niet. Het explode op de # gaat opzich goed.
Doe eens een var_dump of een zet de servernaam tussen twee delimiters. Er zit waarschijnlijk een ontzichtbaar character voor de naam,

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • w00d
  • Registratie: Juni 2004
  • Laatst online: 09:09
Zal et dinsdag is proberen.

Acties:
  • 0 Henk 'm!

  • w00d
  • Registratie: Juni 2004
  • Laatst online: 09:09
Je hebt gelijk, is zitten 2 spatie voor iedere naam. Komt doordat alle gegevens, op de eerste regel na, op een eigen regel staan. Daarom ging alleen de eerste server goed en de rest niet.

Thnxs voor tip.
Pagina: 1