Ankündigung

Einklappen
Keine Ankündigung bisher.

Linux-sicherer Autoloader

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Linux-sicherer Autoloader

    Hallo, bin auf der Suche nach einem Linux-sicheren autoloader. Das Problem: Ich entwickle auf Windows, dort klappt alles super, hab jedoch Angst, und die scheint berechtigt zu sein wie ich in der Doku nachlesen kann, dass mein autoloader auf linux rumspinnen wird. Mein Projekt hat klassennamen in kamelschreibweiße, diese entsprechen den dateinamen. Ich verwende namespaces und benutze beim autoloader

    PHP-Code:
    <?php
    //...
        
    spl_autoload_register();
    //...
    Da ich leider nicht die Möglichkeit habe auf Linux zu testen, muss ich auf Erfahrungwerte von anderen Leuten zurückgreifen. Habt ihr Vorschläge für einen cross-Os-tauglichen autoloader. (Muss nix großes sein, ein Denkanstoß genügt)

    PS. Ich bin in meiner Recherche darauf gestoßen, dass Frameworks in großer Zahl include in der eigens definierten autoloader Funktion verwenden, und nicht auf die native Funktion zurückgreifen. Ist das ein workaround genau für den Zweck?

  • #2
    Zitat von Phpyton Beitrag anzeigen
    Mein Projekt hat klassennamen in kamelschreibweiße, diese entsprechen den dateinamen.
    Sollte passen. Immer Slash nutzen für Pfade, niemals Backslash. Windows kommt auch damit klar, Linux aber nicht mit Backslash.

    Wenn du dich direkt auf PSR-4 einstellst und Composer nutzt, welches einen Autoloader mitbringt, wirst du dich später nicht umgewöhnen müssen wenn du mit größeren Frameworks wie Symfony arbeiten willst, die alle mit Composer (aber ich glaube - noch - PSR-0) arbeiten.

    Zitat von Phpyton Beitrag anzeigen
    PS. Ich bin in meiner Recherche darauf gestoßen, dass Frameworks in großer Zahl include in der eigens definierten autoloader Funktion verwenden, und nicht auf die native Funktion zurückgreifen. Ist das ein workaround genau für den Zweck?
    Verstehe nicht ganz, was du genau meinst.

    Edit: Vertan, danke tr0y
    [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

    Kommentar


    • #3
      psr-2 ist eine coding guideline kein autoloading standard.

      Symfony und Co arbeiten ( stand 2014 ) mit PSR-0. Composer ist defakto-standard für Autoloading und dependency management.

      Dein Linuxproblem ist ein Ich-nutze-was-ich-will-und-kein-DIRECTORY_SEPERATOR-Problem. Autoloader sind nicht schwierig, funktionieren aber nur bei Klassen.
      [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

      Kommentar


      • #4
        Das Problem ist auch, dass spl_autoloader den Klassennamen lowercased, und Linux case-sensitive ist.

        Kommentar


        • #5
          spl_autoloader verändert keine Strings
          [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

          Kommentar


          • #6
            Zitat von Phpyton Beitrag anzeigen
            Das Problem ist auch, dass spl_autoloader den Klassennamen lowercased, und Linux case-sensitive ist.
            das Problem ist dass Windows es nicht unterscheidet

            include 'file.php' und include 'File.php' ist unter windows das gleiche
            apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

            Kommentar


            • #7
              spl_autoloader verändert keine Strings
              http://php.net/manual/en/function.spl-autoload.php
              [...]
              class_name
              The lowercased name of the class (and namespace) being instantiated.

              Kommentar


              • #8
                spl_autoload verändert das nicht, er will den Klassenname lowercased. Das ist ein Parameter, kein Return-Value.
                [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                Kommentar


                • #9
                  Ok, was sagst du dazu: http://php.net/manual/en/function.sp...ster.php#96804

                  Kommentar


                  • #10
                    Was sagst du dazu?

                    Class Loader: https://github.com/composer/composer...lassLoader.php
                    AutoLoad Generator: https://github.com/composer/composer....php#L473-L475

                    Der nette Kollege registriert da spl_autoload an den autoloader stack. Deine spl_autoload_register callbacks werden immer case-sensitiv mit dem Klassen-Namen versorgt.

                    spl_autoload() ist der Falsche Weg für flexibles und intuitives Autoloading.
                    [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                    Kommentar


                    • #11
                      übrigens schau wann der comment gemacht wurde(4 years ago)
                      apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

                      Kommentar


                      • #12
                        spl_autoload() ist der Falsche Weg für flexibles und intuitives Autoloading.
                        Und warum?

                        Kommentar


                        • #13
                          Zitat von Phpyton Beitrag anzeigen
                          Und warum?
                          Weil composer bereits fertig ist.

                          Kommentar


                          • #14
                            Zitat von Phpyton
                            Das Problem ist auch, dass spl_autoloader den Klassennamen lowercased, und Linux case-sensitive ist.
                            Zitat von tr0y
                            spl_autoload verändert das nicht, er will den Klassenname lowercased. Das ist ein Parameter, kein Return-Value.
                            Na ja, da kann man jetzt wohl wirklich Haare spalten.

                            Das hier…

                            PHP-Code:
                            <?php
                            spl_autoload_register
                            (); // Standardmäßig spl_autoload
                            new Foo();
                            …funktioniert auf meinem System (Linux, PHP 5.5.9) jedenfalls mit einer foo.php, aber funktioniert nicht mit einer Foo.php. Mit dem Sourcecode fange ich mal nicht noch an.

                            Autoloading ist im Grunde (wie andere Leute schon gesagt haben) ein gelöstes Problem, und etwa Composer ist eine ziemlich gute Lösung (auch als reiner Autoloader ohne Nutzung externer Packages). Kann ich (oder gerne auch wer anders) bei Wunsch noch weiter ausführen. Hintergründe ansonsten unter anderem hier:

                            - http://www.php.de/php-einsteiger/989...art-guide.html

                            Was beispielsweise möglich ist: http://phpforum.de/forum/showthread.php?t=277839 (etwa ab Post #15) Man beachte auf diesem Bild (aus #17), wie Composer sogar aus zwei Klassen, die in einer Datei definiert werden, eine passende Map fürs Autoloading baut. Die Software ist ziemlich gut.

                            (Edit: Der exakte „Code“, der da auf phpforum.de erwähnt wird, ist aber mittlerweile glaube ich nicht mehr aktuell. Wie gesagt: Bei Interesse oder Problemen sehr gerne nachfragen.)

                            Kommentar


                            • #15
                              Ich hatte gar nicht gewusst, dass man den ersten Parameter bei spl_autoload_register weglassen kann. Wenn man ihn setzt, bleiben die Klassennamen korrekt erhalten (original-case).

                              Kommentar

                              Lädt...
                              X