简短问题
我想将GDFONTPATH环境变量从Apachevhost.conf传递给PHP.我怎么能这样做呢?
我在运行:Debian 12、Apache2.4、PHP 8.2
长长的问题
我正在使用PHP中的GD图像函数(例如imagettftext
),并希望使用可能在系统范围内不可用的特定字体.这可以通过设置环境变量GDFONTPATH
来完成,并且PHP函数putenv
适合于此目的.
但是,putenv
也是一个安全问题,因此在我的生产服务器上,我将它列在我的php.ini
中的disable_functions
上,因此,我不能在我的PHP脚本中设置这个环境变量.相反,在我的Apachevhost.conf文件中使用SetEnv
来设置它似乎是个好主意(这是一个简化的示例):
<Directory "/srv/www/example.com/public">
AllowOverride None
Require all granted
SetEnv GDFONTPATH "/srv/www/example.com/private/fonts"
</Directory>
问题是,这并不像[我]预期的那样有效!它does设置了GDFONTPATH,但不是本地的,所以我得到了以下结果:
getenv('GDFONTPATH'); # Returns '/srv/www/example.com/private/fonts'
getenv('GDFONTPATH', true); # Returns ''
Libgd函数忽略了这一点;它们只查看我似乎只能使用putenv
函数设置的local环境变量.但是出于安全原因,在我的生产服务器上启用putenv
是不现实的,因此我的really希望在我的Apache配置中使用SetEnv
!
FWIW:我已经编写了一个"实用的"解决方案,它将使用PHPgetenv
从ApacheSetEnv
读取路径,然后将一个完全限定的字体文件名传递给gdlib.这是可行的,但并不理想!我可能会发布这段代码以供将来参考,但我真的很想要一个解决方案,在其中我可以从Apache中设置环境.This post might offer a potential solution,但看起来它将适用于所有vhost,因此,再一次,不理想.
我对环境变量和"局部"环境变量之间的区别有点粗略.
参考资料: libgd source regarding GDFONTPATH libgd source regarding GDFONTPATH libgd source regarding GDFONTPATH