Invalid PHP_SELF Path & Cacti & Ubuntu 7.10

Wenn nach der Installation oder Update Cacti mit oben genannten Error aufwartet hilft das Anpassen der /usr/share/cacti/site/include/config.php

Man ersetzt den Teil zw. /* Sanity Check on “Corrupt” PHP_SELF */ und /* we don’t want these pages cached */ mit:

[code lang=”php”]
if ((!is_file($_SERVER[“PHP_SELF”])) && (!is_file($config[“base_path”] . ‘/’ . $_SERVER[“PHP_SELF”]))) {
if (!is_file($_SERVER[“DOCUMENT_ROOT”] . $_SERVER[“PHP_SELF”])) {
if (!((is_file($_SERVER[“SCRIPT_FILENAME”])) && (substr_count($_SERVER[“SCRIPT_FILENAME”], $_SERVER[$
if (!((is_file($_SERVER[“SCRIPT_FILENAME”])))) {
echo “\nInvalid PHP_SELF Path\n”;
exit;
}
}
}
}
[/code]

A Cacti Bug

PHP XML Parser for Twitter

Neue Version der PHP Klasse um Twitter für PHP zu nutzen. Die Klasse ist noch immer in Entwicklung. Neu dazugekommen ist die Möglichkeit über den Konstruktor den Rückgabetyp der Funktionen festzulegen. Man kann zwischen SimpleXML Object (“OBJECTXML”), Raw XML (“RAWXML”) und einem Array (“ARRAYXML”) wählen. Das Array wird dynamisch erzeugt und der Code könnte auch für ander XML Anwendungen verwendet werden. Danke hier an PHP.net für das Sample.

There is a new Version of the PHP Class to easily use twitter inside your PHP applications. Be aware the class is still under development. A new feature is to set the return type when creating the object via the constructor. You can choose between SimpleXML object (“OBJECTXML”), raw XML (“RAWXML”) and an array (“ARRAYXML”). The array will be created dynamically and so you can also use this part of the code for every other XML application. Thanks to PHP.net for the code sample.

 

SourceCode

PHP XML Parser for Twitter

Mich hat es mal wieder gereizt etwas PHP zu programmieren. Aus diesem Grund wollt ich mal versuchen ein Serendipity Plugin zu schreiben. Naheliegend für mich war und ist ein Twitter Sidebar Plugin und die ersten Erfolge sind schon zu verzeichnen 😉

David Billingham hat für den Zugriff auf Twitter eine kleine PHP Classe gebastelt die ich mir gleich mal zu gemüte geführt habe. Nett, einfach und funktional ist sie. Nur unter PHP4 ist sie nicht mehr so einfach zu handhaben, da hier XML Transformationen etwas mühseliger sind und es SimpleXML nicht gibt.

Darum ist mein erster Erfolg dahinsichtlich zu verbuchen, dass ich diese Class etwas erweitert habe und man nun anstatt des PlainXML Textes ohne SimpleXML-Support eine nettes Array bekommt. Mit dem arbeitet es sich leichter, doch werden noch nicht alle Twitter Features von meinen Codeanpassungen unterstützt. Doch für die ersten Gehversuche und Spielereien stell ich den Code mal zur Verfügung und programmiere mal weiter 😉

SourceCode

Einige hilfreiche Links für XML und PHP

XML mit PHP und Expat parsen

Parsing XML using PHP4

PHP5 – Einführung XML mittels SimpleXML und DOM

Text Strings mit PHP kürzen

Diese Funktion verkürzt einen Text-String auf eine vorgegebene Anzahl von Zeichen und fügt drei Punkte (…) an das Ende. Weiters wird das letzte Wort nicht einfach abgeschnitten sondern als ganzes Wort dargestellt und somit die vorgegebene Zeichenanzahl etwas abgerundet.

Beispiel original

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Beispiel gekürzt

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod…

Code

function ShortenText($text) {
// Change to the number of characters you want to display
$chars = 25;

$text = $text.” “;
$text = substr($text,0,$chars);
$text = substr($text,0,strrpos($text,’ ‘));
$text = $text.”…”;

return $text;
}

Ajax Live Search

Wer kennt es nicht – man gibt ein paar Buchstaben in ein Textfeld ein und unter dem Textfeld klappt ein kleines Fenster auf das einem Vorschläge liefert nach was man suchen kann.

Noch schöner ist, wenn man noch genau diese Vorschläge bekommt, für welche man auch wirklich Ergebnisse bekommen kann.

Was braucht man dazu:

Der Artikel von eDevil beschreibt sehr gut wie man vorgehen muss um eine solche Suche aufzubaun und benötigt eigentlich keine weitere Erklärung.

Aufpassen muss man unbedingt wenn man die möglichen Suchwörter direkt aus der Datenbank ausliest.

  • Unbedingt mit LIMIT im SQL Statement arbeiten. Dies bringt für den User zwar nicht alle Möglichkeiten sofort zum Vorschein – erhöht aber die Reaktionszeiten ungemein.
  • DISTINCT sollte man wenn möglich auch im SQL Statement einbauen um nicht doppelte Vorschläge zu bekommen.
  • Wenn man die Anzahl der Suchergebnisse mit LIMIT nicht verringern will, wäre es vielleicht sinnvoll die Suche erst aber zB: dem 3ten eingegeben Zeichen anzufangen.

Beispiel für ein SQL Statement:

SELECT DISTINCT(naam), Id FROM tblName WHERE naam LIKE �??�?�.$_POST[autocomplete].�?�%�?? ORDER BY naam ASC

Technorati Tags: , , , , , , ,

Javascript und AJAX Debugging leicht gemacht

Für alle die sich auf Grund des anhaltenden Hypes mit AJAX bzw. demzufolge auch mehr mit JavaScript beschäftigen stellt sich immer wieder die Frage wie man hier am einfachsten debuggen kann.

Wer Safari für das Testen seiner Websites verwendet hat es etwas schwerer als Firefox-User, aber auch hier gibt es eine Möglichkeit wie uns der Apple Safari Develober FAQ verspricht.

Safari enthält ein eigenes “Debug” Menu welches man jedoch zu allererst mittels

defaults write com.apple.Safari IncludeDebugMenu 1

einschalten muss. Danach erlaubt einem Safari verschieden Infos mittels Javascript in ein Debug Window zu schreiben. Der Befehl um während der Lauftzeit in das Debug Window schreiben zu können lautet:

window.console.log("I think therefore I code!");

Einfach an eine Stelle im JavaScript Code diese oder ähnliche Zeilen einfügen und beim Ausführen wird dann “hoffentlich” die Information dort stehen 😉

Leichter geht das ganze mit Firefox und der Tamper Data Extension die noch viel mehr kann. Diese fängt den Traffic aller Requests und Responses zwischen Client und Server ab. Somit kann man angefangen vom Header bis hin über den gesendeten Body alles auslesen. Was es natürlich erleichtert AJAX Calls zu debuggen.

Weiters kann man POST, GET Variablen, Headers und und und während des Absenden ändern.

Technorati Tags: , , , , , , , ,

Limit and Offset SQL Pagination

Man hat 1000te Einträge in einer Datenbank. Alle auf einmal anzuzeigen würde den Browser und meiste auch die Internetleitung überfordern. Darum greifen viele Leute bei ihren Website Projekten auf eine alt bewährte Art zurück.

Sie lassen nur eine gewissen Anzahl von Einträgen anzeigen und den User lassen sie einfach nach vorne oder zurück blättern. (siehe Google)

Doch wie lässt man solche in Problem in der Praxis. Man kann alle Einträge in ein Array, Resultset, eine Hashtable oder ähnliches laden und dort dann nur die Werte ausgeben die man benötigt. Ein paar for oder while Schleifen sind hier dann meist im Einsatz.

Doch warum nicht den Traffic an der richtigen stelle beschränken und den Programmieraufwand reduzieren?

Die richtige Stelle meiner Meinung ist in diesem Fall bei SQL anzusetzen:

Hilfreich dabei ist die Möglichkeit das LIMIT Keyword mit OFFSET zu kombinieren.

LIMIT reduziert die zurück gebenen Results eines SQL Queries:

SELECT column FROM table

LIMIT 10

Um nun alle Einträge von 1 bis 10 zu bekommen brauchen wir nichts großartiges ändern. Um jedoch die Einträge von 11 bis 20 zu bekommen nutzen wir das OFFSET Keyword:

SELECT column FROM table

LIMIT 10 OFFSET 10

Hexerei perfekt und Traffik gespart, Geschwindigkeit angehoben und den User glücklich gemacht. Was natürlich keiner von den Usern weiß: “Wir haben uns (dem Programmmierer) Arbeit gespart 😉