Kategorie: PHP RSS-Feed für diese Kategorie
PHP: Klasse zur statistischen Fehlererrechnung und Prozessfähigkeitsuntersuchung
In diesem Beitrag geht es darum, aus festgestellten Messergebnissen, die zum Beispiel in einer Datenbank abgelegt sind, eine sogenannte Prozessfähigkeitsanalyse zu erstellen. Diese wird beispielsweise in der Automobilindustrie für die Qualitätssicherung gefordert und benötigt. Bekannte geforderte Werte sind der Prozessfähigkeitsindex CpK – eine Kennzahl zur statistischen Bewertung eines Prozesses – oder ebenenfalls der Six-Sigma-Wert sowie einige andere Werte. Mininum, Maximum, Durchschnitt, Median, Abstand (Range), Modus, Moment, Varianz, Standardabweichung, Standardfehler, Schiefe, Woelbung (Exzess), Variationskoeffizient, Prozessfaehigkeitsindex, Wahrscheinlichkeitsdichtefunktion, Verteilungsfunktion, PPM und Fehlerhaftigkeit können mit unten gelisteter PHP-Klasse bestimmt werden. Ausgangslage der zu berechnenden Werte zur Prozessfähigkeitsanalyse können Messdaten aus dem Messlabor sein, die
PHP: Daten von api.xing.com abrufen
Seit letztem Jahr bietet Xing eine API an, mit der man Daten zum Beispiel seines eigenen Profils abrufen kann. Hierbei verwendet Xing zur Authentifizierung das OAuth-Protokoll in Version 1. Um die API nutzen zu können wird ein Account im Xing Developer Bereich benötigt, sowie ein Consumer Key und ein Token. Der Developer-Account kann mit dem eigenen Profilaccount „freigeschalten“ werden; der Consumer Key (Test) kann über das Webinterface von dev.xing.com erstellt werden. Um daraufhin an den für den Abruf der Xing-Daten benötigten Access-Token zu kommen, empfiehlt es sich, das von Xing bereitgestellte Test-Script (in ruby geschrieben) auf https://dev.xing.com/docs/examples zu verwenden. Hier
PHP: Versenden von eMails über einen (entfernten) SMTP-Server
Über fsockopen() können mit PHP TCP-Verbindungen aufgebaut werden – so auch zu einem SMTP-Dienst. Beim Versenden von eMails müssen bei der SMTP-Sitzung natürlich bestimmte Vorgaben und Abläufe erfüllt sein (siehe auch RFC 821). Die kleine Klasse „eMail“ ermöglicht das Versenden von eMails auf recht einfache Weise. Allerdings ist sie an die Bedürfnisse des deutschen Zeichensatzes angepasst. Bei der Authentifizierung sollte darauf geachtet werden, dass der SMTP-Server die Methode der Authentifzierung auch unterstützt bzw. zulässt. Unten in diesem Beitrag ist ein Beispiel, wie dann über die Klasse „eMail“ eine HTML-eMail versendet werden kann. <?PHP /* * this is a small
Plugin: mechanic-visitor-counter v.1.8
Da sysalyser.de dringend nach fünf Jahren ein neues Layout benötigte, habe ich mich zur leichteren Handhabe dafür entschieden, ein vorgefertigtes Tool zur Datenverwaltung zu verwenden. Somit bin ich bei WordPress gelandet und habe dabei auch das Plugin „mechanic-visitor-counter“ installiert. Hier ist mir allerdings aufgefallen, dass die Art des Loggings nicht meinen Vorstellungen entsprach. Wiederkehrende Benutzer werden zwar nach Tagen getrennt, aber nicht nach IP, da die IP-Adresse der primäre Schlüssel der dahinterliegenden mySQL-Tabelle ist (nachzuvollziehen bei Standard-Installation der Version 1.8 in der originalen Datei [DocumentRoot]/wp-content/plugins/mechanic-visitor-counter/wp-statsmechanic.php). Daher ist ein mehrfaches Ablegen der IP-Adresse in der Tabelle nicht möglich. Das bedeutet, dass
JpGraph: Klassenerweiterung „ErrorPlotValues“

Die Klasse „Plot“ bzw. „ErrorPlots“ von JpGraph bot nicht die Möglichkeit, die entsprechenden Werte darzustellen, die den Balken bestimmen. Der Entwickelr von JpGraph konnte sich leider auf meine Anfrage nicht melden. Daher gebe ich die Klassenerweiterung (recht spezifisch) hier bekannt: <?PHP /* * a small class extension for displaying percentage or absolute values * inside ErrorPlots * by Hofmann R. Julian // 16. Januar 2009 * # new ErrorPlotValues( # [array like for normal ErrorPlot], # [xValues array like for normal ErrorPlot], # [FALSE = percentage, TRUE = absolute values], # [width of the upper and lower line] # );
JpGraph: Beispiel: RadarPlot: Hits nach Stunde

<?PHP function gProzent($alle, $anteil, $stellen = 2) { if ($anteil > 0) return (round(($anteil / ($alle / 100 )), $stellen)); else return 0; } for ($z = 12; $z > 0; $z–) { if ($z < 10) $z = "0{$z}"; $legende[] = "{$z}\n".((int) $z + 12); } $handle = fopen("access_log", "r"); while (!feof($handle)) { $zeile = fgets($handle, 4096); $gValidHit = explode("\"", $zeile); if (strstr($gValidHit[1], "?")) { $p = explode(" ", $zeile); $aHits[(int) substr($p[3], 13, 2)]++; } } fclose ($handle); for ($z = 0; $z <= 11; $z++) $aHitsPM[$z] = $aHits[(11 – $z)]; for ($z = 0; $z <= 11;
JpGraph: Beispiel: LinePlot: Statistik des entstandenen Traffics

<?PHP function sBrowser($stext) { if (strpos($stext, "Googlebot") > 0) return (2); if (strpos($stext, "oogle-Sitemaps") > 0) return (2); if (strpos($stext, "Yahoo!") > 0) return (2); if (strpos($stext, "snbot") > 0) return (2); if (strpos($stext, "Safari") > 0) return (1); if (strpos($stext, "Firefox") > 0) return (1); if (strpos($stext, "MSIE") > 0) return (1); if (strpos($stext, "pera/") > 0) return (1); if (strpos($stext, "BonEcho") > 0) return (1); if (strpos($stext, "ozilla") > 0) return (1); return (NULL); } $Monat = "Nov/2008"; $lMonat = "Oct/2008"; $monate = array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"); $WochenTage =
JpGraph: Beispiel: ScatterPlot: Statistik über die Abweichung der Besucher nach Tagen

<?PHP /* * Suchmaschinen sind inbegriffen. */ $Monat = "Nov/2008"; $Anzahl = date("t", strtotime("01. ".(str_replace("/", " ", $Monat)))); $WochenTage = array("So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"); for ($z = 1; $z <= $Anzahl; $z++) { $aBesucher[] = 0; $xAchse[] = $z; } $handle = fopen("access_log", "r"); while (!feof($handle)) { $zeile = fgets($handle, 4096); $gURL = explode("\"", $zeile); if (strstr($gURL[1], "?")) { if (strstr($gURL[0], $Monat)) { $p = explode(" ", $zeile); $ts = strtotime((substr($p[3], 8, 4))."-" .(date("m", strtotime("01. ".(str_replace("/", " ", $Monat))))) ."-{$p[3][1]}{$p[3][2]} ".(substr($p[3], 13, 8))); $Besucher[$p[0]][0] = $ts; if ( (!($Besucher[$p[0]][1])) || (($oBrowser <> $fBrowser) && ($p[0] ==
JpGraph: Beispiel: PiePlotC: Statistik der Besucher nach Land bzw. Domain

<?PHP function gDomain($sDomain, &$vDomains) { $c = geoip_country_code_by_name($sDomain); if (in_array($c, $vDomains)) return (array_search($c, $vDomains)); return (count($vDomains) – 1); } /* * Die hier dargestellte Ermittlung der Domains spiegelt nicht die * tatsaechliche Verteilung der Domains der Besucher da, da mehrfache * Besuche gleicher IP-Adressen nicht beruecksichtig werden. */ $Domains = array("Deutschland", "Oesterreich", "Schweiz", "andere"); $vDomains = array("DE", "AT", "CH", "%"); for ($z = 0; $z < count($Domains); $z++) $aDomains[$z] = 0; $handle = fopen("access_log", "r"); while (!feof($handle)) { $zeile = fgets($handle, 4096); $iDomain = explode("\"", $zeile); if (strstr($iDomain[1], "?")) { $p = explode(" ", $zeile); if (!$bDomains[$p[0]]) $bDomains[$p[0]] =
JpGraph: Beispiel: LinePlot: Statistik der Besucher, die von google kamen

<?PHP $monate = array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"); foreach ($monate as $monat) $liste[$monat] = array(); /* * access_log wurde vorher mit * "grep '/2008:' access_log" auf das Jahr 2008 reduziert */ $handle = fopen("access_log", "r"); while (!feof($handle)) { $zeile = fgets($handle, 4096); $monat = explode("/", $zeile); $monat = $monat[1]; if ($p = (strstr($zeile, "google"))) { if ($p = (strstr($p, "?"))) { $p = substr($p, 1); if ($q = explode("&", $p)) { foreach ($q as $t) { if (substr($t, 0, 2) == "q=") { $t2 = explode("\"", $t); $liste[$monat][] = ($t2[0]) ? $t2[0]