file_get_contents 不输出 svg
Posted
技术标签:
【中文标题】file_get_contents 不输出 svg【英文标题】:file_get_contents not outputting svg 【发布时间】:2018-07-13 13:21:31 【问题描述】:我正在尝试使用 php 获取 svg 文件并将其输出到页面上。网站建立在 Wordpress 之上。
<?php
echo file_get_contents("site.com/wp-content/themes/oaklandcentral/img/fb_logo.svg");
?>
什么都没有显示。实际链接是正确的,直接转到 svg。有什么想法吗?
【问题讨论】:
您是否查看了页面源代码以了解您得到了什么? 试试 readfile - php.net/manual/en/function.readfile.php 页面源什么也不返回,readfile函数也有同样的问题。 【参考方案1】:echo file_get_contents("site.com/wp-content/themes/oaklandcentral/img/fb_logo.svg");
假设:
您的“文件名”字符串以协议开头,例如"http://"
您可以直接从浏览器访问该文件(即不是 文件/文件夹权限问题);
file_get_contents 返回 FALSE? (E_WARNING 是否告诉 你有什么事吗?)
我记得看到 某些服务器未配置为允许 file_get_contents(或带有 URL 的读取文件),所以我会先检查调查此问题(可能是 allow_url_fopen 在 php.ini 中)。 ini???)。
如果不是这种情况(或者是主机提供商的限制)并且您找不到问题的原因,那么 CURL 应该可以工作(在大多数服务器上!)。
$url = 'http://example.com/path-to/fb_logo.svg';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_REFERER, $_SERVER['REQUEST_URI']);
$svg = curl_exec($ch);
curl_close($ch);
echo $svg;
编辑:
-
看来您也可以使用 php
include
if you remove the xml header tag from your SVG file。
我假设您想显示 SVG 图像而不是其文本代码,在这种情况下,为什么不像其他任何图像一样简单地 <img src="<?php echo $mySvgFileUrl"; ?>">
?
【讨论】:
【参考方案2】:路径错误,使用file_get_contents( get_template_directory() . '/img/fb_logo.svg' )
【讨论】:
问题中的网址是准确的!不幸的是,这也没有对 DOM 进行任何重新调整。 谢谢,这和WordPress有关=)【参考方案3】:在回显 svg 之前使用:header("Content-Type: image/svg+xml");
添加标题。有时浏览器默认接收到的数据是html。
【讨论】:
不走运,仍然没有返回 dom。【参考方案4】:可能是什么问题。
文件不在您认为的位置。
文件权限不允许代码读取文件。
尝试调试:
<?php
$file = "site.com/wp-content/themes/oaklandcentral/img/fb_logo.svg";
if ( file_exists($file) )
echo file_get_contents($file);
else
echo "File $file does not exist";
?>
尝试使用 curl 获取页面。查看标头和原始 https 响应。
curl -v URL_TO_PAGE
【讨论】:
【参考方案5】:试试:
<?php echo file_get_contents(get_template_directory().'/theme/img/chevron-right-solid.svg'); ?>
这似乎对我有用,而使用 get_template_directory_uri()
却没有(它引发了 OpenSSL 错误)
然后,您可以根据需要定位 SVG 和样式。 例如:
<button class="btn btn-primary">
<?php echo file_get_contents(get_template_directory().'/theme/img/chevron-right-solid.svg'); ?>
</button>
CSS 可能是:
.btn svg line-height: 1.2; max-height: 1rem;
【讨论】:
【参考方案6】:尝试使用以下代码。 $opts = 数组( 'http'=>数组( '方法'=>“获取”, 'header'=>"接受语言:en\r\n" . "Cookie: foo=bar\r\n" ) ); $context = stream_context_create($opts); $file = file_get_contents('site.com/wp-content/themes/oaklandcentral/img/fb_logo.svg', false, $context);
【讨论】:
以上是关于file_get_contents 不输出 svg的主要内容,如果未能解决你的问题,请参考以下文章
Right ImageMagick 通过 php 从 yr.no 将 svg 转换为 png
使用 file_get_contents 将本地 PHP 文件的 HTML 输出存储到字符串中