我需要将svg文件添加到网站并将类应用于此svg。这很令人沮丧,我尝试过在这里发布不同的解决方案,但没有一个能为我工作。这适用于不同的服务器,但在移动到新服务器后,它不再有效。这是我在php中调用它的方式:
<?php $svg = file_get_contents("http://www.folklorecoffee.com/wp-content/uploads/2018/04/folkloretextwhite-1.svg");
$dom = new DOMDocument();
$dom->loadHTML($svg);
foreach($dom->getElementsByTagName('svg') as $element) {
$element->setAttribute('class','logo-light');
}
$dom->saveHTML();
$svg = $dom->saveHTML();
echo $svg;?>
我收到了这些警告:
警告:file_get_contents(http://www.folklorecoffee.com/wp-content/uploads/2018/04/folkloretextwhite-1.svg):无法打开流:HTTP请求失败!找不到HTTP / 1.1 404 在/home/folklorecoffee/public_html/wp-content/themes/lily/header.php第34行
警告:DOMDocument :: loadHTML():在第36行的/home/folklorecoffee/public_html/wp-content/themes/lily/header.php中作为输入提供的空字符串
但是当我在浏览器中测试网址时,它会很好。不知道为什么我收到404错误。我究竟做错了什么?提前谢谢!
答案 0 :(得分:0)
请求对我有用:
echo $svg = file_get_contents("http://www.folklorecoffee.com/wp-content/uploads/2018/04/folkloretextwhite-1.svg"); // prints the SVG data as expected
您可以通过其他机制尝试相同的请求,例如cURL:
$url = "http://www.folklorecoffee.com/wp-
content/uploads/2018/04/folkloretextwhite-1.svg";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
curl_close($ch);
echo $data; // prints the SVG data as expected
但如果网址相同,我希望你会得到相同的结果。
鉴于上述情况,最好的答案是让您自己对发生的事情进行故障排除,因为它非常适合您的设置。
通过查看请求的Apache日志,您可以获得一些洞察力。它出现了吗?它显示的URL是否符合您的期望?
您是否可以使用file_get_contents
向您的域提出其他请求?到上传文件夹?到其他域名?
与托管服务提供商联系,了解他们是否可以解释。可能存在以某种方式干扰的配置项。
最后,您可能需要尝试更仔细地调查无法从文件系统加载徽标的原因。这是权限问题吗?你可以从权限目录加载任何文件吗?
答案 1 :(得分:0)
我尝试了每个人的建议,我感谢大家花时间尝试提供帮助,我从来没有能够让它工作并继续得到同样的错误。
有趣的是,我尝试使用file_get_contents调用的服务器上的任何文件都会出现404错误。如果我做了本地路径或确切的URL,路径是正确的并不重要。这是有趣的:如果我指向一个不在我的服务器上的文件,它会工作。所以我认为必须有一个配置设置,我需要改变。我不知道这个设置会是什么,如果有人在读这个并遇到同样的问题,我希望这有助于指出你正确的方向。
我当时正处于紧张状态,而是决定只使用对象标签编写svg文件,这就是现在的诀窍。我更喜欢使用不同的方法,我将来会再次重新审视这个问题并更新这篇文章,如果我找出解决方法的话。再次感谢您的帮助,我希望这有助于其他人。