EDIT
Это легко сделать, используя PhantomJS , который намного ближе к нужному инструменту для работы, чем PHP.
Оригинальный ответ (слегка изменено)
Чтобы сделать это эффективно, потребуется , поэтому много работы, я сомневаюсь, что это стоит того.
На мой взгляд, вам придется использовать что-то вроде DOMDocument::loadHTML()
для анализа HTML-документа, поиска всех атрибутов src=
и href=
и их анализа. Звучит довольно просто, я знаю, но есть несколько тысяч возможных точек отключения. Вот некоторые из моих голов:
- Во-первых, вам нужно проверить, что первоначальный запрашиваемый ресурс на самом деле является документом HTML. Это может быть так же просто, как просмотреть заголовок
Content-Type:
ответа, но если сервер ведет себя неправильно в этом отношении, вы можете получить неправильный ответ.
- Вы должны будете проверить наличие дублированных ресурсов (например, повторяющихся изображений и т. Д.), Которые могут быть указаны не одинаково - например, если документ, который вы читаете из
example.com
, имеет /dir1/dir2/doc.html
и использует изображение /dir1/dir3/img.gif
, в некоторых местах документа это можно назвать /dir1/dir3/img.gif
, в некоторых местах это может быть http://www.example.com/dir1/dir3/img.gif
, а в некоторых местах это может быть ../dir3/img.gif
- вам придется признать, что это один ресурс и он приведет только к одному запросу.
- Вы должны были бы остерегаться специфических для браузера вещей (например,
<!--[if IE]
) и решить, хотите ли вы включить ресурсы, включенные в эти блоки, в общее количество. Это также представляет новую проблему при использовании синтаксического анализатора XML, поскольку блоки <!--[if IE]
являются технически допустимыми комментариями SGML и будут игнорироваться.
- Вам придется анализировать любые документы CSS и искать ресурсы, включенные в объявления CSS (например,
background-image:
). Эти ресурсы также необходимо проверить на предмет дублирования в src / hrefs в первоначальном документе.
- Вот действительно сложный вопрос - вам придется искать ресурсы, динамически добавляемые в документ при загрузке через Javascript. Например, один из способов использования Google AdWords - это аккуратный JS, который динамически добавляет новый элемент
<script>
в документ, чтобы получить реальный сценарий от Google. Для этого вам нужно будет эффективно оценить и выполнить Javascript на странице, чтобы увидеть, генерирует ли он какие-либо новые запросы.
Итак, вы видите, это будет нелегко. Я подозреваю, что на самом деле может быть проще найти исходный код браузера и изменить его. Если вы хотите попробовать и предложить решение на основе PHP, которое дает точный ответ, будьте моим гостем (возможно, вы даже сможете продать что-то настолько сложное), но, честно, спросите себя: действительно ли у меня так много? время в моих руках?