---
title: "OOP och finfo"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/175426-oop-och-finfo"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "dreas"
published: "2008-11-20T15:50:20.000Z"
updated: "2008-11-21T15:53:30.000Z"
replies: 9
views: 969
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/175426-oop-och-finfo"
---

# OOP och finfo

## #1 — dreas, 2008-11-20T15:50Z

Hej,

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"):

```php
try {
	$pdh = new PDO("mysql:host=" . constant("DBHOST") . ";dbname=" . constant("DBNAME"), constant("DBUSR"), constant("DBPWD")); 
} catch(exception $e) {
	echo 'Error, felmeddelande: ',  $e->getMessage(), "\n";
}

function __autoload($class_name) {
    require_once '../lib/' . $class_name . '.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?

Permalänk: https://www.webforum.nu/p/175426

## #2 — Melea, 2008-11-20T16:03Z

\__autoload() laddar in filer som har samma namn som klassen. Så min gissning är att \__global_\_.php inte har en klass som heter \__global_\_ i sig.

Permalänk: https://www.webforum.nu/p/2156875

## #3 — dreas, 2008-11-20T16:18Z

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:

```php
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?

Permalänk: https://www.webforum.nu/p/2156878

## #4 — Melea, 2008-11-20T17:55Z

Aha, missförstod dig, sorry. :)

Felmeddelandet du får betyder att den inte hittar finfo.php, sökvägen är alltså fel.
Hur ser sökvägen ut där du inkluderar finfo.php?

Permalänk: https://www.webforum.nu/p/2156886

## #5 — dreas, 2008-11-20T19:16Z

Inga problem, uppskattar bara att ngn tar sig tid! :)

Tror att du missförstår mig igen dock. 

finfo är alltså ingen fil eller include, utan det är en funktion/metod inbyggd i PHP (se <http://se2.php.net/manual/en/function.finfo-file.php>)

Jag tar dock ut den del som innehåller finfo, av klassen class.upload.php som hanterar en uppladdad fil/bild:

```php
 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!

Permalänk: https://www.webforum.nu/p/2156891

## #6 — Duffer, 2008-11-20T20:47Z

Hej,
Dum fråga kanske, men du har väl PECL installerat på din server?

Mvh
Tobias

Permalänk: https://www.webforum.nu/p/2156915

## #7 — dreas, 2008-11-20T21:58Z

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

Märkligt att det inte står något om PECL från den källa där jag hitta denna upload klass:
<http://www.verot.net/php_class_upload.htm>

Ska undersöka det lite närmare, men det är ingen som har ett förslag på en annan PHP klass för bild uppladdning och manipulering?

Permalänk: https://www.webforum.nu/p/2156922

## #8 — Duffer, 2008-11-20T23:10Z

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 ;-)

Mvh
Tobias

Permalänk: https://www.webforum.nu/p/2156933

## #9 — pulse, 2008-11-20T23:36Z

Prova modifera din autoload till:

```
function __autoload($class_name) {
	if(class_exists($class_name, false){
		return;
	}
    	require_once '../lib/' . $class_name . '.php';
}
```

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>

Permalänk: https://www.webforum.nu/p/2156939

## #10 — dreas, 2008-11-21T15:53Z

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! :)

Permalänk: https://www.webforum.nu/p/2156984

---

Tråden på webben: https://www.webforum.nu/amne/php/175426-oop-och-finfo
