Montag, 31. August 2009

Wenn man im mac Finder mehr sehen will...

So bekommt man im Finder versteckte Dateien und Ordner zu sehen.
In einem Terminal-Fenster:
defaults write com.apple.finder AppleShowAllFiles 1

Dann den Finder neu starten:
Tasten gleichzeitig drücken: alt + cmd + esc
Oder ein Klick auf dem Apfel und "Sofort beenden..."
Im Dialog den Finder auswählen und "Neu starten" anklicken.

Samstag, 22. August 2009

symfony (1.2) Bug (sfWidgetFormInputCheckbox)

Das symfony-Framework ist phantastisch!
Die version 1.2 enthällt jedoch einen kleinen Bugg, der leicht zu beheben ist.
Und zwar werden Checkboxen initial mit haken (checked) dargestellt. Ein "jungfräulicher" checkbox soll ja normaler weise "nicht gesetzt" erscheinen.

Zu diesem Bug gibt es übrigens schon ein Ticket:
http://trac.symfony-project.org/ticket/3917

Das Problem liegt in der render-Methode der Klasse sfWidgetFormInputCheckbox, die Sie hier finden:
"dein Projekt"\lib\vendor\symfony\lib\widget\sfWidgetFormInputCheckbox.class.php

So sieht die Methode im Original aus:

public function render($name, $value = null, $attributes = array(), $errors = array())
{
if (!is_null($value) && $value !== false) {
$attributes['checked'] = 'checked';
}
if (!isset($attributes['value']) && !is_null($this->getOption('value_attribute_value'))) {
$attributes['value'] = $this->getOption('value_attribute_value');
}
return parent::render($name, null, $attributes, $errors);
}


Der Fehler ist leicht zu beheben in dem man eine zusätzliche Bedingung in der ersten if-abfrage hinzufügt. Um Probleme bei späteren symfony updates aus dem weg zu gehen, leitet man die vorhandene Klasse selbst ab. Wenn man dabei auch noch die Namenskonvention von symfony für Dateien und Klassen einhällt, wir die Klasse auch noch von dem class loader gefunden ;-)

Neue Datei: MyWidgetFormInputCheckbox.class.php
Klasse mit der überschriebene render-Methode:

class MyWidgetFormInputCheckbox extends sfWidgetFormInputCheckbox
{
public function render($name, $value = null, $attributes = array(), $errors = array())
{
if (!is_null($value) && $value !== false && $value != 0) {
$attributes['checked'] = 'checked';
}
if (!isset($attributes['value']) && !is_null($this->getOption('value_attribute_value'))) {
$attributes['value'] = $this->getOption('value_attribute_value');
}
return parent::render($name, null, $attributes, $errors);
}
}


Die zusätzliche Bedingung ist oben in rot gekennzeichnet (es ist eine null nach dem !=).
Der Wert von $value ist im ungesetzten (unchecked) Zustand 0 (null).

Bei der Erstellung des Widgets in der Form-Klasse, macht es Sinn einen Wert für den gesetzen Zustand zu definieren:

class MySampleForm extends BaseSampleForm
{
public function configure()
{
...
$this->widgetSchema['MyCheckbox'] = new MyWidgetFormInputCheckbox(array(), array('value' => 1));
...
}
}

Duplicate content in Google vermeiden.

Ein klassisches Problem.
Die eigene Webseite ist sowohl unter firmendienste24.de und www.firmendienste24.de erreichbar und das führt zu dem "duplicate content"-Problem in Google.
(firmendienste24.de dient hier durchgängig als Beispiel).

Wie leite ich unter Apache ein request an firmendienste24.de an www.firmendienste24.de weiter?

Man könnte eine VirtualHost-Klammer in Apaches httpd.conf erstellen und dort die Weiterleitung einrichten. Wenn man aber PLESK (z.B. unter SuSe-Linux) nutzt, stellt man schnell fest, dass die Lösung nicht so direkt ist... ;-)

Das Problem liegt darin, daß PLESK die Haupt-Konfigdatei
/srv/www/vhosts/firmendienste24.de/conf/httpd.include
jedes mal wenn man Änderungen in der PLESK-Oberfläche speichert, neu schriebt.

Daher steht in den Kommentaren, dass man die eigenen Settings in
/srv/www/vhosts/firmendienste24.de/conf/vhost.conf
platzieren soll.

Klingt ja zunächst nicht schlecht, wäre es nicht für das unglücklich platzierte include statement in der oben genanten Datei
/srv/www/vhosts/firmendienste24.de/conf/httpd.include
Die ist nämlich hier platziert:

<virtualHost>
...
Include /srv/www/vhosts/firmendienste24.de/conf/vhost.conf
</virtualHost>


Wie man hier sieht kann man hier nicht eine neue VirtualHost-Klammer öffnen...

Das Umleitungsproblem kann man unter Apache aber auch elegant mit einer Datei im root-Ordner der Webseite erschlagen. Die datei trägt den Namen ".htaccess". Eine Änderung darin bedarf nicht ein mal ein Apache Neustart.

Diese Lösung verlangt wiederum, daß das Apache rewrite-Modul geladen ist...

Das geht so:
In der Datei
/etc/sysconfig/apache2
die Variable APACHE_MODULES
um "rewrite" erwietern.

Nach dem Restart von Apache in der Datei
/etc/apache2/sysconfig.d/loadmodule.conf
prüfen ob das Modul rewirite geladen ist.
(Diese Datei wird nach jedem Neustart von Apache geschrieben, und kann daher nicht editiert werden!)
Wir suchen dabei diese zeile:
LoadModule rewrite_module /usr/lib/apache2-prefork/mod_rewrite.so

In der Datei
/srv/www/vhosts/firmendienste24.de/web/.htaccess
folgender Eintrag machen um die Weiterleitung zu vollziehen:

Rewritecond %{HTTP_HOST} !^www\.firmendienste24\.de
RewriteRule (.*) http://www.firmendienste24.de/$1 [R=301,L]

301 ist ein return code für den Browser, der besagt, dass es eine permanente Weiterleitung ist.

Benutzer von dem Framework symfony, stellen schnell fest, dass das Framework eine .htaccess Datei generiert. Der Innhalt kommt aber nicht zum tragen, da in der Datei geprüft wird, ob das rewrite-Modul geladen ist...:
<IfModule mod_rewrite.c>

Freitag, 21. August 2009

Schritt eins :-) Ein AMP-System aufsetzen. Hier unter Windows:

=================
Installation
=================

Software Versions:
Apache - 2.2.11
Mysql - 5.1.34-community
Php - PHP Version 5.2.9-2 (Win32)

Step 1: Default Apache Installation with these settings:
Network domain: localhost
Server Name: localhost
Admin Email: [your Email]
- Install for All Users
- Typical

Step 2: Default installation of mysql
Port: 3306 (default!)
Standard Character Set (Latin1)
Include Bin Directory in Windows Path

Step 3: Download php zip file (php-5.2.9-2-Win32.zip), extract it to your C: drive under c:\php

Step 4: Add these paths to your Windows PATH environment variable, "C:\php", "C:\php\ext",
incase your installation directory is php. Ifn not, replace it with your directory.
Use the System Path variable, as you installer Apache for all users!
Be shure not to use empty spaces in your directory names as some Webservers don't like it.

Step 5: Open httpd.conf, that is located in Apache web server installation folder,
under conf directory i.e., Apache Installation folder > conf > httpd.conf
Add these line at the en of the LoadModule section...
>LoadModule php5_module "c:/php/php5apache2_2.dll"
(Hint!: This module is for Apache Version 2.2)

You can ignore the Hint (alt least unter Windows ;-):
# Add to the end of the AddModule section (in httpd.conf)
AddModule mod_php5.c

Add these lines in the structure...
>AddType application/x-httpd-php .php .php3 .php4 .phtml
>AddType application/x-httpd-php-source .phps

And these line...
Be shure not to place them in some sub structure!
Be shure to use forward shlashes ("/"). Apache want it that way!
A trailing slash may also be necessary for directories.
PHPIniDir "C:/PHP/"

Another way to tell Apache where to find your PHP install directory is to set the
windows environment variable PHPRC (i user both ;-):
PHPRC C:\PHP

Step 6: Goto php installation directory, there u'll find a file named php-ini-recommended.
Rename it to, php.ini
Create an subdirectory C:\PHP\includes for your php include files.

Step 7: Now it's time to modify your php.ini file...
Open the file in notepad.
If you use MySQL, look for "extension=php_mysql.dll" and un comment it,
i.e., delete the ";" at the start of the line.
If you also use PDO (with MySQL), un comment thiese lines to:
extension=php_pdo.dll
extension=php_pdo_mysql.dll
And these line if you use mbstrings and sockest...
extension=php_mbstring.dll
extension=php_sockets.dll
...and so on...
Also look for "extension_dir=", where you place your extension directory ("C:\php\ext" ).
That's the directory where the extensions are, that you just enadled above (php_pdo.dll e.g.)
Also look for "include_path =", where you place your include directory (".;C:\PHP\includes")
(Don't forget to un comment the line! i.e. remove the ";")

Step 8: Reboot the computer - logoff isn't enough!

Step 9: Create a file test.php containing this line and place it in the
Apache document root directory (that's where apache default is looking files to show.
(When using the default installation: C:\Programme\Apache Software Foundation\Apache2.2\htdocs)
Test ist by calling: http://localhost//test.php
Important is the hint at "Loaded Configuration File".
There You shold find the path (with file) to yout php.ini (e.g. "C:\PHP\php.ini ")

Step10: Some PHP based Software need PEAR. You install it with the Bath C:\PHP\go-pear.bat


done :-)