php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 1,00 durchschnittlich.
Alt 09.10.2006, 12:30  
Erfahrener Benutzer
 
Registriert seit: 17.07.2005
Beiträge: 160
dethlef14
Standard Was mime_content_type übergeben

Hallo

1. Ich beiss mir gerade die Zähne aus an der Funktion mime_content_type.
Und zwar gibt mir die Funktion nicht den Mime Wert eines Bildes (hier eines jpgs) sondern lediglich "false" zurück, ich schein da der Funktion nicht das richtige zu übergeben.

Übrigens: Die Funktion existiert, da PHP 5 und extension in der php.ini aktiviert...

Das file pic.jpg liegt übrigens im gleichen Ordner wie das folgende Script. Ich weiss nicht was ich da falsch mache, laut php.net müsste das so doch funktionieren?! Wird wohl irgend eine Kleinigkeit sein, die ich einfach nicht seh...

PHP-Code:
<?php
var_dump
(mime_content_type('pic.jpg'));
var_dump(mime_content_type('./pic.jpg'));
var_dump(mime_content_type('./[...]/pic.jpg'));
var_dump(mime_content_type($_SERVER['DOCUMENT_ROOT'].'/[...]/pic.jpg'));
?>
Wie man sieht hab ich schon allerlei Pfadangaben versucht, die Ausgabe:

-->bool(false) bool(false) bool(false) bool(false)

2. Wenn ich dies an einer geuploadeten Datei dann (wenn es dann funktioniert) anwenden will, ist es möglich, mime_content_type einen temporären Namen Ã* la $_FILES['bild1']['tmp_name'] zu übergeben, oder muss man das File erst kopieren um dann den mime-type auszulesen und dann evtl wieder löschen?
dethlef14 ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 09.10.2006, 13:59  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

dirname(__FILE__) liefert dir den Pfad der Datei, in der du dich tatsächlich befindest

Ich empfehle dir für deine Projekte immer eine global PHP-Datei zu includen, die dir Pfad-Konstanten und ähnlich globales zur Verfügung stellt.

PHP-Code:
<?php
//////////////////////////////////////////////////////////////////////////////////////////
function abspath($path)
{
    
$newpath realpath($path);
    
$newpath str_replace('\\''/'$newpath);
    
$newpath rtrim($newpath'/\\');
    
$newpath $newpath '/';
    return 
$newpath;
}
//////////////////////////////////////////////////////////////////////////////////////////
define('PATH_A_WEBROOT',   abspath($_SERVER['DOCUMENT_ROOT']));

define('PATH_A_PROJECT',   abspath(dirname(__FILE__) . '/..')); // meine global.php liegt im inc/ ordner des projekt roots, daher ../
define('PATH_R_PROJECT',   rtrim(str_replace(PATH_A_WEBROOT''PATH_A_PROJECT), '/'));
define('PATH_W_PROJECT',   '/' PATH_R_PROJECT '/');
//////////////////////////////////////////////////////////////////////////////////////////
/*
_A_ steht für Absolut
_R_ für relativ
_W_ für Web
*/
?>
Zergling-new ist offline  
Alt 09.10.2006, 14:08  
Erfahrener Benutzer
 
Registriert seit: 17.07.2005
Beiträge: 160
dethlef14
Standard danke

danke für deinen Input, diese Idee scheint mir wirklich sinnvoll. Ich werde das einmal ausprobieren.

Aber... Inwiefern hilft mir das bei meinem Problem? dirnam(__FILE__) gibt mir nichts aus, das ich vorher nicht schon gewusst bzw. probiert habe?
dethlef14 ist offline  
Alt 09.10.2006, 14:30  
Erfahrener Benutzer
 
Benutzerbild von dsmcg
 
Registriert seit: 11.10.2005
Beiträge: 2.405
dsmcg sorgt für eine eindrucksvolle Atmosphäredsmcg sorgt für eine eindrucksvolle Atmosphäredsmcg sorgt für eine eindrucksvolle Atmosphäre
Standard

in der php.ini unter [mime_magic]
mime_magic.debug
auf On stellen (apache neustarten nicht vergessen) was kommt dann für eine Meldung?

in der httpd.conf muss so viel ich weiss auch das Modul aktiviert werden.
__________________
Wie man Fragen richtig stellt
dsmcg ist offline  
Alt 09.10.2006, 14:59  
Erfahrener Benutzer
 
Registriert seit: 17.07.2005
Beiträge: 160
dethlef14
Standard danke

besten Dank

Also, habe nun debug auf on, zudem in der httpd.conf das Modul aktiviert.

Allerdings bleibts leider bei
bool(false) bool(false) bool(false) bool(false)

Fehler wird trotzdem keiner ausgegeben.


Also vielleicht liegts ja irgendwo am Context, ich schreib hier also einmal worums überhaupt geht.

Also wie gesagt gehts um einen Bilder-Upload.
Die Bilder werden durch ein Formular klassisch
PHP-Code:

print'<form action="./inc/gallery/validate_gallery.inc.php?anzahl_inputs='.$_GET['anzahl_inputs'].'" enctype="multipart/form-data" method="post" maxlength="80000">';
print
'<input name="bild'.$i.'" type="file" accept="image/*" />';) 
(das $i steht für eine Schleife, da auf Wunsch bis zu 10 input Felder aufgelistet werden).


In der validate_gallery.inc.php soll dann eben der mime_type überprüft werden.
Momentan prüfe ich aber noch ein bereits bestehendes, also vom Upload noch unabhängiges File namens pic.jpg, das im Ordner ./inc/gallery liegt, also im selben Ordner wie die validate_gallery.inc.php.

