Beiträge der Kategorie default

MySQL Shell-Kommandos

Datenbank Dump: nach -u folgt der Bentuzername, bei -p wird ein Passwort verlangt (man kann es direkt dahinter angeben, sollte man aber nicht), bei -v bekommt man angezeigt, was grade passiert. Und mit > dateiname.sql wird die Ausgabe in die gleichnamige Datei geleitet.

mysqldump -u benutzername -p -v datenbankname > dateiname.sql

Datenbank Dump wieder einspielen:

mysql -u benutzername -p -v datenbankname < dateiname.sql

Tags:

Geschrieben in default, TYPO3 | Kommentare deaktiviert für MySQL Shell-Kommandos

Puffy deluxe

Meinem Kuschelfisch zu Ehren – über die Bilder rollen. Ist aber schon sehr alt…



Geschrieben in default | Kommentare deaktiviert für Puffy deluxe

Firefox: Adresszeile leer

Ist mir heute passiert – total komisch – auf einmal war meine Firefox-Adresszeile leer. Hat auf Eingaben reagiert, aber wenn man irgendwohin geklickt hat, da war sie wieder leer. Ich hatte nur einige Themes mal ausprobiert, könnte vielleicht daran gelegen haben.
Dann habe ich das Problem im Forum gefunden, da war die Adresszeile wieder da, zeigt was an, reagiert aber nicht, wenn ich den Tab wechsele. Dann wollte ich das Profil von Firefox resetten, doch er hatte sich irgendwie verhakt und meinte nach mehrmaligem Starten des Computers da würde immer noch ein Prozess laufen und wollte daher nicht starten.
Das Problem habe ich gar nicht gelöst, ich musste Firefox komplett neu installieren, nachdem ich alle meine Profildateien gelöscht habe. Grrrrr… Zum Glück gibt es die Lesezeichen Import- und Exportfunktion.

Tags:

Geschrieben in default | Kommentare deaktiviert für Firefox: Adresszeile leer

Monopoly in PHP

Noch im Studium hatte ich eine PHP-Version von Monopoly geschrieben – es war einfach nur zum Spaß gedacht. Jetzt habe ich es wieder ausgegraben und hochgeladen – hoffe es funktioniert. Dazu muss man sich einmal anmelden – damit man die Spieler unterscheiden kann und dann kann man mit mindestens 2 Spielen spielen:
Ist kurz offline…
Die Features von dem Spiel:

  • Straßen kaufen
  • Häuser bauen
  • Ereigniskarten
  • Gefängnis (wie es sich gehört, mit Pash zum Rauskommen)
  • Miete kassieren
  • Hypotheken
  • Börse zum Handeln von Straßen

Probleme mit upload_progress mit PHP

Ich hatte mal über Fileupload mit PHP berichtet:
Simpel mit PHP und mit AJAX

Das Prinzip an sich funktioniert, es gibt nur ein paar Dinge, die man beachten sollte.
Die Funktion zum Abfragen der Dateigröße gibt 0 oder nichts zurück, wenn die Datei, die hochgeladen wird, größer ist als die erlaubte maximale Größe definiert durch php.ini. D.h. wenn diese Grenze gering ist und man versucht eine Datei hochzuladen, die größer ist, gibt es keinen Fortschrittsbalken.
Lösung dafür habe ich noch keine gefunden, das Problem wird in diversen Foren angesprochen, kann aber anscheinend nicht gelöst werden.

Geschrieben in default, javascript | Kommentare deaktiviert für Probleme mit upload_progress mit PHP

IE sendet Button nicht

Ich habe länger nicht geschrieben, komme irgendwie nicht dazu. Trotzdem hier mal eine Kleinigkeit am Rande. Wenn man ein Formular hat (Inputfeld, Submitbutton) und möchte das Formular mit Enter senden, dann ist dabei zu beachten, dass nur der Wert des Input-Feldes gesendet wird, aber nicht der Wert des Buttons.
Beispiel:

Suche:



Dieser PHP-Schnipsel wird in Firefox und Opera „Button geklickt“ nach Enter ausgeben, nicht aber in IE (falls das Formular mit Enter gesendet worden ist):

if(isset($_POST[’search_submit‘])) {
echo ‚Button geklickt!‘;
} else {
echo ‚Button nicht geklickt‘;
}

