Peter Rehm's Blog

apple,development,life & more

.DS_Store aus GIT Repository entfernen

Ohne Kommentare

CODE:
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch --cached


modify .git/info/exclude

CODE:
# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~
.DS_Store


Have fun...

For further information regarding exclude or .gitignore see git ignore files locally

Geschrieben von Peter Rehm

04.08.2012 um 13:13:05

Tags für diesen Artikel:

Installation PEAR/PECL/autoconf/intl/icu auf Mac OSX Mountain Lion

Ohne Kommentare

Installation PEAR/PECL/autoconf/intl/icu auf Mac OSX Mountain Lion

- Install PECL & PEAR

CODE:
cd /usr/lib/php
sudo php install-pear-nozlib.phar


- Add to php.ini

CODE:
include_path = ".:/usr/lib/php/pear"
extension_dir = "/usr/lib/php/extensions/no-debug-non-zts-20090626"


- Update pear channels

CODE:
sudo pear channel-update pear.php.net
sudo pecl channel-update pecl.php.net
sudo pear upgrade-all


- Install ICU from http://site.icu-project.org/download/48#ICU4C-Download

CODE:
tar -xzvf icu4c-4_8_1_1-src.tgz
cd icu/source/
./runConfigureICU MacOSX
make
sudo make install


If you get something linke this...


