Jag försöker läsa in och köra en PHP klass som hanterar uppladdning av bilder. Jag kör OOP med inläsning av följande rader för hanteringen av klasserna (raderna finns i en fil som jag kallar "_global_.php"):
I upload klassen används finfo för att hantera bilden som kommer in, men det är här det kör ihop sig. Troligen så är det ngt i min _global_.php som gör att finfo inte vill vara med i leken. Får följande felmeddelande:
Warning: require_once(../lib/finfo.php) [function.require-once]: failed to open stream: No such file or directory in /_global_.php on line 10
Fatal error: require_once() [function.require]: Failed opening required '../lib/finfo.php' (include_path='.:/usr/local/lib/php') in /_global_.php on line 10
Någon som vet hur jag kommer runt felet eller vad som knasar sig?
Hmm, nu vet jag inte riktigt ifall jag är med på vad du menar.
Ska _global_.php ha en klass som heter _global_?
__autoload() funktionen använder jag för att läsa in alla resterande klasser efter att ha inkluderat _global_.php.
Exempel:
include("__db__config.php");
include("__global__.php");
$Product = new Product($pdh);
$Category = new Category($pdh);
Detta har ju fungerat hur bra som helst, tills finfo kom in i bilden. Därför förstår jag inte varför det skulle behöva finnas en _global_ klass? Är det inte finfo funktionen som min _global_ tror är/körs som en klass?
Jag tar dock ut den del som innehåller finfo, av klassen class.upload.php som hanterar en uppladdad fil/bild:
if (function_exists('finfo_open')) {
$f = @finfo_open(FILEINFO_MIME, getenv('MAGIC'));
if (is_resource($f)) {
$mime = finfo_file($f, realpath($this->file_src_pathname));
finfo_close($f);
$this->file_src_mime = $mime;
$this->log .= '- MIME type detected as ' . $this->file_src_mime . ' by Fileinfo PECL extension<br />';
}
} elseif (class_exists('finfo')) {
$f = new finfo( FILEINFO_MIME );
$this->file_src_mime = $info->file(realpath($this->file_src_pathname));
$this->log .= '- MIME type detected as ' . $this->file_src_mime . ' by Fileinfo PECL extension<br />';
}
Och det är här jag tror det går snett;
$f = new finfo( FILEINFO_MIME );
"new finfo();" ser ju precis ut som om man initierar en ny klass, därför slukar nog min __autoload(); funktion även denna som en klass. Är jag på rätt spår tror ni?
Frågan är hur man ska gå runt det. Ska se ifall jag kan göra en variant att man skickas till en ny sida där inte __autoload finns, som hanterar uppladdningen. Ser gärna bättre förslag dock!
Hmmm.. absolut ingen dum fråga Duffer, jag hade totalt missat den kommentaren i koden. Är osäker på ifall PECL är installerat, har sidan på Binero - någon som kanske vet? Annars blir det ett telefonsamtal imorgon
Bäst vore det väl för dig om de ville bjuda på en installation av PECL's Fileinfo annars kan du ju modifiera din kod och använda mime_content_type() http://se2.php.net/manual/en/function.mime-content-type.php istället.
Så det är inte kört om de nu inte skulle ordna detta ;-)
Jag har aldrig använt finfo men det verkar vara många som har problem med den om man läser kommentarerna i manualen. GD är bra för att hantera bilder: http://se2.php.net/gd
Tack för svaren!
Din variant fungerade inte pulse, och jag var inne och provade din modifering Duffer men fick fel trots allt. I och med lite pressad tidsschema, valde jag att bygga vidare på ett äldre script som inte är lika kraftfullt.
Jag får kika närmare på Duffers mime_content_type() lösningen till nästa projekt! :)
281 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e