قطعه کدهای کاربردی PHP در پروژه های کانستراکتی - سـری اول
#1
Lightbulb 
به نام خـدا
سلام دوستان امیدوارم حالتون خوب باشه...
امروز قصد دارم چند قطعه کد کاربردی زبان 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";
?>
پس از ارسال درخواست AJAX (اِی جَکس) مشابه نمونه زیر در کانستراکت به فایل PHP موردنظر تاریخ شمسی و نام روز کنونی دریافت خواهد شد.
کد:
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($responsetrue);
    if ($data !== null) {
        // استخراج تعداد فالو شده ها
        $following $data['graphql']['user']['edge_follow']['count'];
        // استخراج تعداد فالو کننده ها
        $followedBy $data['graphql']['user']['edge_followed_by']['count'];
        // تعیین مفرد یا جمع بودن کلمه یوزر در نتیجه برای تعداد فالو شده ها
       if ($following ){
            $identifier 'users';
            }elseif($following == 1){
                $identifier 'user';
                }elseif($following == 0){
                    $identifier 'no one';
                    $following '';
            }
        // تعیین مفرد یا جمع بودن کلمه یوزر در نتیجه برای تعداد فالو کننده ها
      if ($followedBy ){
            $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 ".";
    }
}

?>
برای استفاده از قطعه کد PHP بالا کافیه درخواستی مشابه نمونه زیر رو از طریق شیء AJAX و از طریق اکشن Request URL به سرورتون ارسال کنین:
کد:
"http://yourhost.com/file.php?username="&"X"
در آدرس فوق پارامتر 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).
(عبارت X بیانگر نام کاربری موردنظر، K تعداد دنبال کنندگان پیج و M تعداد دنبال شوندگان توسط پیج است.)
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');
?>
در واقع در کد بالا یک تابع به نام lastseen() تعریف کردیم که با پذیرش آرگومان date به عنوان تنها ورودی (پارامتر) خودش که همون تایم استمپ موردنظر هست مدت زمان تقریبی سپری شده از تایم استمپ موردنظر رو برای ما چاپ میکنه. فرض کنین قصد داریم مدت زمان سپری شده از تایم استمپ 1589024463 رو در حالی که تایم استمپ کنونی 1589024546 باشه رو از طریق تابع محاسبه کنیم. باید از تابع به شکل زیر استفاده کنیم:
کد:
echo lastseen('1589024463');
حالا اگر از طریق اکشن Request URL شیء AJAX به این فایل PHP درخواست ارسال کنیم نتیجه زیر دریافت میشه:
کد:
1 minute(s) ago.
در اصل اگرتایم استمپ 1589024546 رو از  1589024463 کم کنیم حاصل 83 ثانیه (یعنی یک دقیقه و 23 ثانیه) خواهد بود که نتیجه تقریبی نمایش داده شده که یک دقیقه است قابل پذیرشه.
 نکته:
  • * در صورتی که از تایم استمپ وارده مدت زمان دو سال یا بیشتر سپری شده باشد خروجی تابع پیغام زیر به معنی خیلی وقت پیش خواهد بود:
