GMG: Probleme mit der Extension php_mime_magic.dll

Hallo,

ich will bei einem Upload-Script die Mime-Typen prüfen. Hierfür gibt es in PHP mime_content_type oder die PECL extension Fileinfo. Auf meinem lokalen Testsystem (via Uniformserver) ist beides standartmäßig nicht vorhanden. Ich würde her zu Fileinfo greifen, da mime_content_type als deprecated eingestuft ist.
Da aber auf meinem Webspace Fileinfo nicht verfügbar ist, werde ich doch mangels Alternativen mime_content_type verwenden. Nun habe ich versucht, dieses bei mir lokal zu aktivieren - also die php_mime_magic.dll aus dem aktuellen PHP 5.2.6 von php.net in meine extension-dir kopiert und in der php.ini das Semikolon vor "extension=php_mime_magic.dll" entfernt.

Nun kommt keine Fehlermeldung beim aufrufen von mime_content_type mehr, aber die Funktion mime_content_type gibt nichts zurück. Ich habe zig unterscheidliche Dateitypen ausprobiert, aber es kommt _nichts_ zurück. Auch einige Server-Restarts brchten nichts.

Varianten mit eigenen Listen häufig verwendeten mime-typen halte ich für keine gute Lsung, da im Zweifelsfall der entsprechende Eintrag doch nicht vorhanden ist.

Kann mir jemand helfen mime_content_type sauber zum laufen zu bekommen? Wäre super. Schon mal im voraus Danke!

