Sören: Problem mit mime_content_type();

Konnichi wa,

<?php  
// Mit den folgenden Zeilen lassen sich  
// alle Dateien in einem Verzeichnis auslesen  
$dir = "../../../content/sample/album1/img/large/";  
$handle = opendir($dir);  
echo "Verzeichnisinhalt:<br>\r\n";  
while ($datei = readdir ($handle)) {  
	if (!is_dir($datei)) {  
		echo "$datei Mime-type: ";  
		echo mime_content_type($dir.$datei);  
		echo "<br />\r\n";  
	}  
}  
closedir($handle);  
  
  
?>

Bei diesem Code werden mir nur die Dateinamen ausgegeben, aber nicht der Mime-type.
Ich bekomme auch keine Fehlermeldung o.ä.
Wenn ich überprüfen lasse ob die Function mime_content_type() existiert, wird mir gesagt, das diese existent ist.

Weiß jemand Rat?

Grüße aus Nippon
Sören-san

  1. Hallo Sören,

    kann es sein, dass die Datei nicht lesbar ist?
    Ich würde es noch folgendermaßen versuchen:

    if (!is_dir($datei) && is_readable($datei))

    Alternativ, falls nichts nutzt, kannst du "getimagesize" Funktion für Bilder verwenden.

    Gruß Alexander

    1. kann es sein, dass die Datei nicht lesbar ist?
      Ich würde es noch folgendermaßen versuchen:

      if (!is_dir($datei) && is_readable($datei))

      Alternativ, falls nichts nutzt, kannst du "getimagesize" Funktion für Bilder verwenden.

      Ja, die Datei is anscheinend nicht lesbar. Woran liegt das? Das Script läuft unter XAMPP auf WIndows.

      1. Hallo,

        ich würde als nächstes prüfen ob Pfad korrekt ist und Performancehalber würde auch globale Pfadangaben machen

        $path = dirname(__FILE__) . '/a/b/c.jpg'; // nebenbei gemerkt.

        Die PHP-Einstellung "open_basedir" soll geprüft werden, wenn sie unter Windows Einfluss hat.

        Die Fehlermeldungen sollen aktiviert werden. Möglichst ganz oben im Script.

        ini_set('display_errors', 'on');  
        error_reporting(E_ALL ^ E_NOTICE);
        

        Wenn die Anweisungen im Script sind, dann prüfe mit "phpinfo()" ob die Einstellungen wirklich übernommen wurden. Soweit ich weis gibt es in den letzten Versionen von Plesk ein "Problem" damit.

        Dann bitte die Fehlermeldungen noch mal hier posten, falls es nicht weiter geht.

        Gruß Alexander.

      2. Hello,

        if (!is_dir($datei) && is_readable($datei))

        Ja, die Datei is anscheinend nicht lesbar. Woran liegt das? Das Script läuft unter XAMPP auf WIndows.

        is_readable() produziert da ungewöhnliche Ergebnisse.

        Hatten wir hier schon mal einen Thread, in dem ich das (ohne zu testen) in den vorgeschlagenen Code eingebaut hatte und der OP sich den Wolf probiert hat.

        Die Funktion muss wohl einen Bug haben. :-(
        Ich habe es noch nicht weiter untersucht, weil sie eigentlich sowie für den A.... ist. Man darf nicht erst testen und hunderttausend Taktzyklen später erst die Datei öffnen.

        Man muss öffnen und DABEI feststellen, dass es nicht geklappt hat, sonst baut man sich einen TOCTOU-Fehler http://en.wikipedia.org/wiki/Time-of-check-to-time-of-use.

        Is_readable() wäre also eigentlich nur für reine pauschale Auskunftszwecke brauchbar, z.B. um eine Installation vorzubereiten oder zu überprüfen, wenn man nicht wirklich sofort in den Dateien lesen will.

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
  2. Hello,

    <?php

    // Mit den folgenden Zeilen lassen sich
    // alle Dateien in einem Verzeichnis auslesen
    $dir = "../../../content/sample/album1/img/large/";
    $handle = opendir($dir);
    echo "Verzeichnisinhalt:<br>\r\n";
    while ($datei = readdir ($handle)) {
    if (!is_dir($datei)) {
    echo "$datei Mime-type: ";
    echo mime_content_type($dir.$datei);
    echo "<br />\r\n";
    }
    }
    closedir($handle);

    ?>

    
    >   
    > Bei diesem Code werden mir nur die Dateinamen ausgegeben, aber nicht der Mime-type.  
    > Ich bekomme auch keine Fehlermeldung o.ä.  
    > Wenn ich überprüfen lasse ob die Function mime\_content\_type() existiert, wird mir gesagt, das diese existent ist.  
    >   
    > Weiß jemand Rat?  
      
    Ich hoffe, Du hast error\_reporting(E\_ALL) gesetzt?  
      
    Wenn ja, dann vermute ich, dass Du das Script auf einem Xampp aufrufst?  
    Die Funktion tut's öfter auf Windows nicht mehr vernünftig.  
      
    Darum soll sie ja auch leider aus dem Sprachumfang von PHP verschwinden. Das halte ich persönlich für einen riesengroßen Fehler. Man sollte sie besser überarbeiten und sie auch fest eingebunden im Array $\_FILES anwenden!  
      
      
      
    Liebe Grüße aus dem schönen Oberharz  
      
      
    Tom vom Berg  
    ![](http://selfhtml.bitworks.de/Virencheck.gif)  
      
    
    -- 
    Nur selber lernen macht schlau  
    <http://bergpost.annerschbarrich.de>
    
    1. Ich hoffe, Du hast error_reporting(E_ALL) gesetzt?

      Wenn ja, dann vermute ich, dass Du das Script auf einem Xampp aufrufst?
      Die Funktion tut's öfter auf Windows nicht mehr vernünftig.

      error_reporting(E_ALL) zeigt mir keinen Fehler.
      Ja, ich benutze XAMPP.

      Darum soll sie ja auch leider aus dem Sprachumfang von PHP verschwinden. Das halte ich persönlich für einen riesengroßen Fehler. Man sollte sie besser überarbeiten und sie auch fest eingebunden im Array $_FILES anwenden!

      Ja, das is blöd, das diese aus PHP verschwinden soll. Dann muss ich wohl auf ne selbstgeschriebene Mime-Function zurückgreifen.

      1. Hello,

        Darum soll sie ja auch leider aus dem Sprachumfang von PHP verschwinden. Das halte ich persönlich für einen riesengroßen Fehler. Man sollte sie besser überarbeiten und sie auch fest eingebunden im Array $_FILES anwenden!

        Ja, das is blöd, das diese aus PHP verschwinden soll. Dann muss ich wohl auf ne selbstgeschriebene Mime-Function zurückgreifen.

        Es gibt da eine neue: http://de2.php.net/manual/de/book.fileinfo.php
        Die ist aber bis PHP 5.2.9 nur über die PECL-Extension zu benutzten.

        Ab PHP 5.3.x (?) ist die angeblich Bestandteil von PHP

        Allerdings haben schon viele Leute Tests damit gemacht, die immer wieder hässliche Ergebnisse hervorgebracht haben, viel mehr Fehler, als mime_content_type() produziert hat. Bei mime_contente_type() kam dann im Versagensfall wenigstens meistens false dabei heraus.

        Wenn Du eine selbstgeschriebene Funktion hast/findest (als PHP-Lösung), die ordentlich funktioniert, wäre ich Dir für eine Info sehr dankbar. Wenn auch eine Doku dabei wäre, wäre ich überglücklich.

        Ich habe da diesbezüglich noch ein paar dicke "Leichen im Keller", die ich gerne beseitigen würde.

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de