2012-03-31 16 views
14

Próbuję zainstalować rozszerzenie PHP imagick na windows. Pracował na PHP 5.2, PHP 5.3, ale mam problemy z PHP 5.4.Rozszerzenie Imagick PHP 5.4 nie działa ze względnymi ścieżkami. (Windows)

Wersja w wersji Imagick: ImageMagick-6.7.6-3-Q16-windows-dll. Moduł działa. Widzę obraz w phpinfo().

Problem polega na tym, że obraz nie rozpoznaje względnej ścieżki do plików. Na przykład, jeśli mam prosty index.php i a.jpg w tym samym folderze, nie mogę używać $im = new imagick('a.jpg'); ponieważ otrzymuję wyjątek:

Fatal error: Uncaught exception 'ImagickException' with message 'unable to open image `a.jpg': No such file or directory @ error/blob.c/OpenBlob/2614' in D:\Web\i\index.php:3 Stack trace: #0 D:\Web\i\index.php(3): Imagick->__construct('a.jpg') #1 {main} thrown in D:\Web\i\index.php on line 3

Ale kiedy użyć ścieżki bezwzględnej $im = new imagick('D:\web\i\a.jpg'); jest pracujący.

Dowiedziałem się, że Imagick używa referencyjnego rdzenia Apache'a. Zapisałem obraz bez ścieżki:

$ im-> writeImage ("this-is-what-im-looking-for.jpg");

I znalazłem go w C: \ Program Files (x86) \ Apache24 \ this-is-what-im-szuka-for.jpg

Problem polega na tym, że wszystkie moje stare skrypty są napisane względnymi ścieżkami i chciałbym je zliczyć.

Nie wiem, czy problem leży w samym obrazie, czy gdzieś w PHP 5.4.

góry dziękuję

+0

Jakie jest Twoje pytanie? Nie możesz użyć '$ _SERVER ['DOCUMENT_ROOT']'? –

+0

Czy to tylko problem z Imagick? Czy możesz zrobić "echo __DIR__" i sprawdzić, czy to nie jest twój katalog roboczy? –

+1

Ben: Moje pytanie brzmi: jak sprawić, aby obraz był używany jako katalog bieżący (D: \ web \ i) jako katalog roboczy zamiast katalogu głównego Apache (C: \ Program Files (x86) \ Apache24 \) (ponieważ działał w starsze wersje PHP) –

Odpowiedz

10

Brzmi jak mogłeś odkryła błąd.

sugeruję zgłoszenie go w http://bugs.php.net/report.php

W międzyczasie można obejść stosując __DIR__ lub __FILE__ do skonstruowania ścieżki bezwzględnej.

Na przykład, aby użyć katalogu skryptu, wykonaj następujące czynności:

$im = new imagick (__DIR__ . DIRECTORY_SEPARATOR . 'a.jpg'); 
+2

dziękuję, to obejście działa. w rzeczywistości, lepszym sposobem (dla mnie) jest realpath ("a.jpg "); działa bez żadnych problemów. Próbowałem po prostu dowiedzieć się, czy ktoś inny miał podobny problem. próbowałem 2 różnych php_imagick.dll (nie jestem w stanie skompilować go samemu pod Windowsem) i 4 różnych wersji Imagick (instalatorów), ale myślę, że to nie jest prawdziwy problem, ponieważ przy ścieżkach bezwzględnych działa dobrze. –

Powiązane problemy