PHP, sortieren nach HTTP Fehlermeldungen
ordinary
- php
Hallo miteinander!
Kann mir bitte bitte Jemand weiterhelfen? Es ist leider auch etwas kompliziert zum nachvollziehen... :(
Es handelt sich um ein Tool, mit dem man URLs überprüfen kann, und diese werden dann in ein Mail geschrieben und an denjenigen gesendet, der die Anfrage gestellt hat:
Ich sollte die Links nach deren Fehlermeldungen sortieren (z.B. Status: HTTP/1.1 404 Object Not Found
).
und nun das Problem, mit dem ich Schwierigkeiten habe:
$alle_links[0]["url"] = $url; //Hier wird URL eingegeben, die überprüft werden soll
$alle_links[0]["status"] = ""; //Hier kommt die Fehlermeldung rein
Weiter unten im Code ist das:
// Hier ein Case der die verschiedenen Statusmeldungen abfängt
$status_code_teile = split(" ", $alle_links[$index]["status"]);
switch($status_code_teile[1])
{
case 200: // HTTP/1.1 200 OK
$ok++;
usw.
Die folgende Codezeile kommt dann im Mail, am Schluss wird der Link eingefügt.
if($status_code_teile[1] != 200){
$problem_links[] = "Die Page: ".$alle_links[$index]["parent"]."\nverweist auf: ".$alle_links[$index]["url"]."\nStatus: ".$alle_links[$index]["status"];
}
$index++;
Und jetzt: Man kann die fehlenden Links zählen, mit count();
, jedoch eben nicht sortieren! Einmal hat es auch sortiert, aber ich weiss nicht genau nach was, wahrscheinlich nach dem Index und nicht nach dem Status...
Bitte bitte helft mir.. Ich steh etwas unter Zeitdruck : (
Liebe Grüsse
Sandy
Hello,
fangen wir doch mal vorne an, bevor DU alles vermischt hast.
Was bekommst Du an Daten?
Wie sind die formatiert?
Wie sollen die Daten nachher, nachdem DU sie in die Hand genommen hast, aussehen?
Bitte ein Beispiel mit fünf Datensätzen, soferne es Datensätze gibt!
kleiner persönlicher Hinweis:
-----------------------------
Ob Du Zeitdruck hast, interessiert hier niemanden, es sei denn, Du möchtest darüber auch noch eine Unterhaltung führen. Ich würde also an Deiner Stelle diesen Satz aus Deinem Gedächtnis streichen. :-)
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hello,
fangen wir doch mal vorne an, bevor DU alles vermischt hast.
Ich hab das Programm so bekommen und muss nun fortfahren...
Was bekommst Du an Daten?
Also auf der Mail stehen solche Meldungen:
Folgende 19 Links sind nicht okay:
1 Die Page: http://intranet.***.ch/index/default.asp
verweist auf: http://intranet.***.ch/index/css/tooltip.css
Status: HTTP/1.1 404 Object Not Found
2 Die Page: http://intranet.***.ch/index/default.asp
verweist auf: https://scd.***.com/db4/start.d4w?lang=de
Status: HTTP/1.0 999 HTTPS not checked
3 Die Page: http://intranet.***.ch/index/default.asp
verweist auf: http://www.***.ch/index/default.asp
Status: HTTP/1.1 302 Found
4 Die Page: http://intranet.***.ch/index/default.asp
verweist auf: http://intranet.***.ch/index
Status: HTTP/1.1 302 Object Moved
5 Die Page: http://intranet.***.ch/index/default.asp
verweist auf: http://intranet.***.ch/hr/
Status: HTTP/1.1 302 Object moved
Wie sind die formatiert?
Wie meinst du formatiert?
--> Alles wird in eine Variable geschrieben (Schlussendlich sieht das so aus wie die Beispiele oben)
if($status_code_teile[1] != 200){
$problem_links[] = "Die Page: ".$alle_links[$index]["parent"]."\nverweist auf: ".$alle_links[$index]["url"]."\nStatus: ".sort($alle_links[$index]["status"]);
}
und in die Mail geschrieben wird das so:
if (count($problem_links) > 0)
{
$e_mail .= "Folgende ".(count($problem_links))." Links sind nicht okay:\n\n"; //Das ist die erste Zeile in obigen Beispiel
{
foreach ($problem_links as $i => $ll)
{
$e_mail .= ($i+1)." ".$ll."\n\n";
}
}}
Wie sollen die Daten nachher, nachdem DU sie in die Hand genommen hast, aussehen?
Danach sollten alle Meldungen von "Status" sortiert sein, das heisst, dass z.B. alle Status: HTTP/1.1 302 Object Moved
beieinander sein sollen und die anderen Meldungen ebenfalls.
Danke wenn du mir helfen kannst..
Hello,
na, dann nochmal von vorne. Ich verstehe jetzt nämlich nur noch Bahnhof.
Bekommst Du nun ein Mail mit Klartext, so wie Du die abgebildet hast, oder sollst Du eine solche Mail am Ende erzeugen?
Wie _bekommst_ Du die Daten geliefert?
Welche Verarbeitung soll vorgenommen werden?
(bitte _ohne_ irgendwelchen Programmcode mit Worten erklären)
Wie sollen sie nach der Verarbeitung aussehen?
Sind meine Fragen zum Sachverhalt jetzt verständlich genug gestellt?
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
na, dann nochmal von vorne. Ich verstehe jetzt nämlich nur noch Bahnhof.
sooorryy...
Bekommst Du nun ein Mail mit Klartext, so wie Du die abgebildet hast, oder sollst Du eine solche Mail am Ende erzeugen?
Nein, das Programm ist komplett! Ich muss das nun so machen, dass die Statusmeldungen sortiert sind (ev. mit Überschrift, aber das ist Nebensache).
- Wie sollen sie nach der Verarbeitung aussehen?
In dem Tool geht es ja darum, Links im Intranet zu überprüfen, ob sie ins Leere zeigen oder falsch verlinkt sind (Broken Links).
Nun geben diese Links Statusmeldungen, was an diesen falsch ist.
Ein User sollte z.B. sagen können: "Heute bearbeite ich alle, die auf kein Objekt gerichtet sind". Also soll man diese Statusmeldungen gruppieren.
- Welche Verarbeitung soll vorgenommen werden?
(bitte _ohne_ irgendwelchen Programmcode mit Worten erklären)
Ich kann diese Statusmeldungen sortieren, jedoch weiss ich nicht genau, nach was es sortiert, ob nach Index oder was weiss ich.
Hab ich das nun gut genug erklärt?
Hello,
Hab ich das nun gut genug erklärt?
Nein. Leider nicht.
Außerdem kann ich Dir bei fertigen Programmen nicht helfen, wenn ich das Programm nicht habe und die passende Dokumentation dazu. Es ist meistens nicht so schwierig, zu sehen, was ein Programmierer gemacht hat, aber es ist immer am schwierigsten, sich zu denken, was er eigentlich machen wollte...
Um Daten zu sortieren, muss man sie typgerecht separieren. Damit aber der Zusammenhang zwischen den separierten Daten nicht verloren geht, muss man diese indizieren. Gleicher Index bedeutet dann immer Zugehörigkeit zum gleichen Datensatz.
Um Daten separieren zu können, muss man das Satzformat kennen, oder man muss Auskunft über das Format der Daten haben, in dem sie regelmäßig auftreten. Und man muss wissen, unter welchen Umständen Unregelmäßigkeiten auftreten könnten.
Ich glaube nicht, dass es hier irgendjemand anders geht, als mir.
Man könnte Dir nur noch ein paar zusätzliche Nadeln in Deinen Heuhaufen schmeißen. Wenn dann eine zufällig das Problem trifft, bist Du einen halben Schritt (con vielen) weiter und weißt gar nicht, waruj eigentlich.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hello,
»» Hab ich das nun gut genug erklärt?
Nein. Leider nicht.
Also gut, dann nicht so tragisch. Werde ich noch etwas pröbeln..
Schöne Auffahrt..
Gruss
ordinary
Hi,
Und jetzt: Man kann die fehlenden Links zählen, mit
count();
, jedoch eben nicht sortieren! Einmal hat es auch sortiert, aber ich weiss nicht genau nach was, wahrscheinlich nach dem Index und nicht nach dem Status...
Sortierfunktionen findest du bei den Array-Funktionen aufgeführt.
MfG ChrisB
Hello,
zur Info
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hallo Tom,
soeben entfernt, danke für die Info.
File Griese,
Stonie
(Hallo|Hi|Howdy) ordinary,
Es handelt sich um ein Tool, mit dem man URLs überprüfen kann, und diese werden dann in ein Mail geschrieben und an denjenigen gesendet, der die Anfrage gestellt hat:
Ich sollte die Links nach deren Fehlermeldungen sortieren (z.B.Status: HTTP/1.1 404 Object Not Found
).und nun das Problem, mit dem ich Schwierigkeiten habe:
$alle_links[0]["url"] = $url; //Hier wird URL eingegeben, die überprüft werden soll
$alle_links[0]["status"] = ""; //Hier kommt die Fehlermeldung rein
> Weiter unten im Code ist das:
> ~~~php
> // Hier ein Case der die verschiedenen Statusmeldungen abfängt
> $status_code_teile = split(" ", $alle_links[$index]["status"]);
> switch($status_code_teile[1])
> {
> case 200: // HTTP/1.1 200 OK
> $ok++;
>
usw.
Die folgende Codezeile kommt dann im Mail, am Schluss wird der Link eingefügt.
if($status_code_teile[1] != 200){
$problem_links[] = "Die Page: ".$alle_links[$index]["parent"]."\nverweist auf: ".$alle_links[$index]["url"]."\nStatus: ".$alle_links[$index]["status"];
}
$index++;
>
> Und jetzt: Man kann die fehlenden Links zählen, mit ` count(); `{:.language-php}, jedoch eben nicht sortieren! Einmal hat es auch sortiert, aber ich weiss nicht genau nach was, wahrscheinlich nach dem Index und nicht nach dem Status...
> Bitte bitte helft mir.. Ich steh etwas unter Zeitdruck : (
Jaaa, das ist natürlich ein schlagendes Argument! ;-)
Es wäre außerordentlich interessant, zu wissen, welche Variable du count() übergeben hast. Die gleiche ist wahrscheinlich auch die, die sortiert werden muss. Leider hast du sie nicht explizit erwähnt. Ich vermute mal, dass es sich um $alle\_links handelt. Das ist (auch so eine Vermutung) ein dickes, mehrfach verschachteltes [Array](http://php.net/manual/de/book.array.php).
Wenn man so ein verschachteltes Array nach einem Kriterium sortieren möchte, dass nicht von den Standard-Array-Sortierfunktionen abgedeckt wird, dann muss man [usort()](http://php.net/manual/de/function.usort.php) oder einen seiner Kumpels wie uksort() usw. zu Hilfe nehmen. Der Funktion usort() übergibst du zwei Argumente:
1\.) Das zu sortierende Array (logisch!)
2\.) Den Namen einer Vergleichsfunktion.
Die Vergleichsfunktion entscheidet, nach welchem Untereintrag in $alle\_links sortiert werden soll.
Da ich zu faul bin, mir aus deinen Code-Teilstücken jetzt den passenden Eintrag herauszupulen (wenn er überhaupt vorhanden ist), solltest du folgendes in dein Script einbauen:
~~~php
// die Vergleichsfunktion (nur zum Testen):
function vergleich($a, $b) {
echo '<pre>';
ob_start();
var_dump($a);
echo htmlspecialchars(ob_get_clean());
echo '</pre>';
exit();
}
// ...
// die Stelle in deinem Script, an der du die Sortierfunktion einbauen wolltest
usort($alle_links, 'vergleich');
Das gilt für den Fall, dass die Ausgabe des PHP-Scripts als HTML im Webbrowser landet.
Falls eine Textausgabe genügt, kann vergleich() gekürzt werden:
function vergleich($a, $b) {
var_dump($a);
exit();
}
Das zeigt dir an, was die noch zu schreibende echte Vergleichsfunktion sieht. Irgendein Eintrag in diesem (sicher ebenfalls verschachtelten) Array $a, muss mit dem korrespondierenden Eintrag im Array $b verglichen werden. Dafür gibt es (je nach Datentyp) verschiedene Vergleichsfunktionen oder -operatoren in PHP.
Liebe Grüsse
Sandy
MffG
SpongeBob^WEisFuX
Hello,
Wenn man so ein verschachteltes Array nach einem Kriterium sortieren möchte, dass nicht von den Standard-Array-Sortierfunktionen abgedeckt wird, dann muss man usort() oder einen seiner Kumpels wie uksort() usw. zu Hilfe nehmen.
Man kann auch das Array von Anfang an geschickter aufbauen. Aber ohne Kenntnis der zu behandelnden Daten und wie sie angeliefert werden, ist das eben schwierig.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Wow, ich werde das dann nächste Woche ausprobieren!
Danke für deine Hilfe!
Du hast mich wenigstens nicht blöd angepöbelt. Danke : )
Lieeebe Grüsse
Sandy
MffG
SpongeBob^WEisFuX
Hi alter,
Du hast mich wenigstens nicht blöd angepöbelt. Danke : )
wie bistn du drauf?
Hast wohl lange keon arsch voll gekriegt?
(Hallo|Hi(ho)|Nabend) Pöbler,
»» Du hast mich wenigstens nicht blöd angepöbelt. Danke : )
wie bistn du drauf?
Du hast das missverstanden. Der Satz bezog sich ganz sicher darauf, dass ich klug oder gescheit (!= blöd) gepöbelt hatte. ;-)
Hast wohl lange keon arsch voll gekriegt?
Und was sollte das bringen?
MffG
EisFuX
»» »» Du hast mich wenigstens nicht blöd angepöbelt. Danke : )
»» wie bistn du drauf?
Du hast das missverstanden. Der Satz bezog sich ganz sicher darauf, dass ich klug oder gescheit (!= blöd) gepöbelt hatte. ;-)
Ja da hast du Recht! : )
»» Hast wohl lange keon arsch voll gekriegt?
Und was sollte das bringen?
MffG
EisFuX
Ist egal : ) Danke EisFuX.