configure: error: in `/Users/peterrehm/Downloads/icu/source':
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details
./runConfigureICU: ./configure failed


you have to install the apple command line tools which you will find
under the following URL for the appropriate OS version like Mountain Lion.

CODE:
https://developer.apple.com/devcenter/mac/index.action


then you should be able to install it..

CODE:
sudo pecl install intl


If you have autoconfi missing go for that:

CODE:
curl -O http://ftp.gnu.org/gnu/autoconf/autoconf-latest.tar.gz
tar -xzvf autoconf-latest.tar.gz
cd autoconf-2.69/


Now you should add "extension=intl.so" to php.ini and restart apache. Here you go.

Geschrieben von Peter Rehm

01.08.2012 um 21:11:24

Tags für diesen Artikel: , ,

MAC OSX; Locate Database aktualisieren

Ohne Kommentare

Mit dem folgenden Befehl wird die Erzeugung des locate Indexes angestoßen:


sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist

Geschrieben von Peter Rehm

01.08.2012 um 07:56:24

Tags für diesen Artikel:

Anzeige der git branch in der Console (OSX/bash)

Ohne Kommentare

.bash_profile anlegen mit dem folgenden Inhalt


PATH=$PATH:/usr/local/git/bin:.
source /usr/local/git/contrib/completion/git-completion.bash
PS1='[\u@\h \w$(__git_ps1 " (%s)")]\$ '


Danach sieht der shell prompt wie folgt aus:


[peterrehm@tokyo-3 /www/scalc (master)]$


Dadurch wird nebenbei auch die completion hinzugefügt, zum Beispiel bei
der Auswahl der Branches mittels git branch ...

Geschrieben von Peter Rehm

29.07.2012 um 19:26:01

Tags für diesen Artikel: , , ,

Script für externes Subversion Backup

Ohne Kommentare

Mit diesem Script werden verschiedene Daten gepackt und in mit einem Dateinamen der
das Datum enthält "Datum_Serverbackup.tgz" versehen.

CODE:
#!/bin/bash
filename=`date '+%m%d%y'`
rm -rf /opt/tmpdir/backup/*

mkdir /opt/tmpdir/backup/svn/
mkdir /opt/tmpdir/backup/config/

svnadmin dump /home/svn/cms/ > /opt/tmpdir/backup/svn/cms_svn.dump
svnadmin dump /home/svn/templates/ > /opt/tmpdir/backup/svn/templates_svn.dump

tar -cvf /opt/tmpdir/backup/config/apache.tar /etc/apache2/
tar -cvf /opt/tmpdir/backup/config/opt_scripts.tar /opt/scripts/

tar -czvf /opt/tmpdir/backup/${filename}_serverbackup.tgz /opt/tmpdir/backup/*

Geschrieben von Peter Rehm

30.10.2010 um 23:18:34

Tags für diesen Artikel:

PEAR unter OSX Leopard installieren

Mit 1 Kommentar

Im folgenden wird in aller kürze beschrieben, wie man PEAR unter
OSX 10.5 Leopard installiert. Dies sollte unter den vorherigen OSX
Versionen sicher ähnlich funktionieren.

Auf meinem lokalen System habe ich PHP5 von entropy.ch am laufen, da
ich unbedingt die GD-Lib benötige. Dies hat nur Einfluss auf die Ablage
der php.ini. Dies muss eben von den auf dem jeweilig auf dem System vorhandenen
Gegebenheit abhängig gemacht werden.

Wir werden in /usr/local/ installieren, und dem System gestatten die TEMP-Files
in /usr/local/temp abzulegen.

CODE:
sudo mkdir /usr/local/temp
sudo chmod -R 777 /usr/local/temp
sudo mkdir /usr/local/share/pear
sudo chmod -R 777 /usr/local/share/pear


Im nächsten Schritt wird go-pear ausgeführt.

CODE:
curl http://pear.php.net/go-pear | php


Hier muss bei den Pfaden der 1. auf /usr/local geändert werden.
Alle anderen Einstellungen können in der Regel beibehalten werden.

Während der Installation kommt dann die Warnung, dass der PEAR Pfad
noch nicht in der php.ini vorhanden ist, und es deswegen zu Problemen
mit der Verwendung von den PEAR Scripts kommen kann.

Hier kommen wir an den Punkt wo es wichtig ist, zu wissen, wo die
Konfigurationsdatei des Webservers liegen muss. Dies kann man einfach
über ein kurzes Script herausfinden:

CODE:
<? phpinfo(); ?>


Im Browser die Datei ansehen und nach folgender Zeile suchen.

CODE:
Configuration File (php.ini) Path /usr/local/php5/lib


Hier muss die php.ini für den Webserver liegen, die php.ini für
das Command-Line-Interface (CLI) unabhängig davon in /etc/

Standardgemäß ist eine php.ini.default in /etc/. Diese kopieren
und modifizieren wir zunächst.

CODE:
sudo cp /etc/php.ini.default /etc/php.ini
sudo nano /etc/php.ini


Nun nach dem Eintrag include_path suchen und diesen um "/usr/local/share/pear"
ergänzen. Bei mir sah dies nach der Anpassung so aus.

CODE:
include_path=".:/usr/local/share/pear"


Ist eine php.ini in dem Config-Path des Webservers vorhanden bearbeiten
wir diese, ansonsten kopieren wir die Datei /etc/php.ini an die gewünschte
Stelle

CODE:
sudo cp /etc/php.ini /usr/local/php5/lib/php.ini


Abschließend muss noch der Webserver neu gestartet werden, dann ist PEAR
einsatzfähig.

CODE:
sudo apachectl restart


Anmerkung: Kann PEAR von der Konsole nicht mit dem Befehl pear aufgerufen werden,
ist /usr/local/bin nicht korrekt in den SHELL-Pfaden eingetragen, und sollte nachgetragen
werden. Tipp: echo $PATH zum überprüfen in der SHELL eingeben.

Geschrieben von Peter Rehm

02.01.2008 um 11:16:31

Abgelegt in PHP

Tags für diesen Artikel: , ,

Frohes Neues Jahr

Ohne Kommentare

Ich wünsche allen meinen Lesern ein frohes und erfolgreiches Jahr 2008.

Ich werde ab Februar 2008 wieder mein Engagement in diesem Blog verstärken.

Als kleinen Vorgeschmack gibt es einen Artikel über PEAR unter OSX Leopard.

Stay tuned...

Geschrieben von Peter Rehm

02.01.2008 um 11:10:00

Abgelegt in Verschiedenes

jpgraph und utf-8 daten

Mit 6 Kommentaren

Wer sich wundert wieso die Texte der erzeugten Graphen mittels jpgraph
in kryptischen Buchstaben dargestellt werden, obwohl gültige Daten in UTF-8
angeliefert wurden, ist nur einen kleinen Schritt von der Lösung entfernt.

Die Ursache des Problems liegt darin dass die Standardschriftarten von jpgraph
kein UTF-8 darstellen können.

Daher kann man sich einfach wie auch auf der jpgraph Seite angegeben ein
entsprechendes Schriftpaket herunterladen. Ich hab mich in meinem Fall für
Verda entschieden.Dies bekommt man hier: http://www.gnome.org/fonts/

Die Schirften lädt man sich herunter und lädt Sie in ein beliebiges Verzeichnis.

Nun muss nur noch das Verzeichnis der Library bekannt gemacht werden:

CODE:
DEFINE("TTF_DIR",dirname(_file_) . '/../../ttf-bitstream-vera-1.10/');


Nun muss man noch mittels SetFont angeben, wo welche Schrift eingesetzt werden
soll. Mir ist es allerdings nicht gelungen die Schriftart für die Beschriftung in den
Netzdiagrammen (jpgraph_radar.php) festzulegen, daher musste ich manuell
die Standardschrift ändern, indem ich in jpgraph.php und jpgraph_radar.php FF_FONT1
durch FF_VERA ersetzt habe.

Nun sollten alle Umlaute auch angezeigt werden können.

Geschrieben von Peter Rehm

01.10.2007 um 23:35:00

Abgelegt in PHP

Tags für diesen Artikel: , ,

Weitere Lektion in der Umlautproblematik

Mit 2 Kommentaren

Nachdem ich in einem früheren Blog Eintrag empfohlen habe, alle Daten aus
Speicherplatzgründen die im UTF-8 Format sind in z.b. dem latin1 charset abzulegen,
muss ich dem nun komplett wiedersprechen.
Bei einem durchschnittlichen Projekt lädt man sich deutlich mehr Ärger auf,
als dass man dadurch Vorteile durch Speicherplatzersparnis erzielt.

In meiner Situation sah das dann so aus, dass ich ca. 8 Stunden damit beschäftigt
war, alle Datenbanken meiner Kunden umzustellen, was enorm händische Arbeit
erforderte.

Im Ist-Zustand war es nun auch so, dass mittels phpMyAdmin logischerweise
alle Umlaute kaputt angezeigt wurde, und man nicht oder nur mit hohem manuellen
Aufwand direkt die Daten bearbeiten konnte.

Ausgangssituation
Datenbank mit latin1 als Standardcharset, alle Tabellen latin1, und UTF-8 Daten darin gespeichert.

Ziel
Datenbank & Tabellen UTF-8, und alle Inhalte UTF-8
Ich habe mich für utf8_general_ci entschieden, der unterschied zu utf8_unicode_ci liegt nur in
der Abhandlung von Sortierreihenfolgen. Dies kann man aber im Detail dem MySQL Manual entnehmen.

1.) Datenbank Backup erstellen
Gehen wir einfach mal auf nummer sicher, um die Daten auch sicher nicht
endgültig zu zerstören.

2.) Umwandeln aller Tabellen voll automatisch, und davon sollen auch alle
Text und Varchar Felder umgewandelt werden. Manch einer wird hier noch anpassungen
vornehmen müssen, da ich keine Char Felder umwandle, da die nicht benötigt
werden. ACHTUNG! Das Script basiert wie alle meine Code Snippets auf adodb,
kann aber Problemlos auf die von MySQL zur Verfügung stehenden Funktionen
portiert werden.

CODE:
<?php
// fetch all tables
$data = $cfg['db']->pExecute("SHOW
TABLES");
while($row = $data->FetchRow())
{
$sres = $cfg['db']->pExecute("DESCRIBE ".($row[0]));
while( $column = $sres->FetchRow())
{
// if column is text or varchar, convert
if(strpos($column['Type'],'text')!==false || strpos($column['Type'],'char')!==false
|| strpos($column['Type'],'varchar')!==false)
{
$cfg['db']->Execute("ALTER TABLE ".($row[0])." CHANGE ".($column['Field'])." ".($column['Field'])." ".($column['Type'])." CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL");
}
}

// confert now also full table
$cfg['db']->Execute("ALTER TABLE ".$row[0]." DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci");
}
?>


3.) Manuelles Umwandeln der Datenbank
Ich habe mich dazu entschieden die eigentliche Datenbank händisch umzuwandeln,
da ich mich eh mit der Datenbank verbinden musste. Dazu habe ich dann folgendes
SQL Statement eingegebn

CODE:
ALTER DATABASE `dbname` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci


4.) Exportieren der Daten
Nun werden die Daten der kompletten Datenbank exportiert, nicht aber die
Struktur. Dies wird für die meisten am besten mittels einer grafischen Oberfläche
wie phpMyAdmin erledigt. Hier kann man dies mit weigen Mausklicks erreichen.

5.) Umwandeln des Datendumps
Nun wandeln wir einfach noch die "kaputten Zeichen" zurück in UTF8.
In meinem Fall und in den meisten wird folgendes Script hinreichend sein.
Dazu muss eine Datei data.sql im gleichen Verzeichnis wie das eigentliche
PHP Skript sein.

CODE:
<?php
$str=file_get_contents('data.sql');

$bad_char=array("ä","ö","ü","Ä","Ö","Ü","ß");
$right=array('ä','ö','ü','Ä','Ö','Ü','ß');

$bla=str_replace($bad_char,$right,$str);

echo $bla;

?>


6.) Abschließende Arbeiten
Um die ganze Aktion abzuschließen, muss nur noch die Datenbank geleert werden,
un der neue Dump eingelesen werden. Dann sollte man die Umlaute alle
im entsprechenden Format in der Datenbank haben.

Nun werden einige aber sicher zerstörte Umlaute in der Ausgabe haben,
und sich wundern warum. Dies liegt an der MySQL Verbindung die einen
Befehl zu beginn benötigt um UTF8 sauber zu behandeln.

CODE:
$cfg['db']->Execute("SET names utf8");


Nun sollte es endlich geschafft sein, und man sollte sich nun hoffentlich
wieder wichtigeren Dingen widmen können :-)

Achja, heikel ist dann auch das string handling an manchen stellen, daher sollte man auf
die mb_* funktionen von PHP zurückgreifen.


Geschrieben von Peter Rehm

16.08.2007 um 02:38:50

Abgelegt in PHP

Tags für diesen Artikel: , ,

Zusammenhängende Formularfelder - Steuern des aktiven Feldes mit JS

Ohne Kommentare

Möchte man z.b. ausweisdaten, seriennummern oder ähnliches per HTML
Formular abfragen, möchte man es vielleicht erreichen, dass der Cursor
direkt von Feld zu Feld springt, nachdem die ausreichende Anzahl Zeichen
eingegeben wurde. Dies kann einfach mittels JavaScript erreicht werden.

CODE:
<script type="text/javascript">
<!--
function skip_field(testid,length,next)
{
var doc=document.getElementById(testid);
if(doc.value.length>=length)
{
document.test.elements[next].focus();
}
}
//-->


Geschrieben von Peter Rehm

16.08.2007 um 02:38:03

Tags für diesen Artikel: ,

Dateien im Filemenager vom FCK Editor löschen

Mit 7 Kommentaren

Als ich heute gefragt wurde ob der FCKedit auch das Löschen von Dateien
ermöglicht war ich ganz erstaunt, dass er das nicht kann, und hab ihn dann
gleich in meinen Sourcen anhand der Erläuterungen von Bramus
ergänzt. Da sich allerdings einige Kleinigkeiten verändert haben, wollte ich
die einzelnen Schritte noch einmal auflisten.

Die Erweiterungen basieren fast komplett auf den Erklärungen von Bramus,
der dies in seinem Blog alles erwähnt. Danke hierfür.

1.) Ablegen eines entsprechenden ICONS in

CODE:
editor/filemanager/browser/default/images/delete.gif


2.) Anpassen der Datei frmresourceslist.html

CODE:
editor/filemanager/browser/default/frmresourceslist.html


Suchen der Zeile:
CODE:
var sLink = '<a href="#" onclick="OpenFile('' + fileUrl + '');return false;">' ;


Danach folgende Zeile einfügen.
CODE:
       // Added by Bramus!
var dLink = '<a href="#" title="Delete file" onclick="DeleteFile('' + escape(fileName) + '');return false;">' ;    


Dann folgenden Block:

CODE:
return '<tr>' +
'<td width="16">' +
sLink + 
'<img alt="" src="images/icons/' + sIcon + '.gif" width="16" height="16" border="0"></a>' +
'</td><td>&nbsp;' +
sLink + 
fileName + 
'</a>' +
'</td><td align="right" nowrap>&nbsp;' +
fileSize + 
' KB' +
'</td></tr>' ;


durch diesen ersetzen. Hier wird das Bild dann eingefügt.

CODE:
return '<tr>' +
'<td width="35">' +
sLink + 
'<img alt="" src="images/icons/' + sIcon + '.gif" width="16" height="16" border="0"></a>' +
dLink + '<img alt="" src="images/delete.gif" width="16" height="16" border="0"></a>' +
'</td><td>&nbsp;' +
sLink + 
fileName + 
'</a>' +
'</td><td align="right" nowrap>&nbsp;' +
fileSize + 
' KB' +
'</td></tr>' ;


Zuletzt in der Datei bevor

CODE:
window.onload = function()
{
window.top.IsLoadedResourcesList = true ;
}


folgenden Code Block einfügen

CODE:
// Added by Bramus!
function DeleteFile( fileName, fileUrl ) {
if (confirm('Are you sure you wish to delete ' + unescape(fileName) + '?')) {
oConnector.SendCommand( 'DeleteFile', "FileName=" + fileName, DeleteFileCallBack ) ;
}
}

// Added by Bramus!
function DeleteFileCallBack ( fckXml ) {
var oNodes = fckXml.SelectNodes( 'Connector/Error' );
if (oNodes!=null && oNodes.length>0) {
var errNo = parseInt(oNodes[0].attributes.getNamedItem('number').value) ;
switch (errNo) {
case 0 :
break;
case 102 :
case 103 :
alert(oNodes[0].attributes.getNamedItem('originalDescription').value);
break;
default:
alert('DFi: Invalid XML response from connector..');
}        
} else {
alert('DFi: Invalid XML response from connector.');
}
Refresh();
}


3.) Nun geht es an die PHP Funktionen in der commands.php

In der folgenden Datei

CODE:
editor/filemanager/browser/default/conmectors/commands.php


muss nur der folgende Code am ENDE vor den ?> eingefügt werden.

CODE:
function DeleteFile($resourceType, $currentFolder) {
$sErrorNumber = '0' ;
$sErrorMsg = '' ;

if ( isset( $_GET['FileName'] ) ) {

// Map the virtual path to the local server path.
$sServerDir = ServerMapFolder( $resourceType, $currentFolder ) ;

$sFileName = $_GET['FileName'] ;

if ( strpos( $sFileName, '..' ) !== FALSE ) {
$sErrorNumber = '102' ; // Invalid file name.
$sErrorMsg = 'Invalid file name';
} else {
if ( @unlink($sServerDir.$sFileName) ) {
$sErrorNumber = '0' ; // deleted
} else {
$sErrorNumber = '103' ; // not deleted
$sErrorMsg = 'Could not delete file '.$sServerDir.$sFileName;
}
}
} else {
$sErrorNumber = '102' ; // no file set
$sErrorMsg = 'No file specified';
}
   
// Create the "Error" node.
echo '<Error number="' . $sErrorNumber . '" originalDescription="' . ConvertToXmlAttribute( $sErrorMsg ) . '" />' ;
}


4.) Anpassen des Connectors

Im Connector muss noch das Switch Statement angepasst werden.

CODE:
editor/filemanager/browser/default/conmectors/commands.php


Sollte nur um folgendes ergänzt werden:

CODE:
case 'DeleteFile' :
DeleteFile( $sResourceType, $sCurrentFolder ) ;
break ;


In der 2.4.3 sieht das ganze dann so aus

CODE:
// Execute the required command.
switch ( $sCommand )
{
case 'GetFolders' :
GetFolders( $sResourceType, $sCurrentFolder ) ;
break ;
case 'GetFoldersAndFiles' :
GetFoldersAndFiles( $sResourceType, $sCurrentFolder ) ;
break ;
case 'CreateFolder' :
CreateFolder( $sResourceType, $sCurrentFolder ) ;
break ;

case 'DeleteFile' :
DeleteFile( $sResourceType, $sCurrentFolder ) ;
break ;

}


Viel Spaß damit!

Geschrieben von Peter Rehm

02.08.2007 um 22:51:33

Abgelegt in Programmierung

Tags für diesen Artikel:

MacBook Pro Daten unwiederruflich löschen

Ohne Kommentare

Wenn man einen Laptop abgibt, ist man immer wieder vor dem Problem,
dass alle Daten unbedingt weg sein sollten, wenn der Laptop dann weg ist.

Apple hat hier eine einfach Lösung Parat. Einfach von der mitgelieferten CD
booten (Beim starten die [alt] Taste gedrückt halten) und dann das Festplatten-
Dienstprogramm starten, das man unter Dienstprogramme im Menü findet.

Die gewünschte Partition/Festplatte auswählen, und dann auf das Register Löschen
klicken. Unter Sicherheitsoptionen kann man nun wählen, wie man die Platte
löschen möchte.

Ich hab immer die 7-Fache Löschung bisher beorzugt.

Geschrieben von Peter Rehm

22.07.2007 um 18:02:15

Abgelegt in Apple

Tags für diesen Artikel: ,

$Id Zeilen mit Subversion

Mit 1 Kommentar

In den meisten Quellcodes die man so liest ist eine Id Zeile am Dateianfang zu finden,
die ungefähr so aussieht:

CODE:
/* $Id: test.cpp 3 2007-07-08 12:28:37Z peterrehm $ */


Dies bedeutet dass man die datei test.cpp sieht, zuletzt geändert in Revision 3 um 12:28 am 08.07.2007 von dem Benutzer peterrehm.
Dies ermöglicht einen schnellen Überblick über die Datei.
Die Information wird von Subversion selbst verwaltet.
Damit Subversion das tut, sind ein paar kleine Einstellungen notwendig.

1. Aktivieren der Keywors für die gewünschten Dateien

CODE:
svn propset svn:keywords "Id" test.cpp 


2. Definieren eines Platzhalters in der Quelldatei

Dazu einfach einen Code wie folgt in die Datei einfügen, je nach
Programmiersprache eben in entsprechender Kommentierung.

CODE:
/* $Id$ */


3. Datei committen

Mit dem nächsten Commit wird dann automatisch die eingefügt Zeile ersetzt.
Dies wird auch bei jedem weiteren Commit passieren. Die Id Zeile ist aber nicht
für SVN diffs relevant, auch wenn man selbst versuchen sollte die zu ändern,
also wenn man das Datum ändert, wird das nicht mit übertragen.

Die Dateiinformation bleibt solange bestehen bis man eine neuere Version committet,
oder ein anderer Benutzer des SVN Repositorys das übernimmt. Allerdings wird die
Zeile dann auch erst mit dem nächsten update aktualisiert.

Als letzte Information bleibt vielleicht noch zu nennen, dass ein $Log$ Keyword von
den SVN Entwicklern ausdrücklich nicht implementiert werden. Darauf wird in der
FAQ verwiesen.

Update: Fehler wurde behoben, Danke Sebastian!

Geschrieben von Peter Rehm

08.07.2007 um 16:44:04

Abgelegt in Programmierung

Tags für diesen Artikel:

gängige PHP Fehler - Tipps & Tricks

Mit 2 Kommentaren

Neulich wurde ich gebeten, mir "kurz" ein kleines PHP Skript anzusehen,
und bei der Fehlersuche zu helfen. Dabei ist mit allerdings sehr schnell
aufgefallen dass einige grundlegende Unschönheiten zu finden sind.

Daher will ich anhand des mir zugesandten Codes einige Tipps zur PHP Entwicklung
geben.



  1. register_globals

    Ein immer wieder auftrendes Problem ist die register globals Geschichte,
    da PHP einem lange Zeit die Freiheit ließ, auf die POST Variable 'test' auf
    zwei Arten zuzugreifen. Entweder als $test, oder per $_POST['test'].
    Nutzt man erstere Variante kann man sich nie sicher sein, woher der
    Inhalt der Variablen eigentlich stammt, und man vergisst leicht einen
    vielleicht gefährlichen Inhalt zu escapen. Sofern die Möglichkeit besteht
    ist es sogar empfehlenswert register_globals auszuschalten. Aber man
    sollte es sich zumindest immer angewöhnen, auf POST/GET/REQUEST variablen
    immer mittels den dafür vorgesehenen superglobalen Arrays zuzugreifen.




  2. SQL Injections

    Eine große Gefahr stellen vor allem im Zusammenhang mit register_globals
    die SQL Injections dar, über die nicht gewollter SQL Code eingeschleußt
    werden kann. Um hier nicht auszuschweifen sollte man sich immer angewöhnen,
    Inhalt der manipuliert sein kann, zu escapen. Eine einfach Möglichkeit
    hierzu bietet mysql_real_escape_string(). Man sollte sich wenigstens
    angewöhnen den Inhalt immer zu escapen. Es empfiehlt sich auch eine
    eigene Funktion dafür zu nehmen, dass man später auch noch andere
    Verfahren einsetzen könnte, indem man nur eine Funktion überarbeiten
    muss. Hier ein Beispiel:



    CODE:
    /**
    * easy accesible handle to escape all db strings
    * @param string $string string which should be escaped to be put into an sql statement
    * @return string returns the escaped string
    */
    function escapeDB($string)
    {
    global $run;
    if(is_numeric($string))
    {
    return $string;
    } else {
    return $run['db']->qstr($string,get_magic_quotes_gpc());
    }
    }



  3. Variablen

    Man sollte Variablen immer klein schreiben, und Umlaute sollten nicht
    eingesetzt werden. Es ist meist auch recht angenehm die äquivalente englische
    Bezeichnung für Variablen zu verwenden. EIn unschönes Beispiel:



    CODE:
     '$Arbeitsverhaeltnis', '$Kündigungsfrist', '$Sonstiges'



  4. Fehlermeldungen

    Fehlermeldungen sollte man am besten immer beherzigen. PHP kennt verschiedene
    Modi, je nach "wichtigkeit" eines Fehlers. Meist werden die NOTICE's
    ausgeblendet. Allerdings sind NOTICES oft auch recht hilfreich,
    da man erkennt wo man z.B. eine noch nicht initialisierte Variable
    verwendet. Es empfiehlt sich meistens alle Fehlermeldungen anzuzeigen.
    Die macht man wie folgt:


    CODE:
    error_reporting(E_ALL);

    Vor allem gefährlich ist das manuelle Unterdrücken von Fehlermeldungen
    mittels dem @ Operator. Diesen sollte man auch nicht einsetzen, da dadurch
    die Fehlersuche oft erschwert sein kann.





Dies mal nur als kurze Zusammenfassung.

Geschrieben von Peter Rehm

07.06.2007 um 15:49:13

Abgelegt in PHP

Tags für diesen Artikel: ,

Bootcamp - Tastatur und Maus geht nicht mehr

Mit 1 Kommentar

Ich habe heute etwas mit Bootcam unter meinem MacBook gespielt. Alles lief nach Plan nur hatte ich nach der
Installation der Treiber auf einmal weder Tastatur noch Maus. Das rührt daher, dass man auf keinen Fall eines
der aufpoppenden Fenster mit der Aufforderung zur Treiberinstallation anrühren sollte.

Sobald man das macht, ist alles dahin :-)

Die Fenster verschwinden automatisch wieder!

Geschrieben von Peter Rehm

28.05.2007 um 00:11:05

Abgelegt in Apple

Tags für diesen Artikel: , ,