Danke für weitere Vorschläge
dethlef14 ist offline  
Alt 10.10.2006, 10:59  
Erfahrener Benutzer
 
Registriert seit: 17.07.2005
Beiträge: 160
dethlef14
Standard Niemand?

Weiss niemand mehr Rat?
dethlef14 ist offline  
Alt 10.10.2006, 11:45  
Erfahrener Benutzer
 
Registriert seit: 13.11.2005
Beiträge: 2.583
xabbuh
Standard

Wenn ich dich richtig verstehe, möchtest du den Mime-Type des gerade hochgeladenen Bildes ermitteln. Dazu kannst du ganz einfach das entsprechende Element aus dem Array $_FILES verwenden:
PHP-Code:
<?php
    
echo mime_content_type($_FILES['bild1']['tmp_name']);
?>
xabbuh ist offline  
Alt 10.10.2006, 15:46  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

..oder $_FILES['userfile']['type']

http://de.php.net/manual/de/features.file-upload.php
Zitat:
Der Mime-Type der Datei, falls der Browser diese Information zur Verfügung gestellt hat.
Trotzdem besser, selber nochmal zu prüfen, wer weiß was der Browser liefert.
Zergling-new ist offline  
Alt 10.10.2006, 16:20  
Erfahrener Benutzer
 
Registriert seit: 17.07.2005
Beiträge: 160
dethlef14
Standard

Genau, ihr versteht mich richtig, allerdings ist das ja genau das Problem

Also immerhin konnte ich ihm jetzt eine Fehlermeldung entlocken.
Ich benutze Xampp aufm localhost...

PHP-Code:
<?php
if (!function_exists('mime_content_type'))
{
   function 
mime_content_type ($f)
   {
       return 
exec(trim('file -bi'.escapeshellarg($f)));
   }
}

echo 
$_FILES['bild1']['tmp_name']."
"
;?>
Das spuckt mime_content_type($_FILES['bild1']['tmp_name']) aus: <?php echo mime_content_type($_FILES['bild1']['tmp_name']); ?>

Das spuckt: $_FILES['bild1']['type'] aus: <?php echo $_FILES['bild1']['type'];
?>

Die Ausgabe, immerhin jetzt mit Fehlermeldung, mit der ich allerdings nichts anfangen kann:

Code:
C:\Programme\xampp\tmp\php5B.tmp
Das spuckt mime_content_type($_FILES['bild1']['tmp_name']) aus:
Warning: mime_content_type() [http://www.php.net/mime_magic]: mime_magic not initialized in C:\Programme\xampp\htdocs\[...]\validate_gallery.inc.php on line 18

Das spuckt: $_FILES['bild1']['type'] aus: image/jpeg
Was heisst nun "mime_magic not initialized in C:\Programme\xampp\htdocs\[...]\validate_gallery.inc.php on line 18"

Also bevor Vorschläge in diese Richtung kommen:
in der httpd.conf ist das mime Modul aktiviert!
in der php.ini (der richtigen) ist mime extension an und auch mime.debug ist on.

Zudem scheint die Funktion zu bestehen, da im Code ja eine Alternative wäre falls nicht. $_FILES['bild1']['type'] wird ebenfalls korrekt ausgegeben, so dass es nicht an der Übertragung des Files liegen sollte...

$_FILES['bild1']['type'] möchte ich aus bereits genannten Gründen wennmöglich nicht verwenden....

Wer wird schlau aus der Fehlermeldung, Googlen brachte nicht so viel, ich weiss nicht mehr was ich noch machen könnte...

Edit: Also beim Googeln sind mir einige Beiträge in Foren aufgefallen von Leuten die auch Probleme mit mime.magic hatten im Zusammenhang mit Xampp, allerdings sind diese Einträge teilweise 2 Jahre alt und ich nehme an, dass das jetzt eigentlich gefixt sein sollte. Hat hier jemand erfahrung mit mime und xampp bei neuen Versionen?

Edit2: Interessant auch, dass wenn ich die von php.net vorgschlagene Alternative Funktion verwende, falls mime_content_type nicht vorhanden sein sollte gibt NICHTS aus...
Leider verstehe ich diese Alternativ-Funktion nicht. Erst dacht ich es könnte daran liegen, dass ich Windows benutze und diese Funktion unix spezifisch ist. -->Folglich habe ich um dies auszutesten das Script auf einen Linux-Server geladen, der mime.magic nicht aktiviert hat, also auf diese alternativ-Funktion zugreifen sollte, doch das Ergebnis: Wieder NICHTS, leider... Seltsam, aber da ich die Alternativ-Funktion nicht verstehe komme ich hier auch nicht weiter, vielleicht könnte diese auch jemand erklären, bzw. eine andere Alternativ-Funktion vorschlagen, die Lokal sowie auch auf dem Server ohne Mime zu benutzen wäre?


Also bin leider weiterhin auf Vorschläge angewiesen... Vielen Dank
dethlef14 ist offline  
Alt 10.10.2006, 22:31  
Erfahrener Benutzer
 
Registriert seit: 17.07.2005
Beiträge: 160
dethlef14
Standard

kann mir niemand mehr helfen?
dethlef14 ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mime_content_type, php mime_content_type, mime_content_type alternative, mime_content_type(), mime_content_type php, mime_content_type($_files, php mime_content_type(), php mime_content_type windows, mime_content_type aktivieren, mime_content_type php alterbative, mime_content_type() aktivieren, php mime bool(false), mime_magic not initialized, mime_content_type jpg, php mime_content_type()[1], php windiws mime_content_type, mime_content_type php de, php mime-content-type, php get mime_content_type, php mime content type

Alle Zeitangaben in WEZ +1. Es ist jetzt 09:55 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.