Получение файлов по URL сначала работает, но не позже в скрипте - PullRequest
0 голосов
/ 14 марта 2019

У меня тупая проблема, я пытаюсь создать скрипт, который будет копировать связанные таблицы стилей CSS с веб-сайта.

Все работает как положено, но при попытке извлечь css-файлы с корневыми путями, например /cached.php?t=1540425603&f=/styles/theme-base.css, в начале скрипта у меня есть команда echo, чтобы проверить, что ссылка должна работать

echo file_get_contents('http://php.net/cached.php?t=1539765004&f=/styles/theme-base.css');

и он корректно отображает файл css, но позже в сценарии, пытаясь сделать то же самое, он просто возвращает HTML php.net вместо css, как это было при запуске сценария.

Ссылка на таблицу стилей после format_url() function показывает правильный css, если вы вставите его в браузер. https://php.net/cached.php?t=1540425603&f=/styles/theme-base.css

Поэтому после загрузки DOM с помощью SimpleHTMLDom я перебираю элементы link, форматирую URL-адреса от относительного к абсолютному с помощью format_url() и затем сохраняю данные из href в файл на сервере с save_file()

foreach($html->find('link') as $element) {
       $name = save_file(format_url($element->href, $og_url), $fol);
       $element->href = $name;

    }

Возвращается базовое имя файла, поэтому href в html-файле можно изменить на него.

Это просто ошеломляет, я вижу, что URL отображается до file_get_contents() и ссылка, которая работает, прекрасно работает в браузере и при запуске скрипта, но не здесь.

function save_file($url, $fol) {
        echo $url.'<br>';

        $file = file_get_contents($url);

        $name = pathinfo($url);
        $fp = $fol.'/'.$name['basename'];
        file_put_contents($fp, $file);
        return $name['basename'];

    }

Функция format_url форматирует все виды URL, но здесь таблицы стилей - это типы, которые начинаются с корневой папки.

function format_url($url, $page) {
        $x = parse_url($page);
        $urlX = explode('/', $url);
        $name = end($urlX);

        if(strpos($url, 'http') === 0) {

        } else if(strpos($url, '//') === 0) {

            $url = 'https:'.$url;

        } else {
        // RELATIVE URL 

            // ROOT FOLDER
            if(strpos($url, '/') === 0) {
                $url = $x['scheme'].'://'.$x['host'].$url;


            } else {
                $url = rel2abs($url, $page);

            }
        }
        return $url;
    }
...