Anschauen hier
Lösung: keine wirklich. Einfach nur daran denken, wenn man programmiert.

Geschrieben in default | Kommentare deaktiviert für IE sendet Button nicht

Firefox als Webseite

Das ist auch ein wenig älter, fiel mir letzens ein. Ich hatte mal aus Spaß eine Seite machen wollen, die aussieht wie ein Browser und sich teilweise auch so verhält. Damals war Firefox 1 noch aktuell, also habe ich den nachgebaut. Exakt wie in einer 1024×768 Darstellung. Die Lesezeichen sind das Menü, die Icons sind nur Deko, die Adresszeile könnte ein Rootline-Menü sein und als Highlight – der Loader dreht sich beim Rollover. Ich finds schick und ein wenig nostalgisch (wo Firefox 3 als Beta schon da ist).

Firefox Template

Geschrieben in css, default | Kommentare deaktiviert für Firefox als Webseite

Fileupload Progress mit PHP und AJAX

Die Grundlagen dazu finden sich in dem Post davor, wo der Super-Simpel-Fileupload mit PHP erklärt worden ist. Das ist die Erweiterung des Beispiels, um den Fileupload auch ohne Reload üebrwachen zu können. Wie gesagt, die Beispiele, die ich gefunden habe, sind eigentlich ganz nett, aber haben meistens zu viel Code oder brauchen bestehende AJAX-Klassen, ich wollte ein Beispiel, das ohne weitere Dateien funktioniert. Ich habe es übrigends auch in eine Typo3-Extension gegossen.
Die Dateien im Beispiel davor habe ich alle mit dem Suffix _ajax versehen und bearbeitet. Das Formular bliebt, wie es ist, es kommt nur der Event-Handler onSubmit dazu, der nach dem Beginn des Uploads den Status abfragt. Das zweite iFrame, das sich ständig neugeladen hat, kommt auch raus, stattdessen werden hinter das Formular zwei divs gesetzt: response und response_counter. Im ersten wird der Ladebalken angezeigt und im zweiten will ich die Request zählen (einfach so), kann man nachher ausblenden. Das ist der Teil zwischen body-Start und -Ende.





Dann braucht man noch einen AjaxRequest, den hab ich mir hier abgeschaut: http://www.w3schools.com/AJAX/ajax_server.asp. Beim Absenden des Formulars wird die Funktion upm_start mit er generierten Id aufgerufen (upm = upload progress manager), da werden alle Werte gespeichert und die Update-Funktion aufgerufen. Innerhalb der Update-Funktion wird progress_ajax mit der Upload-Id und einem zufälligen Wert aufgerufen (damit das Caching umgangen wird). Wenn die Antwort von progress_ajax in XML-Form zurückkommt, wird diese verarbeitet und es wird ein Ladebalken generiert. Danach wird mit einem Timeout die Funktion zur Fortschrittsabfrage erneut aufgerufen. Wenn der Upload fertig ist, wird aus dem iFrame heraus die Funktion upm_end aufgerufen, die die Request stoppt.
Zu beachten sind folgende Sachen:
Der IE mag es nicht, wenn man einen Request ein weiteres Mal verwendet, damit es keine Probleme gibt, muss die Callback-Funktion erneut bei onReadyStateChange hinzugefügt werden und zwar nach der Open-Anweisung.
Dann habe ich eine zusätzliche Abfrage eingebaut, um eventuelle Endlos-Schleifen zu vermeiden, es wird bei jedem leeren Request ein Zähler gesetzt und wenn dieser 100 erreicht, wird die Schleife gestoppt.
Wichtig bei der Rückgabe (progress_ajax.php) ist, dass man den Content-Type auf xml setzt, ansonsten steht die Eigenschaft responseXML nach der Rückgabe nicht zur Verfügung.
Man könnte auch setInterval verwendet, das hat aber den Nachteil, das die Requests gesendet werden unabhängig davon, ob der letzte zurückgekommen ist. Und so könnten mehrere Requests parallel unterwegs sein, was den Server auf Dauer und bei mehreren Benutzern verlangsamt.