Gruß,
GMG

  1. Hi GMG,

    Kann mir jemand helfen mime_content_type sauber zum laufen zu bekommen? Wäre super. Schon mal im voraus Danke!

    Ok, du möchtest die mime_magic Extension verwenden, hast du dir auch die Installations-Anleitung dazu durchgelesen?
    Dort steht nämlich der Hinweis, dass Windows-User (du verrätst uns zwar leider nicht, welches Betriebssystem deine Testumgebung hat, aber aufgrund der .DLL Datei gehe ich mal stark von Windows aus) den Pfad zur mime.magic Datei entsprechend konfigurieren müssen, damit die mime_magic Extension funktioniert.

    Generell solltest du dir vielleicht doch noch mal überlegen, ob du nicht lieber die FileInfo Extension verwenden möchtest. Im aktuellen PHP-Zweig 5.2 musst du diese zwar noch manuell installieren, im zukünftigen PHP 5.3 wird diese aber standardmäßig installiert sein.

    Viele Grüße,
      ~ Dennis.

    1. Hi Dennis,

      Ok, du möchtest die mime_magic Extension verwenden, hast du dir auch die Installations-Anleitung dazu durchgelesen?
      Dort steht nämlich der Hinweis, dass Windows-User (du verrätst uns zwar leider nicht, welches Betriebssystem deine Testumgebung hat, aber aufgrund der .DLL Datei gehe ich mal stark von Windows aus) den Pfad zur mime.magic Datei entsprechend konfigurieren müssen, damit die mime_magic Extension funktioniert.

      Sry, ich verwende Win XP. Ich habe nun die magic.mime in das Verzeichnis kopiert und auch in der php.ini entsprechend verlinkt, aber das Ergebnis ist immer noch das selbe. Was hat es damit auf sich? "You must compile PHP with the configure switch --with-mime-magic to get support for mime-type functions"

      Generell solltest du dir vielleicht doch noch mal überlegen, ob du nicht lieber die FileInfo Extension verwenden möchtest. Im aktuellen PHP-Zweig 5.2 musst du diese zwar noch manuell installieren, im zukünftigen PHP 5.3 wird diese aber standardmäßig installiert sein.

      Der Grund hierfür ist, dass mein Hoster Fileinfo erst ab PHP 5.3 unterstützen wird, momentan aber noch PHP 5.2 dort läuft. Deshalb wll ich einen Switch einbauen, der je nach Verfügbarkeit eine der beiden Funktionen verwendet.

      Viele Grüße,
      Gabriel

      1. Hi GMG,

        Ich habe nun die magic.mime in das Verzeichnis kopiert und auch in der php.ini entsprechend verlinkt, aber das Ergebnis ist immer noch das selbe.

        Wie verwendest du PHP?
        Verwendest du PHP als Apache-Modul? Dann musst du nach Änderungen an der php.ini den Apache neustarten, gleiches gilt für einen anderen Webserver, der PHP als Modul verwendet.
        Verwendest du PHP über FastCGI? Dann musst du alle PHP Prozesse beenden und neu starten, was du am leichtesten ebenfalls über einen Neustart des Webservers erlangst.
        Lediglich wenn du PHP über CGI eingebunden hast, musst du nichts neu starten.

        Hast du die richtige php.ini editiert? Bzw. liegt die php.ini am richtigen Ort, so dass PHP diese auch einliest? Wenn die php.ini am falschen Ort liegt, kannst du in die php.ini natürlich schreiben was du willst, ohne dass es irgendwelche Auswirkungen hat.

        Hast du in der Ausgabe von phpinfo() geprüft, ob die Konfiguration korrekt übernommen wurde? Sonst schau dir mal an, was ini_get('mime_magic.magicfile') ausgibt, ist der Pfad korrekt? Hast du den Pfad absolut angegeben und nicht relativ?

        Was hat es damit auf sich? "You must compile PHP with the configure switch --with-mime-magic to get support for mime-type functions"

        Das bedeutet, dass du dem Configure-Script die Option "--with-mime-magic" mitgeben musst, wenn du dir PHP selbst installierst. Dadurch wird das Module mime-magic fest in PHP eingebunden (d.h. es ist fester Bestandteil der php.exe unter Windows, bzw. php unter Unix und steht somit immer zur Verfügung). Alternativ kannst du (das gilt für fast alle Module und ist daher auf der Seite nicht extra erwähnt) auch "--with-mime-magic=shared" angeben, dann wird dir eine .dll (Windows) oder .so (Unix) erstellt, ein Modul, welches du dynamisch in PHP laden kannst.

        Für dich ist dies aber irrelevant, weil du dein PHP ja (davon gehe ich mal aus) nicht selber kompilierst, sondern die fertigen Windows-Binaries von php.net verwendest und nur das entsprechende Modul laden willst.

        Der Grund hierfür ist, dass mein Hoster Fileinfo erst ab PHP 5.3 unterstützen wird, momentan aber noch PHP 5.2 dort läuft. Deshalb wll ich einen Switch einbauen, der je nach Verfügbarkeit eine der beiden Funktionen verwendet.

        Ok, das ist für eine Anwendung, welche portabel sein soll, sinnvoll.

        Viele Grüße,
          ~ Dennis.

        1. Hi Dennis,

          erstmal danke für deine ganzen bisherigen Antworten.

          Wie verwendest du PHP?

          Als Apache-Modul. Den Apache habe ich immer wieder gestoppt und neu gestartet (keine "soft-restarts").

          Hast du die richtige php.ini editiert?

          Ja, die einzige existente. Sie liegt im selben Verzeichnis wie die php.exe und nach dem Edit kommt die Fehlermeldung, dass die Funktion nicht vorhanden wäre auch nicht mehr.

          Hast du in der Ausgabe von phpinfo() geprüft, ob die Konfiguration korrekt übernommen wurde? Sonst schau dir mal an, was ini_get('mime_magic.magicfile') ausgibt, ist der Pfad korrekt?

          Der Pfad ist absolut angegeben.
          Die Ausgabe ist "W:\usr\local\php\magic.mime", was korrekt ist.
          In der phpinfo steht unter anderem "mod_mime" unter "Loaded Modules".

          Was hat es damit auf sich? "You must compile PHP with the configure switch --with-mime-magic to get support for mime-type functions"
          Für dich ist dies aber irrelevant, weil du dein PHP ja (davon gehe ich mal aus) nicht selber kompilierst, sondern die fertigen Windows-Binaries von php.net verwendest und nur das entsprechende Modul laden willst.

          Danke für die Info.

          Ich wüsste gerade nicht, was ich sonst noch machen könnte. Die Funktion gibt in meiner lokalen Testumgebung einfach nichts zurück. Auf dem Webserver funktioniert es einwandfrei.

          Gibt es sonst noch Ansätze, das hinzubekommen?

          Viele Grüße,
          GMG

  2. Hi,

    Nun kommt keine Fehlermeldung beim aufrufen von mime_content_type mehr, aber die Funktion mime_content_type gibt nichts zurück. Ich habe zig unterscheidliche Dateitypen ausprobiert, aber es kommt _nichts_ zurück.

    Die Nutzerkommentare im Manual berichten davon, dass unter Windows bei einigen Nutzern ein php.ini-Eintrag fuer mime_magic.debug erforderlich war.
    Der eine berichtet davon, dass er die Einstellung auf Off stellen musste, was zwar wohl der Default sei, aber ohne habe es bei ihm nicht funktioniert. Und ein anderer schreibt, dass bei ihm die Einstellung On Erfolg brachte.
    Das klingt zwar etwas widerspruechlich, aber vielleicht probierst du das (beides) mal aus ...?

    MfG ChrisB

    --
    „This is the author's opinion, not necessarily that of Starbucks.“
    1. Hi ChrisB,

      danke für die Antwort.

      Die Nutzerkommentare im Manual berichten davon, dass unter Windows bei einigen Nutzern ein php.ini-Eintrag fuer mime_magic.debug erforderlich war.
      Der eine berichtet davon, dass er die Einstellung auf Off stellen musste, was zwar wohl der Default sei, aber ohne habe es bei ihm nicht funktioniert. Und ein anderer schreibt, dass bei ihm die Einstellung On Erfolg brachte.
      Das klingt zwar etwas widerspruechlich, aber vielleicht probierst du das (beides) mal aus ...?

      Ich habe beides ausprobiert (Der Eintrag war gar nicht vorhanden):
      Mit der Einstellung Off ändert sich nichts, mit On kommt die Fehlermeldung "mime_magic not initialized" - was muss man da initialisieren?

      Was mir noch aufgefallen ist: In der httpd.conf ist "mime_module modules" aktiviert, aber "mime_magic_module" deaktiviert. Ist das von Belang?
      Und wenn ja, wo kann man die modules/mod_mime_magic.so runterladen, ohne sich gleich den Apache komplett neu zu installieren?

      Viele Grüße,
      GMG