Odeslání formuláře a chyba „PHP extension GD is not loaded“

MikKuba
Člen | 59
+
0
-

Ahoj,

Tak nějak tuším chybu, o jakou se jedná, ale nepodařilo se mi vygooglit přesně stejný problém a jeho řešení.
Stavím na PHP 8.0 a při odeslání formuláře, kam nahraji obrázek a chci ho potom pomocí Image::fromFile zpracovat vyskočí chyba “PHP extension GD is not loaded”.

Používám macOS Monterey 12.0.1

Pomocí Homebrew mám nainstalované aktuální PHP, v MAMPu (nepoužívám PRO, ale základní 6.3) vidím aktivní PHP 8.0.0. Ale nikde v php.ini není vlastně zmínka o “extension=php-gd” nebo cokoliv.

Po vyhledání “gd” je pouze:

[gd]
; Tell the jpeg decode to ignore warnings and try to create
; a gd image. The warning will then be displayed as notices
; disabled by default
; http://php.net/…nore-warning
;gd.jpeg_ignore_warning = 1

V terminálu mi příkaz brew services php vrací:

Name    Status       User       File
httpd   error  256   root       ~/Library/LaunchAgents/homebrew.mxcl.httpd.plist
mysql   stopped      michalkuba ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
php     started      michalkuba ~/Library/LaunchAgents/homebrew.mxcl.php.plist
php@5.6 none
php@7.0 none
php@7.2 none
php@7.4 error  19968 michalkuba ~/Library/LaunchAgents/homebrew.mxcl.php@7.4.plist
php@8.0 error  19968 root       ~/Library/LaunchAgents/homebrew.mxcl.php@8.0.plist

Předem děkuji za případné rady nebo rovnou ozkoušené funkční řešení!

Editoval MikKuba (8. 6. 9:04)

Marek Bartoš
Nette Blogger | 715
+
0
-

V kódu se používá php extension, která není načetlá. Takže ji potřebuješ nainstaloval, pokud ji už nemáš a v php.ini aktivovat.

Můžeš vycházet z tohohle návodu https://stitcher.io/…-upgrade-mac#…

MikKuba
Člen | 59
+
0
-

Marek Bartoš napsal(a):

V kódu se používá php extension, která není načetlá. Takže ji potřebuješ nainstaloval, pokud ji už nemáš a v php.ini aktivovat.

Můžeš vycházet z tohohle návodu https://stitcher.io/…-upgrade-mac#…

Na PECL jsem taky narazil (byť poprvé), ale rozběhl jsem příkazy, jenže imagick (hádám že klíčový rozšíření) se nedaří instalovat.

