2017-07-26 2 views
2

Ich versuche, einen Verzeichnis Lister auf meinem Server laufen zu lassen.Fileinfo `Fehler identifizieren Daten 0 'Fehler in PHP 7.1

Der Code, den ich verwenden ist einfach:

$fi = new finfo(FILEINFO_MIME_TYPE); 

if (! file_exists($filePath)) { 
    return false; 
} 

$type = $fi->file($filePath); 

Was auch immer Filepath ich versuche, es hält einen Fehler werfen:

PHP Warning: finfo::file(): Failed identify data 0:cannot happen: invalid relation `@' in

ich folgende Dinge ausprobiert haben:

  1. -Test der file Befehl funktioniert einwandfrei und gibt den richtigen Mime-Typ
  2. zurück 210
  3. Versuchte finfo Funktionen statt Klasse, das gleiche Resultat (natürlich)
  4. versucht, verschiedene Dateien mit unterschiedlichen Inhalten, txt/php/javascript/json/html

Keine der oben die Fehlermeldung mit folgendem Befehl geändert ...

Irgendeine Idee, wie man das repariert?


Ich habe die folgenden Softwareversionen:

  • OS: FreeBSD 10.3
  • PHP: 7.1.4
  • fileinfo.dll: php71-fileinfo Version 1.0.5
  • Apache : 2.4.23 (FreeBSD)
+0

Missing die MIME-Typen DB? Spiel mit dem zweiten arg of finfo ctor? Speziell eine schlechte 'MAGIC' env Variable? – ficuscr

+0

Können Sie die Datei vorlesen? – Sebas

+0

@ficuscr die getenv ('MAGIC') gibt false zurück – Abayob

Antwort

0

Ah Windows ... Ja, meine Vermutung ist Sie nicht habe die benötigte Datenbank von Mime-Typen.

Versuchen var_dump getenv('MAGIC');

Siehe finfo_open

Note: Generally, using the bundled magic database (by leaving magic_file and the MAGIC environment variables unset) is the best course of action unless you specifically need a custom magic database.

Hier ist eine Quelle für diese Daten: http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types

Oder in WAMP versuchen, uns unter: C: \ wamp \ bin \ Apache \ apacheX .XX \ conf \ mime.types

-

aktualisieren

Ich gehe davon aus, den Code in PHP von libmagic wird so oft wie die Flat-File "db" Auflistung Erweiterungen MIME-Typen nicht aktualisiert. Ich war nie ganz klar, wie robust die Bytefolgenerkennung ist oder wie genau alles funktioniert. Ich habe immer darüber nachgedacht, Mime-Typ als beste Schätzung zu erkennen. Wäre gut, source code zu sehen, um zu versuchen und ein besseres Verständnis zu bekommen.

Ich habe auch kein klares Verständnis für den Unterschied zwischen FILEINFO_MIME und FILEINFO_MIME_TYPE Fileinfo Konstanten. Die OOP-Funktionen gegenüber der prozeduralen, wie mime_content_type() ist auch ein wenig verwirrend ohne Erwähnungen in der Dokumentation. Docs im Allgemeinen sind nicht gut in diesen Funktionen.Zu einer Zeit haben sie fälschlicherweise mime_content_type() als abgeschrieben aufgelistet, was eine Menge Verwirrung verursachte.

+1

Ah Windows? Ich habe das Betriebssystem des Systems am Ende des Posts: FreeBSD. Die Variable MAGIC ENV gibt false zurück, also habe ich recht. Ich verstehe die Datei apache mime.types nicht. Muss ich das anstelle von finfo verwenden, um Dateierweiterungen mit zu vergleichen? Ich repariere lieber die magische Bibliothek? – Abayob

+0

Sorry war wahrscheinlich Multitasking und falsch gelesen. Windows passt wegen der ungewöhnlichen Apache-Installationen. Wie auch immer, die Finfo-Funktion hängt von dieser Textdatei ab, um die Mime-Typen zu erkennen. "Gibt den MIME-Inhaltstyp für eine Datei zurück, der anhand von Informationen aus der magic.mime-Datei ermittelt wurde." Der Webserver stellt typischerweise das Wissen bereit, welcher MIME-Typ welcher Dateierweiterung entspricht. Vielleicht gedacht, um aktueller zu sein? Keine Ahnung. – ficuscr

+1

Nun OP hat eine DLL tho erwähnt, die ich glaube nicht funktioniert in jedem Linux-System – Sebas