Permalänk
Medlem

PHP printerdebitering Hilfe!

Hej
Jag sitter på en praktikplats och har fått en skrivarserver att peta i. Det som nu finns kvar att leka med är ett debiteringssystem för utskrifter, men det räknar inte riktigt rätt och oturligt nog kan jag noll och ingen PHP.

Loggfilen (/billing/prints) ser ut som följer..

Fri Feb 24 13:02:39 CET 2012 192.168.16.45::00:09:DF:81:B7:6B::pew::1::2655::skrivare_vaning_2::Fri-Feb-24-13:02:38-CET-2012 192.168.16.45::00:09:DF:81:B7:6B::pew::2::2656::HP_LaserJet_3015::Fri-Feb-24-13:26:04-CET-2012 192.168.16.45::00:09:DF:81:B7:6B::pew::4::2657::skrivare_vaning_3::Fri-Feb-24-14:15:46-CET-2012

IP :: MAC :: user :: antal sidor :: printjobb :: printer :: datum
problemet är att antal sidor inte räknas korrekt utan endast räknas som en utskrift per rad.

<?php echo "<html>\n"; echo "<head>\n"; echo "<title>\n"; echo "Kostnads-logg för skrivare på Malmö Arena.\n"; echo "</title>\n"; echo "</head>\n"; echo "<body style=\"font-size: 12px; font-family: tahoma,arial;\">\n"; echo "<b><u>Kostnads-logg för skrivare på Malmö Arena.</u></b><br />"; echo "<br />"; $sidpris["HP_LaserJet_3015"]=0.1; $sidpris["skrivare_vaning_2"]=0.5; $sidpris["skrivare_vaning_3"]=0.5; $sidpris["skrivare_vaning_4"]=0.5; $sidpris["HP_Color_LaserJet_CP2025dn"]=0.5; $sidpris["HP_Color_LaserJet_CP2025dn_"]=0.5; $sidpris["HP_Color_LaserJet_2600N"]=0.5; $sidpris["LaserJet_4"]=0.1; $loggfilen="/billing/prints"; if (file_exists($loggfilen)) { $filen=$loggfilen; $fil=fopen($filen,"r") or die("Filen verkar inte kunna läsas!"); $data=fread($fil,filesize($filen)); fclose($fil); echo "Nu är filen inläst.<br />"; $rad=explode("\n",$data); echo "Filen består av " . count($rad) . " rader.<br />"; echo "<br />\n"; $counter=""; $tmp = array(); for ($i=0; $i<count($rad); $i++) { $del=explode("::",$rad[$i]); $tmpip=$del[0]; $tmpmodel=$del[5]; $tmp[$tmpip][ip]=$del[0]; //save value in an array $tmp[$tmpip][mac]=$del[1]; $tmp[$tmpip][name]=$del[2]; $tmp[$tmpip][pages]=$del[3]; $tmp[$tmpip][model]=$del[5]; $tmp[$tmpip][time]=$del[6]; if ($del[0] && $del[5]) $counter[$tmpip][$tmpmodel]++; } foreach($counter as $key=>$value) { echo "<b>".$tmp[$key][name]."</b> (IP: $key):<br />"; // skriv user echo $tmp[$key][mac]."<br />"; $totalt_pris=0; foreach($counter[$key] as $key2=>$value2) { echo "- $key2, " . $counter[$key][$key2] . " pages.<br />"; if ($sidpris[$key2]) $totalt_pris=$totalt_pris + $sidpris[$key2] * $counter[$key][$key2]; } echo "<b>Totalt $totalt_pris kr.</b><br /><hr>"; } } else { echo "Loggfilen verkar inte hittas!<br />"; } echo "</body>\n"; echo "</html>\n"; ?>

Kan det möjligen finnas någon enkel lösning på mitt problem, eller ska hitta något annat att göra? =P

Permalänk
Medlem

i den sista for-loopen så blir $key2 alltid "skrivare_va", vilket gör att if-satsen aldrig blir uppfylld och leder till att $totalt_pris alltid är 0
prova att använda var_dump($vad_du_nu_vill_kolla); för att se variabler och arrayers innehåll (underlättar debugging väsentligt)

EDIT: Jag har tyvärr inte tid just nu till att titta efter vart det faktiskt failar i tilldelningen av $counter, men det kan du säkert fixa själv

Permalänk
Medlem

Bara snabbkollade på vad den gör så betrakta detta som att tänka högt.

Är det inte den här if-satsen som möjligtvis ställer till det om den bara räknar utskriftsjobb?

if ($del[0] && $del[5]) $counter[$tmpip][$tmpmodel]++;

Vad händer om du ändrar den till att räkna antalet sidor istället? Det vill säga:

if ($del[0] && $del[5]) $counter[$tmpip][$tmpmodel]+= $del[3];

//C

Permalänk
Medlem

Tack som tusan! Nu ser allt mycket bättre ut =D