hawkmaster: Groß- Kleinschreibung unter Windows

Hallo zusammen,

Ich bin bisher der Annahme gewesen, dass unter Windows die Groß- Kleinschreibung keine Rolle spielt.
Folgendes Abfrage funktionierte also mit der URL /myweburl/index.php und mit /MyWebUrl/index.php

if($_SERVER['SCRIPT_NAME'] == "/myweburl/index.php")
{

Gestern nun hatte ich das Script auf einem Windows Server 2008 R2 ausprobiert und hier spielte die Groß- Kleinschreibung schon eine Rolle.

Liegt das nun am 64 bit Betriebssystem?

vielen Dank und viele Grüße
hawk

  1. Hallo,

    Ich bin bisher der Annahme gewesen, dass unter Windows die Groß- Kleinschreibung keine Rolle spielt.

    das ist richtig - solange du die Suche und den Vergleich von Dateinamen Windows überlässt.

    Folgendes Abfrage funktionierte also mit der URL /myweburl/index.php und mit /MyWebUrl/index.php

    if($_SERVER['SCRIPT_NAME'] == "/myweburl/index.php")
    {

    Gestern nun hatte ich das Script auf einem Windows Server 2008 R2 ausprobiert und hier spielte die Groß- Kleinschreibung schon eine Rolle.

    Natürlich, wenn du den Stringvergleich selbst machst. So vergleicht PHP tatsächlich exakt.
    Windows ist zwar "case insensitive", aber "case preserving". Das heißt, es kümmert sich selbst nicht um Groß/Kleinschreibung, gibt die Schreibweise aber exakt so wieder wie eingegeben.

    Liegt das nun am 64 bit Betriebssystem?

    Nein.

    Ciao,
     Martin

    --
    Mit einem freundlichen Wort und einer Waffe erreicht man mehr, als mit einem freundlichen Wort allein.
      (Al Capone, amerikanische Gangsterlegende)
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. Hello,

      das ist richtig - solange du die Suche und den Vergleich von Dateinamen Windows überlässt.

      Und das würde auch im normalen Nutzungsfall für eine URL nicht der Fall sein. Da würde nicht Windows, sondern der Apache (oder sonstige Webserver) die Nachschau betreiben. Und für den gilt die Regel: Domainnamen sind case-insensitive und der URL-Anteil ist case-sensitive.

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
       ☻_
      /▌
      / \ Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
    2. Hallo,

      vielen Dank für die Antworten.

      Natürlich, wenn du den Stringvergleich selbst machst. So vergleicht PHP tatsächlich exakt.
      Windows ist zwar "case insensitive", aber "case preserving". Das heißt, es kümmert sich selbst nicht um Groß/Kleinschreibung, gibt die Schreibweise aber exakt so wieder wie eingegeben.

      Was ich dann trotzdem nicht verstehe ist: Warum macht die gleiche Abfrage
      mit
      if($_SERVER['SCRIPT_NAME'] == "/myweburl/index.php")

      auf einem Win 32 KEINEN Unterschied? Hier greift sowohl /myweburl/index.php als auch /MyWebUrl/index.php

      vielen Dank und viele Grüße
      hawk

      1. Hi,

        Windows ist zwar "case insensitive", aber "case preserving". Das heißt, es kümmert sich selbst nicht um Groß/Kleinschreibung, gibt die Schreibweise aber exakt so wieder wie eingegeben.

        Was ich dann trotzdem nicht verstehe ist: Warum macht die gleiche Abfrage
        mit
        if($_SERVER['SCRIPT_NAME'] == "/myweburl/index.php")

        auf einem Win 32 KEINEN Unterschied? Hier greift sowohl /myweburl/index.php als auch /MyWebUrl/index.php

        das hätte ich gern präzisiert, weil ich jetzt selbst neugierig geworden bin:
         a) Wie heißt der Dateisystempfad wirklich (exakte Schreibweise)?
         b) Wie lautet die genaue Request-URL (exakte Schreibweise)?
         c) Was liefert $_SERVER['SCRIPT_NAME'] (exakte Schreibweise)?
         d) An welcher Stelle probierst du die verschiedenen Schreibweisen?
            In der Stringkonstanten im Quellcode?
            Im Request?

        Meine Vermutung ist nämlich: Apache unter Windows findet die Dateien im Filesystem unabhängig von der genauen Schreibweise (case insensitive), $_SERVER['SCRIPT_NAME'] gibt jedoch die korrekte Schreibweise wieder, die nicht mit dem Request identisch sein muss. Dass das Verhalten auf einem 32bit-Windows anders sein soll als auf einem 64bit-Windows, kann ich mir aber nicht vorstellen. Eher schon, dass die Pfade tatsächlich anders heißen.
        Ich habe leider keinen Apache auf Windows mehr zur Hand, der ging vor etwa 1½ Jahren in Rente.

        So long,
         Martin

        --
        Nicht jeder, der aus dem Rahmen fällt, war vorher im Bilde.
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        1. Hallo Martin,

          nur mal ganz kurz zur Info.
          Ich habe ein Installer Setup das mir den Apache, PHP komplett installiert.
          Das gleiche Setup habe ich einmal unter Win32 und eben jetzt auch Server 2008 R2 (64bit) installiert. Die URLs, der Apache und auch PHP und alle Scripte sind also identisch. Der einzige Unterschied ist nur das Betriebssystem.

          Mir ist das bisher auch so noch nicht aufgefallen.

          vielen Dank und viele Grüße
          hawk

      2. Was passiert mit
        if ('a' == 'A')
        auf beiden Systemen? Eigentlich sollte das Problem ja nichts mit dem Dateisystem zu tun haben, denn hier geht es ja letztendlich nur um Strings.