نوشته شده توسط
kabootar_y
کلاسی که شما معرفی کردید رو من کم و بیش باهاش آشنا هستم ولی با اون نمیشه بعضی از فایل ها رو پیدا کرد
مثلا تصاویری که در فایل های css آدرس دهی شدن
فایل های css که در یک فایل css دیگه import شده
فایل های جاوا اسکریپتی که در یک فایل جاوا اسکریپت دیگر فراخوانی شده
ببین دوست عزیز من میخوام لیست کامل فایل هایی که به صفحه (مثلا
http://domain.com/gallery.html) مرتبط هستند و در این صفحه مورد استفاده قرار گرفتن رو بدست بیارم
بعد که لیست رو گرفتم حالا تک تک این فایل ها رو به هر نحوی کپی کنم
فکر نمی کنم خیلی پیچیده باشه
مثلا در آدرس
http://tools.pingdom.com/fpt وقتی یک سایت رو آنالیز میکنی لیستی از کل فایل ها رو با عنوان Requests done to load this page نمایش میده. من همچین چیزی می خوام
شما اول باید بگید کدوم از این دو حالت رو نیاز دارید:
۱ . لیست لینک ها (تگ a) و فایل های css و import ها و url() های داخل فایل های css و عکس ها (تگ img) و ...
برای اینکارها باید فایل html رو بگیرید و پارس کنید مثلا با استفاده از کامپوننت symfony crawler میتونید کل تگ های a رو اینجوری بگیرید:
use Symfony\Component\DomCrawler\Crawler;
// Todo fetch html contents ...
$crawler = new Crawler($html);
$urls = $crawler->filter('a')->each(function(Crawler $crawler) {
return $crawler->attr('href');
});
اطلاعات بیشتر:
http://symfony.com/doc/current/compo...m_crawler.html
همچنین برای پارس کردن فایل های css:
https://github.com/sabberworm/PHP-CSS-Parser
2. مانیتور کردن نتورک و پیدا کردن ریسورس ها
اگه به این نیاز دارید که لیست ریسورس هایی که موقع لود صفحه دریافت می شود را پیدا کنید (مثل فایل های css / عکس ها و ...) می تونید خیلی راحت با phantomjs اینکارو انجام بدید و نتیجه ای مشابه به pingdom دریافت کنید:
var page = require('webpage').create();
page.onResourceRequested = function(request) {
console.log('Request ' + JSON.stringify(request, undefined, 4));
};
page.onResourceReceived = function(response) {
console.log('Receive ' + JSON.stringify(response, undefined, 4));
};
page.open(url);
اطلاعات بیشتر:
http://phantomjs.org/network-monitoring.html
همچنین میتونید کاری که با symfony crawler هم انجام دادید، با phantomjs هم انجام بدید.
در روش دوم فقط لیست فایل هایی به شما داده می شود که کاربر هنگام مشاهده صفحه آن ها را لود می کند. مثلا اگر display یک تصویر none باشد مرورگر درخواستی هم به سرور ارسال نمی کند. یا هنگامی برای اندازه صفحه موبایل یک resource خاص لود می شود ولی برای دسکتاپ خیر (responsive / adaptive design)