سوال در مورد جزئیات تابع header و try و catch

با سلام به دوستان عزیز


سوالاتی پیش اومد برام

در مورد سوالات کلی گشتم . چیزهایی پیدا کردم ولی متوجه نشدم .

اول اینکه تابع هدر به جز انتقال صفحه دیگه چه کارهایی می کنه
PHP:
header("Cache-Control: public");
     header("Content-Description: File Transfer");
     header("Content-Disposition: attachment; filename=$file");
     header("Content-Type: application/zip");
     header("Content-Transfer-Encoding: binary");
و در مورد این کد ها هم یه توضیحی بدید

و سوال دوم این که این کلاس چه کاری انجام میده و لطف کنید بگید که try و catch چی هستن

PHP:
<?php
class customException extends Exception
{
public function errorMessage()
{
//error message
$errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
.': <b>'.$this->getMessage().'</b> is not a valid E-Mail address';
return $errorMsg;
}
}

$email = "[email protected]";

try
  {
  //check if
  if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
    {
    //throw exception if email is not valid
    throw new customException($email);
    }
  //check for "example" in mail address
  if(strpos($email, "example") !== FALSE)
    {
    throw new Exception("$email is an example e-mail");
    }
  }

catch (customException $e)
  {
  echo $e->errorMessage();
  }

catch(Exception $e)
  {
  echo $e->getMessage();
  }
?>
 

iran-TEC

Member
سلام

در مورد try و catch این موارد برای مدیریت خطا ها استفاده می شه شما اون قسمتی از کدت که احتمال می دی خطا درش اتفاق بیفته
( خطا های زمان اجرا ) که قابل پیش بینی نیست اون رو داخل بلاک try قرار می دی و کد مدیریت خطا رو در بلاک catch در صورتی که در بلاک try یک خطا اتفاق بیفته php کد های درون بلاک catch رو اجرای می کنه .
 
با تشکر از شما دوست عزیز -- من با این بلوک ها تازه آشنا شدم می شه یه مثال ساده و واضح بزنید تا من کاملا متوجه بشم ؟
 

hidensoft

Member
دوست عزیز تابع header یک تابع در پی اچ پی هست که به کنترل header می پردازه . header ها در وب پایه و اساس یک صفحه وب هستند. از روی مثال خودتون :
PHP:
header("Cache-Control: public");
در اینجا کنترل کش صفحه رو بصورت public در نظر گرفته شده برای صفحه ای که به عنوان response به مرور گر ارسال می شه
PHP:
     header("Content-Description: File Transfer");
توضیحاتی در مورد صفحه رو به header ارسال می کنه .. بیشتر برای SEO کاربرد داره
PHP:
     header("Content-Disposition: attachment; filename=$file");
به مرور گر می گه که این صفحه که داره response می شه یک فایل هست و نام فایل رو هم مشخص کرده
PHP:
     header("Content-Type: application/zip");
نوع فایل ارسالی رو application/zip در نظر گرفته
PHP:
     header("Content-Transfer-Encoding: binary");
انکود یا نحوه کدینگ صفحه رو باینری یا دو دویی اعلام کرده


مثلا اگر شما بخواهید یه صفحه xml ایجاد کنید یه همچین کدی را باید response کنید
PHP:
header ("Content-Type:text/xml");

نحوه برخورد مرورگر با response به header ارسالی رابطه مستقیم داره
 

hidensoft

Member
try , catch یک راه برای نمایش خطا بصورت حرفه ای هست

کد اصلی باید یه همچین چیزی باشه با یکم تغییرات فکر می کنم
PHP:
<?php


	class customException extends Exception
    {
        public  function errorMessage()
        {
            //error message
            $errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile().': <b>'.$this->getMessage().'</b> is not a valid E-Mail address';
            return $errorMsg;
        }

    }

    $email = "[email protected]";
    try
    {
        //check if
        
        if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
        {
            //throw exception if email is not valid
            throw new customException();
        }

        //check for "example" in mail address
        
        if(strpos($email, "example") !== FALSE)
        {
            throw new Exception("$email is an example e-mail");
        }

    }

    catch (customException $e)
    {
        echo $e->errorMessage();
    }

    catch(Exception $e)
    {
        echo $e->getMessage();
    }

?>


خب شروع می کنیم
PHP:
	class customException extends Exception
یک کلاس به نام customException تعریف کرده که extends شده به کلاس Exception


PHP:
 public  function errorMessage()
        {
            //error message
            $errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile().': <b>'.$this->getMessage().'</b> is not a valid E-Mail address';
            return $errorMsg;
        }
این تابع از کلاس customException یک خطا رو نمایش می ده


PHP:
    try
    {
        //check if
        
        if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
        {
            //throw exception if email is not valid
            throw new customException();
        }

        //check for "example" in mail address
        
        if(strpos($email, "example") !== FALSE)
        {
            throw new Exception("$email is an example e-mail");
        }

    }

try تا حدودی شبیه به یک if عمل می کنه. یعنی زمانی که throw صورت بگیره متوقف می شه

به عنوان مثال اگر شرط زیر صحیح باشه

PHP:
        if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
و کد زیر اجرا بشه
PHP:
throw new customException();
catch اجرا خواهد شد. اما اینجا 2 catch داریم .. خب ببینیم کدوم باید اجرا بشه

PHP:
catch (customException $e)
    {
        echo $e->errorMessage();
    }

    catch(Exception $e)
    {
        echo $e->getMessage();
    }

فکر می کنم مشخص باشه که catch اول باید اجرا بشه چون throw کلاس customException رو new کرده و catch اول در آرگمان هاش کلاس customException رو می خواد. که بعد از اون تابع errorMessage اجرا خواهد شد.
در شرط دوم هم زمانی که throw بشه catch دوم اجرا می شه که بصورت پیشفرض خطا رو ارسال می کنه

try,catch بهترین ابزار پی اپ پی برای ساخت خطای اختصاصی هست که مشابه اون رو در فریم ورک هایی مثل زند می تونید ببینید. نوع پیشرفته هم در سیمفونی و کیک هستند.
 

جدیدترین ارسال ها

بالا