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 图像而不是其文本代码,在这种情况下,为什么不像其他任何图像一样简单地 &lt;img src="&lt;?php echo $mySvgFileUrl"; ?&gt;"&gt;

【讨论】:

【参考方案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】:

试试:

&lt;?php echo file_get_contents(get_template_directory().'/theme/img/chevron-right-solid.svg'); ?&gt;

这似乎对我有用,而使用 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的主要内容,如果未能解决你的问题,请参考以下文章

php下svg格式如何转换为png

Right ImageMagick 通过 php 从 yr.no 将 svg 转换为 png

使用 file_get_contents 将本地 PHP 文件的 HTML 输出存储到字符串中

PS输出为图片格式,PNG、JPG、GIF、SVG,哪个格式最清晰?

file_get_contents() 不工作

如何使用 jsdom、D3 和 IJavascript 在 Jupyter 笔记本中输出 SVG