رضا پارسیان
رضا پارسیان
خواندن ۱ دقیقه·۵ سال پیش

تشخیص سایت

تشخیص سایت
تشخیص سایت

واقعا من توی انتخاب موضوع برای نوشتن افتضاح هستم?

من 8 ساعتم سراکار هستم ولی باز که میام خونه حوصلم سر میره و میشنیم یکسری چیزای کوچولو کوچولو مینویسم شایدم این چیزای کوچیک اهمیت و کاربرد زیادی نداشته باشن ولی خودم ذوق میکنم باهاشون.

برای لینک سازی میام مطالبمو اینجا هم میذارم ??????

خب دیگه حرف کم کنم برم سر اصل مطلب

این برنامه من میاد ار کاربر یک ورودی به عنوان آدرس سایت میگیره و تشخیص میده که از وردپرس ساخته شده یا نه اگر ساخته شده چه تمی استفاده میکنند.


<?php header("Content-type: application/json; charset=utf-8"); $site = isset($_GET["site"]) ? $_GET["site"] : "I Think You Miss Some Parameter"; $re = '/themes\/(?<Theme_Name>.*?)\//ms'; $re1 = '/<meta name="generator" content="(?<Wpv>.*?)" \/>/ms'; $Result; if ($site == "I Think You Miss Some Parameter") { $Result = array( 'Error' => $site ); } else { $file = file_get_contents($site); preg_match($re1, $file, $matches1); preg_match($re, $file, $matches); $Result = array( 'WordPress_Version' => $matches1['Wpv'], 'WordPress_Theme' => $matches['Theme_Name'] ); } $myJSON = json_encode($Result); echo $myJSON;

1-خب همینطوری که هما شما میدونید برای نوشتن کد PHP به تگ آغازین و پایانی نیاز داریم پس خط اول برای این کار نوشته شده البته من تگ پایانی نذاشتم بخاطر این که فایل من فقط از PHP پشتیبانی میکنه.

2-خط دوم برای تبدیل خروجی خودم به حالت JSON هست و زبان برنامه من رو به UTF-8 تبدیل میکنه

3-خط سوم یک متغیر تعریف کردم به اسم SITE و برابش کردم با یک دستور شرطی،همه شما میدونید که شرط ها خروجی TRUE و FALSE دارن ولی متغیر من خروجیش از نوع رشته (STRING) هست.از دستور IF خطی استفاده کردم و به برنامه فهموندم اگر ورودی کاربر وجود داشت مقدار متغیر من همین ورودی باشه در غیر این صورت ورودی من حاوی I Think You Miss Some Parameter هست.

4-خط 4و5 هم 2 متغیر تعریف کردم و از فیلتر های ریجکس (REGEX) استفاده کردم

(?<Theme_Name>.*?)

خط بالا گویای این هست که هر کارکتری باشه بریز توی متغیری به اسم Theme_Name.الان براتون قشنگ باز میکنم مسئله رو؛پرانتز ها به معنی یگ مجموعه هستند یعنی اگر من یک پرانتز بذارم و توش بنویسم رضا توی فرایند جستجو رضا رو به عنوان یک مجموعه تشخیص میده و شما میتونید از اون مجموعه استفاده کنید

.(نقطه یا دات) به معنی هر چیزی یا هر کارکتری هست

*(ستاره) به معنی هر تعدادی از 1 به بالا

؟(علامت سوال) هرجایی یه معنی داره

علامت سوال بعلاوه <> برای نامگذاری مجموعه بکار میره

5-خط 6 هم توضیح نمیدم ولی خط 7 میاد چک میکنه ببینه کاربر ورودی ارسال کرده یا نه اگر ارسال نکرده باشه بهش پیام خطا نشون میده توی خط 8 هم میاد یک ارایه میسازه و خانه Error رو برابر با پیام خطای ما نشون میده.

6-خط 11 هم که دیگه گفتن نداره چون ادامه خط 7 هست و اونور قضیه رو بررسی میکنه (اگر ورودی ارسال شده باشه توسط کاربر)

7-خط 12 میاد سورس آدرس ارسالی کاربر رو دریافت میکنه و در خط های 13 و 14 با Regex مورد بررسی قرار میده؛کار با ریجکس توی PHP یکی از آسون ترین Regex های موجود در زبان های برنامه نویسی هست

preg_match($re1, $file, $matches1);

خط بالا تابع preg_match رو صدا میکنه که این تابع 3 تا ورودی داره که این پارامتر ها به ترتیب فیلتر ما برای جستجو،فایل متنی ما برای جستجو در آن و آرایه ای برای ذخیره کردن متونی که با فیلتر ما هماهنگی دارن.

8-خط 15 هم که قبلا توی 9 توضیح دادم پس میرم سراغ خط 20 و 21 که از توضیح خط 21 خندم میگره چون میدونم شما همه استاد PHP هستید ولی ببخشید دیگه توضیح توضیح هست.

توی خط 21 یک متغیر دیگه تعریف کردم و خروجی نهایی برنامه خودم یعنی آرایه هایی که تا اینجا با نتیجه های مختلف پر کردم رو با تابع json_encode به خروجی JSON تبدیل کردم و توی خط 21 خروجی رو به کاربر نمایش دادم

ممنون که تا اینجا همراه من بودید و سرتون رو درد آوردم ??

دمو :

http://rp76.ir/Api/Wp.php?site=http://rp76.ir


https://github.com/RezaParsian/Wp_Detector
phpregexwordpressجستجوریجکس
الان لاراول کار می‌کنم ولی هنوز سایتم همونه https://Rp76.ir
شاید از این پست‌ها خوشتان بیاید