checking ImageMagick MagickWand API configuration program... checking Testing /usr/local/bin/MagickWand-config... Doesn't exist
checking Testing /usr/bin/MagickWand-config... Doesn't exist
checking Testing /usr/sbin/bin/MagickWand-config... Doesn't exist
checking Testing /opt/bin/MagickWand-config... Doesn't exist
checking Testing /opt/local/bin/MagickWand-config... Doesn't exist
checking Testing /opt/homebrew/bin/MagickWand-config... Doesn't exist
configure: error: not found. Please provide a path to MagickWand-config or Wand-config program.
ERROR: `/private/tmp/pear/temp/imagick/configure --with-php-config=/opt/homebrew/opt/php@8.0/bin/php-config --with-imagick' failed

Ostatní 2 uvedené v tom příkladu jdou bez problému (redis a xdebug). Většinou se u všech zmínek mluví max o PHP 7.4, o 8.0 hodně málo. Ale verze by snad neměla být problém.


EDIT:

Chybějící MagickWand jsem doinstaloval a pak už pecl install imagick proběhlo, ale nyní to nevidím nikde v MAMPu, takže stále vyskakuje hláška o chybějícím GD rozšíření :(

Editoval MikKuba (8. 6. 9:41)

Marek Bartoš
Nette Blogger | 715
+
0
-

imagick a GD jsou dvě odlišné knihovny pro práci s obrázky, nijak spolu nesouvisí. Ten návod co jsem posílal je jen obecný postup.

Editoval Marek Bartoš (8. 6. 10:01)

Pepino
Člen | 136
+
0
-

@MikKuba imagick není GD. Jestli jedeš na windows tak by mělo stačit v php.ini odomentovat řádek extension=php_gd.dll

MikKuba
Člen | 59
+
0
-

Marek Bartoš napsal(a):

imagick a GD jsou dvě odlišné knihovny pro práci s obrázky, nijak spolu nesouvisí. Ten návod co jsem posílal je jen obecný postup.

Takže se teď trochu zbytečně honím za správnou instalací imagick, protože potom stále budu mít problém s chybějícím GD? Takže místo toho vyhledat balíček s GD který pecl spustí?

Nikde pro PHP 8 nevidím GD extension, přes PECL ho nenaisntaluji, resp. to není jako balíček GD a z těch dostupných nevím, který by mi pomohl. Zkouším sekci Images, ale nevím který z nich by pomohl: https://pecl.php.net/packages.php?…

Editoval MikKuba (8. 6. 10:25)

MikKuba
Člen | 59
+
0
-

Pepino napsal(a):

@MikKuba imagick není GD. Jestli jedeš na windows tak by mělo stačit v php.ini odomentovat řádek extension=php_gd.dll

Jak jsem psal v prvním postu, používám macOS, návodů na nastavení ve Windows jsem našel tunu, ale na Mac už minimum.

Marek Bartoš
Nette Blogger | 715
+
+1
-

Zkus brew install gd
Modul by se pak měl objevit v php -m

MikKuba
Člen | 59
+
0
-

Marek Bartoš napsal(a):

Zkus brew install gd
Modul by se pak měl objevit v php -m

Skrz brew jsem to samozřejmě zkoušel instalovat, i reinstalovat. Několikrát.
Proběhne a v php -m to taky vidím.

Ale už to nevidím v /Applications/MAMP/bin/php/php8.0.0/include/php/ext. Pro porovnání v /Applications/MAMP/bin/php/php7.4.12/include/php/ext vidím pak ještě složku „gd“, ale v php8.0 nikoliv. Celou dobu mám v MAMPu i na brew zapnutou verzi php 8

V php 7.4 mi GD funguje. I podle phpinfo tam je ten modul, ale v PHP 8 vůbec.

Editoval MikKuba (8. 6. 10:57)

Marek Bartoš
Nette Blogger | 715
+
0
-

Je možné, že ten setup poskytovaný přes brew je chybný (podle téhle stránky bys gd měl mít). Jak by se dal opravit netuším, ale můžeš použít setup php shivammathur/homebrew-php. Tenhle build používá na Githubu prakticky každý, měl by být spolehlivější https://stitcher.io/…-upgrade-mac

Editoval Marek Bartoš (8. 6. 11:10)

Pavel Kravčík
Člen | 1081
+
0
-

U klienta mi nedávno se mi stalo něco podobného, řešením byla redefinice cesty extension_dir z relativní na absolutní v php.ini. Třeba pomůže.

MikKuba
Člen | 59
+
0
-

Pavel Kravčík napsal(a):

U klienta mi nedávno se mi stalo něco podobného, řešením byla redefinice cesty extension_dir z relativní na absolutní v php.ini. Třeba pomůže.

@PavelKravčík Mám tam toto:
extension_dir = "/Applications/MAMP/bin/php/php8.0.0/lib/php/extensions/no-debug-non-zts-20200930/"

Ale ono v této cestě v extensions to GD vůbec není. Není ani u staršího PHP 7.4, tedy v cestě
extension_dir = "/Applications/MAMP/bin/php/php7.4.12/lib/php/extensions/no-debug-non-zts-20190902/", ale tam to alespoň běží.
To je asi blbost to předefinovat na extensions pro starší PHP verzi, ne?

Editoval MikKuba (8. 6. 11:26)