File_get_contents无法打开流:http请求失败404找不到

时间:2018-04-30 21:35:26

标签: php svg

我需要将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错误。我究竟做错了什么?提前谢谢!

2 个答案:

答案 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文件,这就是现在的诀窍。我更喜欢使用不同的方法,我将来会再次重新审视这个问题并更新这篇文章,如果我找出解决方法的话。再次感谢您的帮助,我希望这有助于其他人。