function initAjax() {
if(window.ActiveXObject) {
try {
xmlHttp = new ActiveXObject(„Msxml2.XMLHTTP“);
} catch(e) {
try {
xmlHttp = new ActiveXObject(„Microsoft.XMLHTTP“);
} catch(e) {
return false;
}
}
} else if(window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
}
function upm_start(upload_id) {
upm_counter = 0;
upm_upload_id = upload_id;
upm_started = 1;
total_negative = 0;
document.getElementById(„response“).innerHTML = „“;
document.getElementById(„response_counter“).innerHTML = „“;
upm_update();
}
function upm_update() {
upm_counter++;
if(upm_started == 1 && total_negative < 100) { document.getElementById("xajax_response_counter").innerHTML+= upm_counter; var randNum = Math.ceil(Math.random()*1000); xmlHttp.open("GET","progress_ajax.php?uid="+upm_upload_id+"&r="+randNum,false); // set the readystatechange again for IE to reuse the object xmlHttp.onreadystatechange = function() { if(xmlHttp.readyState==4 && xmlHttp.status == 200) { displayProgress(); } } xmlHttp.send(null); } } function displayProgress() { document.getElementById("response_counter").innerHTML+= "| "; response = xmlHttp.responseXML.documentElement; var loaded = 0; var total = -1; var time = 0; var speed = 0; var est_sec = 0; // Bytes loaded try { loaded = response.getElementsByTagName("loaded")[0].firstChild.data; } catch(e) {} // Bytes total try { total = response.getElementsByTagName("total")[0].firstChild.data; } catch(e) {} // PHP time() function value -> to check how often the request are send
try {
time = response.getElementsByTagName(„time“)[0].firstChild.data;
} catch(e) {}
// speed
try {
speed = response.getElementsByTagName(„speed“)[0].firstChild.data;
} catch(e) {}
// est_sec
try {
est_sec = response.getElementsByTagName(„est_sec“)[0].firstChild.data;
} catch(e) {}
//
if(total == -1) total_negative++;
var percent = Number(loaded/total*100).toFixed(2);
var width = Math.round(percent * 2.5);
var progress = „

„;
progress+= „

 

„;
progress+= „

„+percent+“% („+formatBytes(loaded)+“ / „+formatBytes(total)+“) av speed: „+formatBytes(speed)+“/sec ETA: „+formatSeconds(est_sec)+“

„;
document.getElementById(„xajax_response“).innerHTML = progress;
window.setTimeout(„upm_update()“,500);
}

function upm_end() {
document.getElementById(„response“).innerHTML = „“;
upm_started = 0;
}

function formatSeconds(sec) {
var min = Math.floor(sec/60);
var hour = Math.floor(min/60);
if(hour > 1) {
return hour+“ h „+min+“ m“;
} else if(min > 1) {
return min+“ m „+sec+“ s“;
} else {
return sec+“ s“;
}
}

function formatBytes(b) {
var kb = Number(b / 1024);
var mb = Number(kb / 1024);
var gb = Number(mb / 1024);
if(gb > 1) {
return gb.toFixed(2)+“ GB“;
} else if(mb > 1) {
return mb.toFixed(2)+“ MB“;
} else if(kb > 1) {
return kb.toFixed(2)+“ KB“;
} else {
return b.toFixed(2)+“ B“;
}
}
initAjax();

Das in den Header der result_ajax.php

window.parent.upm_end();


‚;
$upload_id = $_GET[‚uid‘];

$xml = ‚‚;
if(function_exists(‚uploadprogress_get_info‘)) {
$progress = uploadprogress_get_info($upload_id);
$xml.= ‚‚.$upload_id.‘‚;
$xml.= ‚‚;
//$xml.= ‚‚.var_export($progress,true).‘‚;
$xml.= ‚‚.$progress[‚bytes_uploaded‘].‘‚;
$xml.= ‚‚.$progress[‚bytes_total‘].‘‚;
$xml.= ‚‚.$progress[’speed_average‘].‘‚;
$xml.= ‚‚.$progress[‚est_sec‘].‘‚;
} else {
$xml.= ‚‚.$upload_id.‘‚;
$xml.= ‚0‚;
$xml.= ‚0‚;
$xml.= ‚0‚;
$xml.= ‚0‚;
}
$xml.= ‚
‚;
echo $xml;
?>

UPDATE 26.August 2008: Hatte mit diesem Stückchen Code in den letzen Tagen tierische Probleme in den letzen Monaten. Zunächst mal funktionierte es nicht auf dem Mac – weder unter Firefox, noch unter Safari, nix. Hat mich wahnsinnig gemacht. Die Lösung war sehr dirty und nicht quick – ich musste den kompletten Upload Bar (in HTML) generieren und zurückgeben lassen, weil das Auswerten des XML-Objektes irgendwie nicht wollte. Soll auch ein bekanntes Problem sein, hab ich gehört.
Nun die nächste Problem: Unter Firefox 3 tats nicht. Also recherchiert – Firebug Bugs, Caching Probleme etc. Zum Glück gabs diesmal eine schöne Lösung, anstatt GET einfach POST zu verwenden:

xmlHttp.open(„POST“,“progress_ajax.php?uid=“+upm_upload_id+“&r=“+randNum,true);

Geschrieben in default, javascript | Kommentare deaktiviert für Fileupload Progress mit PHP und AJAX

Fileupload Progress mit PHP (simpel)

Manchmal wünscht man sich, man könnte den Upload von Dateien überwachen. Normalerweise ist das so: man wählt im Formular eine Datei aus und wartet, bis sie irgendwann hochgeladen ist. Es wäre natürlich schön, wenn man während des Uploads ein Feedback hätte – wie viel bereits hochgeladen wurde, wie schnell etc.
PHP kann das von sich aus nicht, aber nach einiger Recherche bin ich auf diese Seite gestoßen: http://php5.bluga.net/UploadProgressMeter/demo.php. Dort wird ein PECL Package benutzt, das eine Funktion zur Verfügung stellt, um den Uploadvorgang zu überwachen. Das Package gibt es hier: http://pecl.php.net/package/uploadprogress.
Das Beispiel funktioniert auf der Seite wunderbar, man kann sich es zwar herunterladen, aber da fehlt der komplette AJAX-Server und zur Verdeutlichung ist es ein wenig wie mit Kanonen auf Spatzen schießen. Daher habe ich ein eigenes kleines Beispiel gebaut, das alle nötigen Elemente enthält und erstmal ohne AJAX funktioniert. Vielleicht kommt ein AJAX-Bespiel mal dazu.
Aufbau: upload.php enthält ein Formular und zwei iFrames – in das obere wird die Datei geladen, im unteren zeigt man den Status an. Das Zielframe ist sinnvoll, damit die Seite sich nicht aufhängt und nicht neugeladen werden muss. Im Progressframe ist eine Datei, die den Status abfragt und sich jede Minute aktualisiert. Wichtig im Formular folgende Felder: UPLOAD_IDENTIFIER ist eine Id, über die der Upload abgefragt werden kann, ein Input-Feld vom Type file (logisch) und ein Button. Nicht vergessen im Formular method und enctype zu setzen, target ist das iFrame.

// upload.php Auszug
<body>
<iframe src="" name="upload_target"></iframe>
<br />
<iframe src="progress.php" name="upload_progress"></iframe>
<br />
<form action="result.php" method="post" method="post" enctype="multipart/form-data" target="upload_target">
	<input type="hidden" name="UPLOAD_IDENTIFIER" value="123456789" />
	<input type="file" name="upload_file" />
	<input type="submit" name="submit_file" value="upload file" />
</form>
</body>
// progress.php Auszug
<meta http-equiv="refresh" content="1; URL=progress.php">
// ...
$uid = '123456789';
if(function_exists('uploadprogress_get_info')) {
	$progress = uploadprogress_get_info($uid);
	print_r($progress);
}
// result.php Auszug
$uid = '123456789';
print_r($_POST);
print_r($_FILES);

Den Krams drumrum selber denken (html, head, body, php Einleitungstags etc.) Beispiel hier mach ich nicht – mein Speicherplatz ist begrenzt 😉

Frohe Weihnachten und einen Guten Start ins neue Jahr 2008

Ich wollte meinen Lesern (falls es welche gibt außer mir) ein geruhsames und frohes Weihnachtsfest wünschen. Ich hoffe, ihr habt auch frei, so wie ich und könnt erholt und voller Tatendrang ins neue Jahr starten.

Geschrieben in default | Kommentare deaktiviert für Frohe Weihnachten und einen Guten Start ins neue Jahr 2008