1399/2/22، 08:48 عصر
به نام خدا
سلام دوستان امیدوارم حالتون خوب باشه...
توی هر سری از این تاپیک ها قطعه کدهای کاربردی PHP که ممکنه در پروژه تون بهشون نیاز پیدا کنید قرار داده میشه. در صورتی که مایلید سری اول این کدها رو هم ببینید میتونید به اینجا مراجعه کنید.سلام دوستان امیدوارم حالتون خوب باشه...
1- تشخیص موجود بودن یک آدرس اینترنتی (وبسایت) به کمک CURL:
شما میتونید به کمک کتابخانه CURL در PHP بررسی کنید که یک آدرس اینترنتی (وبسایت) وجود خارجی داره یا خیر. در واقع در این روش ما ساختار آدرس رو بررسی نمیکنیم بلکه به آدرس موردنظر نوعی درخواست HTTP مشابه درحواستی که مرورگر ارسال می کنه میفرستیم.
کد php:
<?php
function Visit($url)
{
$agent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_VERBOSE, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSLVERSION, 3);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
$page = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpcode >= 200 && $httpcode < 300) return true;
else return false;
}
if (Visit($_GET['url'])) {
echo "found";
} else {
echo "not found";
}
?>
کد:
"http://yourhost.com/file.php?url=http://facebook.com"
نکته: دقت کنید حتماً آدرس موردنظرتون رو به همراه پروتکل (http یا https) درج کنید.
2- دریافت آخرین زمان ویرایش (Modify) فایلهای آپلود شده در سرور یا هاست:
شاید بخواید تاریخ و ساعت آخرین باری که یک فایل در سرور ویرایش شده (منظور از لفظ ویرایش در اینجا اضافه شدن، ادیت شدن و یا هر چیزی که باعث دست بردن در اون فایل بشه هست) رو به دست بیارید که برای این منظور میتونین از کد PHP زیر استفاده کنید.
کد:
<?php
function lastmoidfy($file){
if (!file_exists($file)){
return ("File Not Found.");
}
return date("F d Y" . '|' . "H:i:s", filemtime($file));
}
echo lastmoidfy('x');
?>
فرض کنید قصد دارید بدونید فایل e12.png که کاربر در دایرکتوری (پوشه) uploads سرور یا هاستتون آپلود کرده در چه تاریخ و ساعتی آپلود شده. کافیه از تابع تعریف شده به شکل زیر استفاده کنید:
کد:
echo lastmodify('uploads/e12.png');
کد:
February 14 2020|19:14:11
- * در صورتی که فایل موردنظر در هاست یا سرور یافت نشود پیغام زیر چاپ خواهد شد:
کد:
File Not Found.
3- محاسبه فاصله بین دو مختصات جغرافیایی برحسب مایل، کیلومتر، متر و یارد:
در صورتی که نیاز دارید فاصله بین دو مختصات جغرافیایی رو محاسبه کنید میتونید از کد PHP زیر استفاده کنید.
کد php:
<?php
function getDistanceBetweenPointsNew($latitude1, $longitude1, $latitude2, $longitude2) {
$theta = $longitude1 - $longitude2;
$miles = (sin(deg2rad($latitude1)) * sin(deg2rad($latitude2))) + (cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * cos(deg2rad($theta)));
$miles = acos($miles);
$miles = rad2deg($miles);
$miles = $miles * 60 * 1.1515;
$feet = $miles * 5280;
$yards = $feet / 3;
$kilometers = $miles * 1.609344;
$meters = $kilometers * 1000;
return compact('miles','feet','yards','kilometers','meters');
}
?>
کد:
نقطه اول (موزه مردم شناسی آسیا واقع در نیویورک)
طول: -73.964367
عرض: 40.770623
+++++++++++
نقطه دوم (نقطه ای واقع در قطب جنوب)
طول: -73.964367
عرض: 40.758224
کد:
$point1 = array('lat' => 40.770623, 'long' => -73.964367);
$point2 = array('lat' => 40.758224, 'long' => -73.917404);
کد:
$distance = getDistanceBetweenPointsNew($point1['lat'], $point1['long'], $point2['lat'], $point2['long']);
foreach ($distance as $unit => $value) {
echo $unit.': '.number_format($value,4).'<br />';
}
کد:
miles: 2.603
feet: 13,741.435
yards: 4,580.478
kilometers: 4.188
meters: 4,188.389
4- دریافت تمامی فایلهای حاوی یک فرمت مشخص در دایرکتوری (پوشه):
به این منظور میتونید از کد PHP زیر استفاده کنید.
کد php:
<?php
function find($format){
$files = glob('*.' . $format);
foreach($files as $key => $value){
echo $value . '</br>';
}
echo sizeof($files) . ' files were found.';
}
find('x');
?>
به طور مثال قصد داریم فایل های PHP موجود در دایرکتوری کنونی رو به دست بیاریم. پس از تابع به شکل زیر استفاده می کنیم:
کد:
find('php);
کد:
alexa.php
alter.php
class.php
web.php
4 files were found.
- * در صورتی که فرمت وارد شده در دایرکتوری کنونی موجود نباشد پیغام زیر چاپ خواهد شد:
کد:
0 files were found.
- * دقت کنید که تابع تعریف شده تنها قادر به یافتن فایلهای با فرمت تعریف شده در دایرکتوری کنونی (دایرکتوری که فایل PHP در آن قرار دارد) می باشد.
5- محاسبه قدرت پسورد:
این کد PHP به کمک بحث آنتروپی (Entropy) پسورد از صفر تا صد به یک پسورد امتیاز میده. آنتروپی پسورد در واقع فرمولی هست که مشخص میکنه یک پسورد به چه مقداری غیرقابل حدس هست. برای محاسبه آنتروپی باید از فرمول زیر استفاده کنیم:
در فرمول بالا E بیانگر آنتروپی پسورد، R بیانگر مجموع کاراکترهای غیرتکراری و L نیز بیانگر تعداد کل کاراکترهای پسورد موردنظر است. دلیل استفاده از لگاریتم در مبنای 2 دراین فرمول صرفاً برای به دست آوردن تعداد بیت ها است.
کد:
<?php
function password_strength($string){
$h = 0;
$size = strlen($string);
foreach(count_chars($string, 1) as $v){
$p = $v / $size;
$h -= $p * log($p) / log(2);
}
$strength = ($h / 4) * 100;
if($strength > 100){
$strength = 100;
}
return round($strength);
}
echo password_strength('x');
?>
فرض کنید قصد داریم قدرت پسورد mmd1234 رو به کمک این تابع ارزیابی کنیم. پس باید از تابع به شکل زیر استفاده کنیم:
کد:
echo password_strength('mmd1234');
6- تشخیص صحت ساختاری شماره کارت بانکی:
قصد داریم به کمک یک کد PHP صرفاً ساختار یک شماره کارت بانکی رو بررسی کنیم. بنابراین اگر شماره کارت موردنظر منقضی شده باشد و یا باطل شده باشد چون ما دسترسی به دیتابیس بانک نداریم همچنان کارت بانکی موردنظر معتبر تلقی خواهد شد. برای این منظور میتونیم از عبارات با قاعده (Regular Expressions) و یا الگوریتم تشخیص صحت ساختار شماره کارت بانکی استفاده کنیم. البته استفاده از عبارات با قاعده به تنهایی برای تشخیص صحت ساختار شماره کارت بانکی کارساز نخواهد بود.
الگوریتم تشخیص صحت ساختار شماره کارت بانکی:
ساختار یک شماره کارت بانکی به شکل زیر است:
1- برای محاسبه رقم کنترل از روی سایر ارقام ، از سمت چپ و با شروع از موقعیت 1 تا موقعیت 16 ، ارقام موقعیت فرد را در 2 و ارقام موقعیت زوج را در یک ضرب می کنیم، اگر حاصل ضرب هر مرحله بیشتر از 9 شد 9 واحد از آن کم کنید تا یک رقمی شود و سپس اعداد حاصل را با هم جمع می کنیم.
2- اگر عدد حاصل از اجرای مرحله یک بر 10 بخش پذیر باشد ، شماره کارت صحیح قلمداد می شود در غیر اینصورت شماره کارت صحیح نمی باشد.
مثال: آیا کد 6274129005473742 یک شماره کارت بانکی معتبر است؟
حاصل جمع ضرب ارقام کارت در الگوی مورد نظر را با توجه به روش گفته شده محاسبه می کنیم این حاصل جمع در زیر آمده است. ضمنا چون رقم کنترل را نیز باید در انتهای کار به حاصل جمع مورد نظر اضافه کنیم برای راحتی رقم کنترل را نیز در یک ضرب کرده و به مجموع می افزاییم. پس الگوی ضرب به صورت 16 رقمی 2121212121212121 خواهد بود که هر رقم از الگو در رقم همو موقعیت آن از شماره کارت ضرب می شود (در هر مرحله چنانچه حاصلضرب رقم الگو ضرب در رقم کارت بیشتر از 9 بود 9 واحد از نتیجه حاصلضرب کسر می کنیم). در زیر 16 مورد ضرب الگو در 16 رقم شماره کارت مورد بررسی در این مثال، نمایش داده شده است.
کد:
6*2=12 -> 12-9=3
2*1=2
7*2=14 -> 14-9=5
4*1=4
1*2=2
2*1=2
9*2=18 ->18-9=9
0*1=0
0*2=0
5*1=5
4*2=8
7*1=7
3*2=6
7*1=7
4*2=8
2*1=2
8+7+6+7+8+5+0+0+9+2+2+4+5+2+3+2=70
در حاشیه:
دقت کنید چون در این کد PHP ما تنها به الگوریتم متکی هستیم در صورتی که کاربر طرز کار الگوریتم ما رو بدونه میتونه شماره کارت های کاملاً جعلی تولید (Generate) کنه. کافیه کاربر ارقام رو به گونه ای قرار بده که شروط الگوریتم برقرار بشه. اینجاست که استفاده از عبارات با قاعده ضروری به نظر میرسه تا بتونیم به حد هر چند کمی جلوی این مسئله رو بگیریم. در واقع به کمک عبارات با قاعده مشخص می کنیم که هر بانک شماره کارت هاش با چه ارقامی شروع میشن تا بتونیم تا حدی جلوی جنریت شماره کارت های جعلی رو بگیریم. حتی با اعمال عبارات با قاعده باز هم به خانه اول بر می گردیم و نمیتونیم به طور دقیق اظهارنظر کنیم که چنین شماره کارتی موثق هست یا خیر چون ارتباطی با دیتابیس بانک نداریم.
کد php:
<?php
function bankCardCheck($card='', $irCard=true) {
$card = (string) preg_replace('/\D/','',$card);
$strlen = strlen($card);
if($irCard==true and $strlen!=16)
return false;
if($irCard!=true and ($strlen<13 or $strlen>19))
return false;
if(!in_array($card[0],[2,4,5,6,9]))
return false;
for($i=0; $i<$strlen; $i++)
{
$res[$i] = $card[$i];
if(($strlen%2)==($i%2))
{
$res[$i] *= 2;
if($res[$i]>9)
$res[$i] -= 9;
}
}
return array_sum($res)%10==0?true:false;
}
if(bankCardCheck($_GET['card']))
echo 'ok';
else
echo 'err';
?>
فرض کنید قصد داریم صحت شماره کارت 6037991199500590 رو بررسی کنیم. به کمک اکشن Request URL شیء AJAX ریکوئستی مشابه نمونه زیر ارسال می کنیم:
کد:
"http://yourhost.com/file.php?card=6037991199500590"
نکته: در صورتی که شماره کارت وارده از لحاظ ساختاری معتبر نبود خروجی کد PHP عبارت err خواهد بود.
امیدوارم این مطلب براتون مفید واقع شده باشه.
در هر سری از این تاپیک های آموزشی مجموعاً شش قطعه کد کاربردی بررسی خواهد شد.
در پایان خوشحال میشم که نظراتتون رو به بنده گوشزد کنین و اگر جایی اشتباهی مشاهده میشه حتماً اعلام کنین.
با آرزوی بهترین ها...