PHP: Dateinamen für Windows / CIFS

Ich weiß nicht, ob das nun der Weisheit letzter Rat ist, aber bei mir hat er mit Hilfe dieser kleinen Funktion sauber auf CIFS (SMB 1) geschrieben. Vielleicht hilft es ja den Einen oder Anderen etwas.

/**
 * tranform the filename inclusive path to the cifs filename charset
 *
 * @param string $filename;
 * @return string
 */
function cifs_file_charset ( $filename )
{
   if ( !is_string($filename) )
   {
      exit('wrong parameter for $filename');
   }

   /* first the lower bit encodings, otherwise the higher bit encoding will be
    * detected and the next step will return strange results or nothing
    * mb_convert_encoding without the three parameter will fail as well
    * Bug: If the real encoding of the string is utf-8, it detect the ISO-encoding first
    *   (PHP 5.3.0)
    */
   $encoding = mb_detect_encoding($filename, 'iso-8859-1, iso-8859-15, utf-8, auto', true);
   /* CP1252 seems to be the right file charset für CIFS (aka SMB 1) */
   $filename = mb_convert_encoding($filename, 'CP1252', $encoding);

   return $filename;
}

DualBoot Windows Vista / Linux

Diese Anleitung müsste auch für Windows 7 funktionieren, ich habe es bisher aber noch nicht ausprobieren können, über eine Rückmeldung würde ich mich freuen.

Über den Windows Bootmanager

Voraussetzung hierfür, ist dass Linux Grub als Bootmanager verwendet.

Schritt 1 – Eine Kopie von der Linux-Bootpartition erstellen

Als erstes muss Windows beigebracht werden, wie es Linux booten kann, dafür muss ein kleines Abbild erstellt werden von der Bootpartition (z.B. wo GRUB installiert ist), dies muss natürlich als root angelegt werden und dann nach Windows transferiert werden (per USB-Stick, CD o.ä.):
dd if=/dev/sda1 of=/tmp/linux.bin bs=512 count=1

Schritt 2 – Windows Vista installieren

Schritt 3 – Dual Boot unter Windows Vista konfigurieren

Nun wird ein Eintrag für GRUB im Windows Vista Bootmanager erstellt unter Verwendung von bcdedit.

  • In Windows Vista die Kommandozeile mit administrativen Rechten starten (Rechtsklick auf cmd und “Als Administrator ausführen”/”Run as Administrator” auswählen)
  • Den Linuxbootsektor auf die (aktive) Windows Bootpartition kopieren, die Partition enthält die bootmgr.
  • Eintrag für GRUB erstellen:
    bcdedit /create /d "GRUB" /application BOOTSECTOR
    Hinweis: bcdedit liefert eine ID für den Eintrag zurück, welche hier {LinuxID} genannt wird. Die {LinuxID} muss mit der erhaltenen ID in diesen Schritt ersetzt werden. Ein Beispiel einer {LinuxID} ist {81ed7925-47ee-11db-bd26-cbb4e160eb27}.
  • Angabe des Laufwerks, welches eine Kopie des Linuxbootsektors enthält.
    bcdedit /set {LinuxID} device boot
  • Angabe des Pfads zum kopierten Linuxbootsektor.
    bcdedit /set {LinuxID} PATH \linux.bin
  • Hinzufügen eines Linuxeintrags, welcher im Bootmenü angezeigt wird.
    bcdedit /displayorder {LinuxID} /addlast
  • Zeit das Menü für 10 Sekunden an, um die Betriebssystemauswahl zu ermöglichen.
    bcdedit /timeout 10

Quelle: http://port25.technet.com/…-Support.aspx

Über GRUB

Schritt 1 – Windows installieren

Schritt 2 – Linux mit Grub installieren

Schritt 3 – Grubeintrag für Windows Vista erstellen

Einfach vor oder nach den Linux-Booteinträgen folgendes hinzufügen. Wobei x und y in (hdx,y) durch die entsprechenden Zahlen zu Ersetzen sind.

  • x = Festplatte (heraus findbar über die device.map im Grubverzeichnis, welche Angabe hier erfolgen muss)
  • y = Partition (Die Partition auf der der entsprechenden Platte, wobei bei 0 angefangen wird zu zählen und bis 4 geht zu erweiterten Partition mehr dazu hier: GRUB Manual – 2. Naming-convention)

/boot/grub/menu.lst
title Windows Vista
rootnoverify (hdx,y)
chainloader +1

makeactive