Docker环境下file_get_contents无法工作的原因及解决办法
解决Docker环境下PHP嵌入SVG时
file_get_contents连接拒绝的问题 问题根源
你当前用get_template_directory_uri()获取SVG的URL,再通过file_get_contents发起HTTP请求读取内容。在Docker环境中:
http://0.0.0.0:8000是宿主机映射到WordPress容器的端口,但容器内部无法直接通过这个地址访问自身服务(容器内的WordPress实际运行在80端口)- 即使能访问,通过HTTP读取本地文件也是多余操作,还会引入网络请求的潜在问题
解决方案
直接用文件系统路径而非URL读取SVG,把get_template_directory_uri()替换为get_template_directory()——后者返回主题目录的服务器本地路径:
<?= file_get_contents( get_template_directory() . "/images/scroll_to_explore.svg" ) ?>
补充说明
get_template_directory()返回绝对文件路径(比如/var/www/html/wp-content/themes/my_theme),file_get_contents可直接读取本地文件,无需走HTTP请求,效率更高且避免网络问题- 本地环境正常是因为本地服务器的PHP能直接通过HTTP访问本地URL,但Docker容器的网络隔离特性导致这种方式失效
- 你的
allow_url_fopen配置没问题,问题核心不在PHP的URL访问权限,而是Docker内部的网络访问逻辑
内容的提问来源于stack exchange,提问作者Max Slyusarchuk
相关产品推荐
相关产品推荐

