File_get_contents не удалось открыть поток: http-запрос не выполнен 404 не найден - PullRequest
0 голосов
/ 01 мая 2018

Мне нужно добавить файл 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 (): пустая строка, предоставляемая в качестве ввода в /home/folklorecoffee/public_html/wp-content/themes/lily/header.php в строке 36

Но когда я проверяю URL в моем браузере, он подходит нормально. Не уверен, почему я получаю ошибку 404. Что я делаю неправильно? Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Я испробовал все предложения, и я благодарю всех вас за то, что вы нашли время попытаться предложить помощь, я так и не смог заставить ее работать и продолжал получать ту же ошибку.

Интересно, что любой файл на моем сервере, который я пытался вызвать с помощью file_get_contents, мог получить ошибку 404. Неважно, если я сделал локальный путь или точный URL, пути были правильными. Вот что интересно: это сработало бы, если бы я указал на файл, которого НЕ было на моем сервере. Поэтому я думаю, что где-то должен быть параметр конфигурации, который мне нужно изменить. Я не знаю, какой будет эта настройка, и если кто-то там читает и испытывает те же проблемы, я надеюсь, что это поможет вам указать верное направление.

Я был в затруднительном положении и решил вместо этого просто написать svg-файл с тегом объекта, и на данный момент это удалось. Я бы предпочел использовать другой метод, и я вернусь к этому снова в будущем и обновлю этот пост, если я выясню, что это исправит. Еще раз спасибо за вашу помощь, надеюсь, это поможет кому-то еще.

0 голосов
/ 01 мая 2018

У меня работает запрос:

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

Но если URL-адрес такой же, я ожидаю, что вы получите тот же результат.

Учитывая вышесказанное, лучший ответ для вас - самостоятельно устранить неисправности в отношении того, что происходит, поскольку это очень специфично для вашей настройки.

Вы можете получить некоторое представление, посмотрев запрос в журналах Apache. Это появляется? Соответствующий URL-адрес соответствует ожидаемому?

Можете ли вы сделать другие запросы с file_get_contents на ваш домен, который работает? В папку загрузки? На другие домены?

Узнайте у своего хостинг-провайдера, могут ли они объяснить. Может быть элемент конфигурации, который каким-то образом мешает.

Наконец, вы можете попробовать более тщательно изучить, почему логотип не может быть загружен из файловой системы. Это проблема с разрешениями? Можете ли вы загрузить любой файл из каталога разрешений?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...