یکی از سوالاتی که بار ها توی انجمنهای برنامه نویسی و بین دوستان خودم باهاش مواجه شدم اینه که چطور میشه یک Webshot یا همون عکس از صفحه اصلی یه سایت (یا حالا هر آدرسی) از طریق وب با استفاده از php گرفت ؟
تا حالا نیاز به انجام این کار برام به وجود نیومده بود ولی خوب بالاخره من از تحقیق و کاوش در زمینه برنامه نویسی خیلی خوشم میاد. پس از جستجو در سایتهای مختلف و آزمایش روشهای پیشنهادی متوجه شدم که بهترین روش استفاده از phantomjs هستش.
به زبان ساده phantomjs یک مروگر خط فرمان با Syntax و API مشابه Javascript هست که برای خیلی موارد مانند آزمون و تست وب سایتها ، عکس گرفتن ، دسترسی به DOM و حتی Jquery جهت اتوماسیون کردن عملیات و همینطور مانیتور و آنالیز کردن به کار میره.ما قصد داریم برای گرفتن عکس از یک وب سایت ازش استفاده کنیم. پس ابتدا از سایت مربوطه آخرین نسخه را دانلود میکنیم و کنار فایل php که میخواهیم عکس را باهاش از سایت بگیریم ذخیره میکنیم.
Phantomjs دستوراتی را که شبیه به javascript هست میگیره و بر اساس اون تفسیر و اجرا میکنه.من اسکریپت زیر را برای phantomjs نوشتم که آدرس ، فایل خروجی ، طول و عرض عکس را میگیره و عملیات دریافت و ذخیره سازی Webshot را انجام میده :
address = phantom.args[0]; output = phantom.args[1]; wt = phantom.args[2]; ht = phantom.args[3]; page.viewportSize = { width: wt, height: ht }; page.open(address, function (status) { if (status !== 'success') { console.log('Unable to load the address!'); phantom.exit(); } else { window.setTimeout(function () { page.render(output); phantom.exit(); }, 200); } });
بعد از دانلود phantomjs این اسکریپت را کپی و توی فایلی به نام geekfarsi.js کنار phantomjs ذخیره میکنیم.حالا کافیه خط زیر را توی فایل php بنویسیم و با مروگر اجراش کنیم :
exec('phantomjs geekfarsi.js https://www.geekfarsi.com geekfarsi.png 1024 768');
نتیجه اینکه عکس ما کنار فایل php قرار گرفته و Webshot ما آماده هستش !
نکته : اگه php شما در حالت safe_mode باشه (مدیر سیستم توی php.ini تعیین میکنه) شما نمیتونین هیچ دستوری را روی سرور اجرا کنید. بعضی از هاست ها شرایطی را برا ی این کار فراهم میکنن. در صورت عدم موفقیت کافیه یک Ticket به مسئول هاست بزنین و ازشون بپرسین.
خسته نباشید قسمت آخر نوشتید کنار phantomjs ذخیره کنید phantomjs دقیقا چه نقشی داره ؟؟؟؟ باید اسکریپتشو دانلود کنیم ؟؟؟
حق با شماست ، من اصلا در مورد اینکه phantomjs را از کجا بگیرین چیزی نننوشتم. پست را ویرایش کردم و آدرس هم دادم ، phantomjs یک فایل اجرایی هست با یکسری فایل دیگه.
مرسی ممنون لطف کردید
ما که فایل رو دانلود کردیم و هیمن کارهایی رو هم که گفتید کردیم البته روی لوکال هاست ولی چیزی مشاهده نشد
راستش تا خروجی ، خطایی یا لاگی چیزی برام نفرستین نمیتونم مشکلتون را رفع کنم. اما عموما تا چیزی را خودم تست نکنم اینجا نمیگذارم.