کد:
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 substrstr_shuffle($char), 0$length);
}
echo 
rndstring($characters $length);
?>
در کد بالا تابعی به نام rndstring() ایجاد کردیم که شامل دو ورودی (آرگومان) یا پارامتر characters و length است. پارامتر characters می تواند یک رشته حاوی یک یا چندین کاراکتر در داخل کوتیشن باشد و length هم بیانگر طول رشته تصادفی خروجی است. در صورتی که قصد دارید رشته تصادفی خروجی شامل تمامی کاراکترها (حروف الفبای بزرگ و کوچک انگلیسی، اعداد 0 تا 9 و کاراکترهای خاص مثل !@$%^&*) باشد نهایتاً می توانید طول رشته تصادفی خروجی را 85 کاراکتر در نظر بگیرید.
فرض کنید قصد داریم یک رشته تصادفی چهار کاراکتری از میان کاراکترهای hesoyam بسازیم. در این صورت باید از تابع تعریف شده به شکل زیر استفاده کنیم:
کد:
echo rndstring('hesoyam' , 4);
در صورتی که کد PHP را اجرا کنیم خروجی به طور مثال به شکل زیر چاپ خواهد شد:
کد:
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']);
?>
در کد بالا تابعی به نام sourcecode() ایجاد کردیم که شامل یک ورودی (آرگومان) یا پارامتر url است. مقدار این پارامتر باید برابر با آدرس صفحه موردنظر به همراه درج پروتکل (http یا https) باشد. 
فرض کنید قصد داریم در محیط کانستراکت سورس کد یک صفحه اینترنتی دلخواه رو به دست بیاریم. برای این منظور کافیه از اکشن Request to URL شیء AJAX استفاده کنیم. قبل از هر چیز باید از تابعی که ایجاد کردیم به شکل زیر استفاده کنیم:
کد:
echo sourcecode($_GET['url']);
با استفاده از متغیر گلوبال $_GET در زبان PHP مشخص کردیم که ورودی تابع از طریق متد GET توسط تابع دریافت خواهد شد. حالا کافیه برای دریافت سورس کد یک آدرس دلخواه ریکوئستی مشابه نمونه زیر از طریق شیء AJAX ارسال کنیم:
کد:
"http://yourhost.com/file.php?url=http://construct2.ir"
نتیجه ای که توسط شیء AJAX دریافت می شود به شکل زیر خواهد بود:
کد:
<!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);
?>
در کد بالا تابعی به نام getdimensions() ایجاد کردیم که شامل دو ورودی (آرگومان) data و mode است. مقدار پارامتر mode را در صورتی که قصد داریم لینک یک تصویر را وارد کنیم باید برابر با  link قرار دهیم. در صورتی که قصد داشتیم ابعاد یک تصویر که در سرور قرار دارد (آپلود شده است) را دریافت کنیم باید مقدار پارامتر mode را برابر با  uploaded قرار دهیم. پارامتر data نام تصویر یا لینک تصویر را مشخص می کند. دقت کنید که نام تصویر موردنظر خود را به همراه درج فرمت (png یا jpg) وارد کنید. همچنین کد PHP فوق را باید در دایرکتوری آپلود کنید که تصویر موردنظر قرار دارد. 
فرض کنیم قصد داریم ابعاد یک تصویر رو از لینکش به دست بیاریم. پس باید از تابع به شکل زیر استفاده کنیم:
کد:
echo getdimensions('https://65f469576261d5540f89abb820b2f49b.cdn.cafebazaar.cloud/images/bazaar-logo-production.png' , 'link');
حالا اگر کد را اجرا کنیم خروجی زیر را دریافت خواهیم کرد.
کد:
width:155|height:100
(همانطور که مشخص است height به معنی طول تصویر و width به معنی عرض تصویر است.)
 نکته:
  • * در صورتی که پارامتر mode برابر با  uploaded باشد و تصویر وارد شده در سرور یا هاست موجود نباشد پیغام زیر چاپ می شود:
کد:
The entered image were not found on the server.
  • * در صورتی که پارامتر mode برابر با  link باشد و اطلاعاتی از لینک تصویر وارد شده دریافت نشود پیغام زیر چاپ خواهد شد:
کد:
Can not recieve the info of the photo.

امیدوارم این مطلب براتون مفید واقع شده باشه.
در هر سری از این تاپیک های آموزشی مجموعاً شش قطعه کد کاربردی بررسی خواهد شد. 
در پایان خوشحال میشم که نظراتتون رو به بنده گوشزد کنین و اگر جایی اشتباهی مشاهده میشه حتماً اعلام کنین.
در ضمن میتونید سری دوم این تاپیک رو در اینجا مشاهده کنید.
با آرزوی بهترین ها...
غایب
  پاسخ


 سپاس شده توسط: M.gh ، MrAlvand ، mostafanastary ، amin hosseini
#2
آقا خدایی خیلی چیزای باحالی یاد دادی
دمت گرم
انشالله موفق باشی
  پاسخ


 سپاس شده توسط: Master Badfar
#3

یه سوال این کد هارو کجا باید بزنیم
  پاسخ


 سپاس شده توسط:
#4
(1399/2/23، 09:01 عصر)Mikaeil نوشته است: یه سوال این کد هارو کجا باید بزنیم
درود؛
برای استفاده از یک زبان سمت سرور مثل PHP نیاز به یک هاست یا سرور دارید.
اگر صرفاً قصد تست پروژه رو دارین میتونین از لوکال هاست زمپ یا WampServer هم استفاده کنید.
موفق باشید.
غایب
  پاسخ


 سپاس شده توسط: M.gh


موضوع‌های مشابه…
موضوع نویسنده پاسخ بازدید آخرین ارسال
Star مهم آموزش خروجی اندروید روی سیستم شخصی rezamms 127 76,506 1402/8/24، 09:00 عصر
آخرین ارسال: mehdiosw
  مهم آموزش تصویری خروجی مستقیم - یکبار برای همیشه! rezamms 33 17,754 1401/2/13، 09:39 عصر
آخرین ارسال: kamran_cn
  خروجی اندرید davinmstr1 2 2,163 1400/8/4، 10:23 عصر
آخرین ارسال: ᔕinaᗪehghani
  AAB (بسته برنامه اندروید) چيست؟ + نحوه خروجي گرفتن در كرودوا ᔕinaᗪehghani 15 7,031 1400/6/21، 01:55 صبح
آخرین ارسال: mehdi1100
  رفع مشکل خروجی فونگپ (: M.gh 11 7,341 1400/4/10، 02:17 صبح
آخرین ارسال: oak

پرش به انجمن: