به نام خـدا
سلام دوستان امیدوارم حالتون خوب باشه...
سلام دوستان امیدوارم حالتون خوب باشه...
امروز قصد دارم چند قطعه کد کاربردی زبان PHP رو با هم بررسی کنیم که ممکنه در حین ساخت پروژه تون به کارتون بیاد.
1- دریافت تاریخ شمسی:
به منظور دریافت تاریخ شمسی قبل از هر چیز باید کتابخانه JDF رو از اینجا دانلود کنید و اون رو در دایرکتوری موردنظرتون قرار بدین.سپس قطعه کد زیر رو هم در دایرکتوری که کتابخانه وجود داره قرار بدین.
پس از ارسال درخواست AJAX (اِی جَکس) مشابه نمونه زیر در کانستراکت به فایل PHP موردنظر تاریخ شمسی و نام روز کنونی دریافت خواهد شد.1- دریافت تاریخ شمسی:
به منظور دریافت تاریخ شمسی قبل از هر چیز باید کتابخانه JDF رو از اینجا دانلود کنید و اون رو در دایرکتوری موردنظرتون قرار بدین.سپس قطعه کد زیر رو هم در دایرکتوری که کتابخانه وجود داره قرار بدین.
کد php:
<?php
include ('jdf.php');
$day_number = jdate('j');
$month_number = jdate('n');
$year_number = jdate('y');
$day_name = jdate('l');
echo "امروز $day_name ، $day_number-$month_number-$year_number";
?>
کد:
http://yourhost.com/file.php
2- دریافت تعداد دنبال کنندگان یک پیج و دنبال شوندگان توسط پیج اینستاگرامی:
شاید نیاز دارید که تعداد تعداد دنبال کنندگان یک پیج و دنبال شوندگان توسط همون پیج رو به دست بیارین. قبل از هر چیز لازمه کد PHP زیر رو در هاست یا سرورتون آپلود کنین.
کد php:
<?php
/**
* @author Master Badfar
* @copyright 2020
*/
// صدور مجوز ajax برای مرورگر
header('Access-Control-Allow-Origin: *');
// قطع نمایش خطاهای مفسر PHP
ini_set('display_errors', 0);
error_reporting(~E_WARNING & ~E_NOTICE & ~E_STRICT);
// متغیر میزان ارور
$error = 0;
// دریافت نام کاربری
$page = $_GET['username'];
// دریافت محتوای جیسون
$response = file_get_contents("https://www.instagram.com/$page/?__a=1");
// بررسی وجود داشتن یا نداشتن پیج
if (empty($response)){
echo "The entered username is not avialable!";
$error++;
// بررسی خالی نبودن پارامتر یوزرنیم
}elseif(empty($_GET['username'])){
echo "You should enter the username to continue!";
$error++;
}
if ($response !== false && $error == 0) {
// دیکد کردن جیسون
$data = json_decode($response, true);
if ($data !== null) {
// استخراج تعداد فالو شده ها
$following = $data['graphql']['user']['edge_follow']['count'];
// استخراج تعداد فالو کننده ها
$followedBy = $data['graphql']['user']['edge_followed_by']['count'];
// تعیین مفرد یا جمع بودن کلمه یوزر در نتیجه برای تعداد فالو شده ها
if ($following > 1 ){
$identifier = 'users';
}elseif($following == 1){
$identifier = 'user';
}elseif($following == 0){
$identifier = 'no one';
$following = '';
}
// تعیین مفرد یا جمع بودن کلمه یوزر در نتیجه برای تعداد فالو کننده ها
if ($followedBy > 1 ){
$ident = 'users';
}elseif($followedBy == 1){
$ident = 'user';
}elseif($followedBy == 0){
$ident = 'no one';
$followedBy = '';
}
// نمایش نتیجه
echo "The user ' " . $page . " ' is following " . $following . " " . $identifier . "." . '</br>' . 'And Followed by ' . $followedBy . " " . $ident . ".";
}
}
?>
کد:
"http://yourhost.com/file.php?username="&"X"
نکته:
- * در صورتی که نام کاربری وارد شده در اینستاگرام موجود نباشد پیغام زیر چاپ می شود:
کد:
The entered username is not avialable!
- * در صورتی که هیچ مقداری برای پارامتر username وارد نشده باشد پیغام زیر چاپ می شود:
کد:
You should enter the username to continue!
- * در صورتی که مشکلی وجود نداشته باشد خروجی کد به شکل زیر خواهد بود:
کد:
The user ' X ' is following K user(s).
And Followed by M user(s).
3- محاسبه آخرین زمان بازدید (Last Seen) کاربر:
ممکنه در پروژه خودتون سیستم ثبت نامی پیاده سازی کرده باشین و نیاز داشته باشین که آخرین زمان بازدید کاربر از پروفایلش رو برای افرادی که اون رو دنبال میکنن یا جزء دوستانش هستن و یا برای هر کسی نمایش بدین دقیقاً مشابه امکانی که توی مسنجرهای امروزی وجود داره. کافیه هر بار که کاربر قصد خروج از حسابش رو داشت (یعنی گزینه خروج از حساب یا Log Out رو انتخاب کرد) زمان لحظه خروج رو به صورت تایم استمپ (اگر نمیدانید تایم استمپ چیست اینجا را کلیک کنید) در دیتابیس ذخیره کنید و بعد برای نمایش آخرین بار بازدید کاربر در جایی که نیازه از قطعه کد PHP زیر استفاده کنید.
کد:
<?php
/**
* @author Master Badfar
* @copyright 2020
*/
function lastseen($date){
date_default_timezone_set('Asia/Tehran');
$current_date = strtotime(date('Y-m-d H:i:s'));
if (time() < $date){
return ('You have entered a timestamp in future.');
}
date_default_timezone_set('Asia/Tehran');
$val = strtotime(date('Y-m-d H:i:s', $date));
$seconds_diff = $current_date - $val;
$day = round(($seconds_diff) / (24 * 3600)) . ' ' . 'day(s) ago.';
$month = round(($seconds_diff) / (24 * 3600 * 30)) . ' ' . 'month(s) ago.';
$hour = round(($seconds_diff) / (3600)) . ' ' . 'hour(s) ago.';
$minute = round(($seconds_diff) / (60)) . ' ' . 'minute(s) ago.';
$second = round(($seconds_diff)) . ' ' . 'seconds(s) ago.';
$year = round(($seconds_diff) / (24 * 3600 * 365)) . ' ' . 'year(s) ago.';
if ($year >= 2) {
return ('Long time ago.');
} elseif ($day > 365) {
$day = $year;
}
if ($day > 30){
$day = $month;
}
if ($day > 0) {
return $day;
} elseif ($hour > 0) {
return $hour;
} elseif ($month > 0) {
return $month;
} elseif ($second <= 59) {
return $second;
} elseif ($minute > 0) {
return $minute;
} elseif ($year > 0) {
return $year;
}
}
echo lastseen('1589024463');
?>
کد:
echo lastseen('1589024463');
کد:
1 minute(s) ago.
نکته:
- * در صورتی که از تایم استمپ وارده مدت زمان دو سال یا بیشتر سپری شده باشد خروجی تابع پیغام زیر به معنی خیلی وقت پیش خواهد بود:
کد:
Long time ago.
- * در صورتی که تایم استمپ وارده متعلق به آینده (مثلاً چند ثانیه یا چند سال آینده) باشد پیغام زیر خروجی تابع خواهد بود:
کد:
You have entered a timestamp in future.
- * حتماً دقت کنید که تایم استمپ موردنظر خودتون رو در داخل کوتیشن قرار بدین تا مفسر PHP ایراد مربوط به ساختمان داده از برنامه شما نگیره.
4- ساخت رشته تصادفی:
ممکنه در پروژه خودتون نیاز داشته باشین که یک رشته تصادفی به منظور 2FA (تأیید دو مرحله ای) یا دیگر موارد در سمت سرور به کمک PHP ایجاد کنین. قطعه کد PHP زیر این کارو برای شما انجام میده.
کد php:
<?php
function rndstring($characters , $length){
if ($characters == 'all'){
$char = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*()_-=\/+.?<>0123456789~{}';
}elseif ($characters != 'all'){
$char = $characters;
}
if ($length > strlen($characters) && $characters != 'all'){
return ('The output length is not adequate.');
}elseif ($length > 85 && $characters == 'all'){
return ('The output length is bigger than the range of the defined characters.');
}
return substr( str_shuffle($char), 0, $length);
}
echo rndstring($characters , $length);
?>
فرض کنید قصد داریم یک رشته تصادفی چهار کاراکتری از میان کاراکترهای hesoyam بسازیم. در این صورت باید از تابع تعریف شده به شکل زیر استفاده کنیم:
کد:
echo rndstring('hesoyam' , 4);
کد:
soam
- * در صورتی که مقدار طول وارد شده با طول رشته معیار (رشته ای که قصد داریم از روی کاراکترهای آن رشته های تصادفی بسازیم) متناسب نباشد پیغام زیر چاپ خواهد شد:
کد:
The output length is not adequate.
- * در صورتی که مقدار پارامتر characters را برابر با all قرار دهیم و مقدار پارامتر length را بیشتر از 85 تعیین کرده باشیم پیغام زیر چاپ خواهد شد:
کد:
The output length is bigger than the range of the defined characters.
- * دقت کنید که ساخت رشته های تصادفی به این روش از نظر علم رمزنگاری ایمن نیست و برای ساخت کلید تصادفی برای پروسه رمزنگاری باید از توابع مخصوصی استفاده کنید.
5- نمایش سورس کد یک صفحه اینترنتی (وبسایت):
کد PHP زیر به شما کمک میکنه که سورس کد یک صفحه اینترنتی رو استخراج کنید.
کد php:
<?php
/**
* @author Master Badfar
* @copyright 2020
*/
function sourcecode($url){
if(preg_match( '/^(http|https):\\/\\/[a-z0-9]+([\\-\\.]{1}[a-z0-9]+)*\\.[a-z]{2,5}'.'((:[0-9]{1,5})?\\/.*)?$/i' ,$url)){
$lines = file($url);
foreach ($lines as $line_num => $line) {
echo htmlspecialchars($line) . "<br>\n";
}
echo "#" . ($line_num - 1) . " " . "lines were found.";
}
else{
return ('Invalid URL.');
}
}
echo sourcecode($_GET['url']);
?>
فرض کنید قصد داریم در محیط کانستراکت سورس کد یک صفحه اینترنتی دلخواه رو به دست بیاریم. برای این منظور کافیه از اکشن Request to URL شیء AJAX استفاده کنیم. قبل از هر چیز باید از تابعی که ایجاد کردیم به شکل زیر استفاده کنیم:
کد:
echo sourcecode($_GET['url']);
کد:
"http://yourhost.com/file.php?url=http://construct2.ir"
کد:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><!-- start: index -->
<html xml:lang="persian" lang="persian" dir="rtl" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>انجمن تخصّصی کانستراکت</title>
<!-- start: headerinclude -->
<link rel="alternate" type="application/rss+xml" title="آخرین موضوعها (RSS 2.0)" href="http://construct2.ir/syndication.php" />
<link rel="alternate" type="application/atom+xml" title="آخرین موضوعها (Atom 1.0)" href="http://construct2.ir/syndication.php?type=atom1.0" />
.
.
.
.
#2107 lines were found.
نکته:
- * در صورتی که فرمت آدرس وارد شده به عنوان تنها پارامتر تابع استاندارد نباشد (شامل پروتکل http یا https نباشد) پیغام زیر چاپ خواهد شد:
کد:
Invalid URL.
6- دریافت ابعاد یک تصویر:
جهت دریافت ابعاد یک تصویر که در سرورتون آپلود شده و یا لینکش رو دارید میتونید از کد PHP زیر استفاده کنید.
کد php:
<?php
function getdimensions ($data , $mode){
ini_set('display_errors', 0);
error_reporting(~E_WARNING & ~E_NOTICE & ~E_STRICT);
$error = 0;
if ($mode == 'uploaded' && !file_exists($data)){
echo 'The entered image were not found on the server.';
$error++;
}elseif ($mode == 'link'){
list($width, $height) = getimagesize($data);
if (empty($height)){
echo 'Can not recieve the info of the photo.';
$error++;
}
}
if ($error == 0){
list($width, $height) = getimagesize($data);
echo "width:" . $width . "|" . "height:" . $height;
}
}
echo getdimensions($data , $mode);
?>
فرض کنیم قصد داریم ابعاد یک تصویر رو از لینکش به دست بیاریم. پس باید از تابع به شکل زیر استفاده کنیم:
کد:
echo getdimensions('https://65f469576261d5540f89abb820b2f49b.cdn.cafebazaar.cloud/images/bazaar-logo-production.png' , 'link');
کد:
width:155|height:100
نکته:
- * در صورتی که پارامتر mode برابر با uploaded باشد و تصویر وارد شده در سرور یا هاست موجود نباشد پیغام زیر چاپ می شود:
کد:
The entered image were not found on the server.
- * در صورتی که پارامتر mode برابر با link باشد و اطلاعاتی از لینک تصویر وارد شده دریافت نشود پیغام زیر چاپ خواهد شد:
کد:
Can not recieve the info of the photo.
امیدوارم این مطلب براتون مفید واقع شده باشه.
در هر سری از این تاپیک های آموزشی مجموعاً شش قطعه کد کاربردی بررسی خواهد شد.
در پایان خوشحال میشم که نظراتتون رو به بنده گوشزد کنین و اگر جایی اشتباهی مشاهده میشه حتماً اعلام کنین.
در ضمن میتونید سری دوم این تاپیک رو در اینجا مشاهده کنید.
با آرزوی بهترین ها...