Detect if the FreeType PHP extension is installed on the server
Asked Answered
I

6

13

How do I test to see if the FreeType extension is installed on a server running PHP?

I wanted to make a simple CAPTCHA system on my site, so I used imagettftext() and it worked fine. But what if the server didn't have the FreeType library installed?

So is there a way to somehow detect FreeType library through code, and if it is not present, fall back to something like imagestring()?

If I can't use imagettftext() I may have to look at alternatives to draw big font text as the imagestring max size isn't good for something like a CAPTCHA.

Ignition answered 4/1, 2011 at 13:37 Comment(0)
P
12

Use function_exists:

if (function_exists('imagettftext')) {
     imagettftext();
} else {
     // do other function
}

Hope that helps.

Pskov answered 4/1, 2011 at 13:41 Comment(3)
+1 this does not a check if freetype is installed, but a check if a function imagettftext is available - but this should work in the given contextCollete
:) I was just hoping to point this person in a correct direction.Pskov
Yes it does check for both GD and FreeType. imagettftext manual pageSyllabify
H
17

This will not be better in practice than the function_exists solutions already posted, but the technically correct way to check is by using extension_loaded.

Hovercraft answered 4/1, 2011 at 13:46 Comment(3)
that's the easiest most effective way to check for the extension!Collete
@downvoter: I would so love to hear what's wrong with this answer. Thanks.Hovercraft
You can check for gd extension, but you cannot check for freetype simply because it's not PHP extension (see output of php -m). freetype is just linked to gd during compilation time.Preachment
P
12

Use function_exists:

if (function_exists('imagettftext')) {
     imagettftext();
} else {
     // do other function
}

Hope that helps.

Pskov answered 4/1, 2011 at 13:41 Comment(3)
+1 this does not a check if freetype is installed, but a check if a function imagettftext is available - but this should work in the given contextCollete
:) I was just hoping to point this person in a correct direction.Pskov
Yes it does check for both GD and FreeType. imagettftext manual pageSyllabify
U
5

Assuming the GD library is installed, you can detect Freetype support using the gd_info() function.

$gdinfo = gd_info();
if($gdinfo['FreeType Support']) echo 'FreeType Support Enabled';

If you need to check whether or not GD library is installed first, use extension_loaded('gd');

Uno answered 4/1, 2011 at 14:54 Comment(0)
B
3

This won't work for dynamic code (so not a true answer to the question) but for anyone who just want's to know if it's installed, from the command line on Linux:

php -i | grep -E "GD|FreeType"

Outputs:

GD Support => enabled
GD headers Version => 2.2.5
GD library Version => 2.2.5
FreeType Support => enabled
FreeType Linkage => with freetype
FreeType Version => 2.4.11

NOTE: On a system without it installed you'll get no output.

Buie answered 4/2, 2019 at 13:18 Comment(0)
C
1

A first somewhat complicated approach:

call php_info() and search/parse the result for freetype

Collete answered 4/1, 2011 at 13:42 Comment(2)
this might be complicated, but it will work (so why the downvote?)Collete
Downvote wasn't mine, but 1) it will take effort to get it to work, 2) it's more brittle than any other solution (suppose the output of php_info changes in the future) and 3) it's the most computationally expensive way to do it by far.Hovercraft
O
0

Try function_exists(), i.e.

if (!function_exists('imagettftext')) {
  // No freetype library
}

You'd probably be best asking for alternatives to imagettftext as a separate question.

Occlusive answered 4/1, 2011 at 13:42 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.