کلاس آماده برای Hash کردن پسورد در php

شهریور ۱۸, ۱۳۹۴ توسط : سعید

سلام

همینطور که میدونید ذخیره پسورد در دیتابیس دیگه به صورت md5 یا sha1 نیست و این روشها به دلیل کرک شدن دیگه مورد استفاده قرار نمیگیرن. برای همین توی این پست یه کلاس معرفی میکنم بهتون که کار هش کردن پسورد رو با نهایت امنیت انجام میده.

این کلاس از تابع crypt در php و از الگوریتم Blowfish برای هش کردن پسورد استفاده میکنه.ساختار کلاس خیلی ساده است اگر دوست داشتید میتونید یه نگاه به سورسش بندازید.

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

http://www.openwall.com/phpass/phpass-article-3.zip

بعد از حالت فشرده خارجش کنید.

توی پروژه require کنید و ازش استفاده کنید :

require('PasswordHash.php');
$pwdHasher = new PasswordHash(8, FALSE);
 $hash = $pwdHasher->HashPassword( "YOUR PASS");

 

کدهای بالا طریقه hash کردن پسورد رو نشون میده.حالا برای اینکه بخوایم ببینیم پسورد وارد شده توسط کاربر درسته یا خیر از کدهای زیر استفاده میکنیم :

 

$checked = $pwdHasher->CheckPassword($password, $hash);
if ($checked) {
    echo 'password correct';
} else {
    echo 'wrong credentials';
}

خب مقدار $hash مقداری هست که توی دیتابیس ذخیره شده و مقدار متغیر $pass توسط کاربر وارد میشه.…

ادامه مطلب...

ارسال ایمیل انبوه با سرویس Mailgun در PHP

مرداد ۳, ۱۳۹۳ توسط : سعید

سلام

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

سرویسی که تازه باهاش آشنا شدم سرویس Mailgun.com که یه سرویس ارسال ایمیل مخصوص برنامه نویساست.بعد از ثبت نام در این سایت به شما اجازه ارسال ایمیل با استفاده از api های خودش رو میده.اگر سرویس تون رایگان باشه درماه میتونید ده هزار تا ایمیل بفرستید.بقیه قیمتاش هم توی سایتش هست.…

ادامه مطلب...

کلاس آماده برای نوشتن Regex

اردیبهشت ۹, ۱۳۹۳ توسط : سعید

سلام

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

کلاس VerbalExperssions یک کلاس که دراصل برای زبان جاوااسکریپت نوشته شده و بقیه توسعه دهنده ها اومدن و برای زبانهای مختلف این کلاس رو توسعه دادن. باید خوشحال باشیم که یک کلاس هم برای زبان PHP نوشته شده که در ادامه نحوه کار کرد این کلاس رو میبینیم باهم.

ابتدا کلاس رو از لینک زیر دانلود کنید :

https://github.com/VerbalExpressions/PHPVerbalExpressions/archive/master.zip

بعد از اینکه فایل رو از حالت فشرده خارج کردین کلاس VerbalExpressions.php رو توی مسیر روت قرار بدین.…

ادامه مطلب...

کد آماده :: لود عکسها با jQuery

اسفند ۵, ۱۳۹۲ توسط : سعید

شاید برای شما هم این مشکل پیش اومده باشه که به عنوان مثال برای یک تگ a یک تصویر پس زمینه میذارید و میخواید هنگامی که موس میره روی این تگ تصویر عوض شه.

خب این کار خیلی ساده است :

<a href="" class="post">

</a>

و استایل CSS :

.post{

background:url(1.png)

display:block;

width:24px;

height:24px;
}

و برای hover :

.post:hover{

background:url(2.png)

display:block;

width:24px;

height:24px;
}

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

برای حل این مشکل میتونیم از jQuery کمک بگیریم .…

ادامه مطلب...

اجرای فایل sql روی سرور

اسفند ۱, ۱۳۹۲ توسط : سعید

سلام

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

این رو هم اضافه کنم که هنگامی که دیتابیس رو export میکنید یک فایل با پسوند sql بهتون میده که اگر این فایل رو با نرم افزارهای ویرایش متن باز کنید میبینید که داخلش دستورات sql نوشته شده.

خب بریم سراغ تابع :

<?php

function SplitSQL($file, $delimiter = ';')
{
	$pdo =new PDO ("mysql:host=localhost;dbname=mydb",'root','');
    if (is_file($file) === true)
    {
		$file = fopen($file, 'r');

        if (is_resource($file) === true)
        {
            $query = array();

            while (feof($file) === false)
            {
                $query[] = fgets($file);

                if (preg_match('~' .

ادامه مطلب...

کلاس آماده ساخت متن لورم ایپسوم

دی ۱۳, ۱۳۹۲ توسط : سعید

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

برای حل این مشکل متنی آماده شده که بهش میگن ” لورم ایپسوم ” . توضیحات این متن در ویکیپدیا به صورت زیرنوشته شده :

طرح‌نما یا لورم ایپسوم(به انگلیسی: Lorem ipsum) به متنی آزمایشی و بی‌معنی در صنعت چاپ، صفحه‌آرایی و طراحی گرافیک گفته می‌شود. طراح گرافیک از این متن به عنوان عنصری از ترکیب بندی برای پر کردن صفحه و ارایه اولیه شکل ظاهری و کلی طرح سفارش گرفته شده استفاده می نماید، تا از نظر گرافیکی نشانگر چگونگی نوع و اندازه فونت و ظاهر متن باشد.

ادامه مطلب...

تغییر اندازه تصاویر بوسیله php

مرداد ۵, ۱۳۹۲ توسط : afshin

برای کوچک کردن تصاویر و تبدیل اندازه آن به مقیاس دلخواه راهکارهای زیادی وجود داره ولی در این بخش کلاسی از php را برای شما معرفی می کنم که به راحتی می توان اندازه تصاویر را تغییر داد , خوب بریم سر کد کلاس

    Class resize
    {
    // *** Class variables
    private $image;
    private $width;
    private $height;
    private $imageResized;

    function __construct($fileName)
    {
    // *** Open up the file
    $this->image = $this->openImage($fileName);

    // *** Get width and height
    $this->width = imagesx($this->image);
    $this->height = imagesy($this->image);
    }

    ## --------------------------------------------------------

    private function openImage($file)
    {
    // *** Get extension
    $extension = strtolower(strrchr($file, '.'));

    switch($extension)
    {
    case '.jpg':
    case '.jpeg':
    $img = @imagecreatefromjpeg($file);
    break;
    case '.gif':
    $img = @imagecreatefromgif($file);
    break;
    case '.png':
    $img = @imagecreatefrompng($file);
    break;
    default:
    $img = false;
    break;
    }
    return $img;
    }

    ## --------------------------------------------------------

    public function resizeImage($newWidth, $newHeight, $option="auto")
    {
    // *** Get optimal width and height - based on $option
    $optionArray = $this->getDimensions($newWidth, $newHeight, $option);

    $optimalWidth = $optionArray['optimalWidth'];
    $optimalHeight = $optionArray['optimalHeight'];

    // *** Resample - create image canvas of x, y size
    $this->imageResized = imagecreatetruecolor($optimalWidth, $optimalHeight);
    imagecopyresampled($this->imageResized, $this->image, 0, 0, 0, 0, $optimalWidth, $optimalHeight, $this->width, $this->height);

    // *** if option is 'crop', then crop too
    if ($option == 'crop') {
    $this->crop($optimalWidth, $optimalHeight, $newWidth, $newHeight);
    }
    }

    ## --------------------------------------------------------

    private function getDimensions($newWidth, $newHeight, $option)
    {

    switch ($option)
    {
    case 'exact':
    $optimalWidth = $newWidth;
    $optimalHeight= $newHeight;
    break;
    case 'portrait':
    $optimalWidth = $this->getSizeByFixedHeight($newHeight);
    $optimalHeight= $newHeight;
    break;
    case 'landscape':
    $optimalWidth = $newWidth;
    $optimalHeight= $this->getSizeByFixedWidth($newWidth);
    break;
    case 'auto':
    $optionArray = $this->getSizeByAuto($newWidth, $newHeight);
    $optimalWidth = $optionArray['optimalWidth'];
    $optimalHeight = $optionArray['optimalHeight'];
    break;
    case 'crop':
    $optionArray = $this->getOptimalCrop($newWidth, $newHeight);
    $optimalWidth = $optionArray['optimalWidth'];
    $optimalHeight = $optionArray['optimalHeight'];
    break;
    }
    return array('optimalWidth' => $optimalWidth, 'optimalHeight' => $optimalHeight);
    }

    ## --------------------------------------------------------

    private function getSizeByFixedHeight($newHeight)
    {
    $ratio = $this->width / $this->height;
    $newWidth = $newHeight * $ratio;
    return $newWidth;
    }

    private function getSizeByFixedWidth($newWidth)
    {
    $ratio = $this->height / $this->width;
    $newHeight = $newWidth * $ratio;
    return $newHeight;
    }

    private function getSizeByAuto($newWidth, $newHeight)
    {
    if ($this->height width)
    // *** Image to be resized is wider (landscape)
    {
    $optimalWidth = $newWidth;
    $optimalHeight= $this->getSizeByFixedWidth($newWidth);
    }
    elseif ($this->height > $this->width)
    // *** Image to be resized is taller (portrait)
    {
    $optimalWidth = $this->getSizeByFixedHeight($newHeight);
    $optimalHeight= $newHeight;
    }
    else
    // *** Image to be resizerd is a square
    {
    if ($newHeight getSizeByFixedWidth($newWidth);
    } else if ($newHeight > $newWidth) {
    $optimalWidth = $this->getSizeByFixedHeight($newHeight);
    $optimalHeight= $newHeight;
    } else {
    // *** Sqaure being resized to a square
    $optimalWidth = $newWidth;
    $optimalHeight= $newHeight;
    }
    }

    return array('optimalWidth' => $optimalWidth, 'optimalHeight' => $optimalHeight);
    }

    ## --------------------------------------------------------

    private function getOptimalCrop($newWidth, $newHeight)
    {

    $heightRatio = $this->height / $newHeight;
    $widthRatio = $this->width / $newWidth;

    if ($heightRatio height / $optimalRatio;
    $optimalWidth = $this->width / $optimalRatio;

    return array('optimalWidth' => $optimalWidth, 'optimalHeight' => $optimalHeight);
    }

    ## --------------------------------------------------------

    private function crop($optimalWidth, $optimalHeight, $newWidth, $newHeight)
    {
    // *** Find center - this will be used for the crop
    $cropStartX = ( $optimalWidth / 2) - ( $newWidth /2 );
    $cropStartY = ( $optimalHeight/ 2) - ( $newHeight/2 );

    $crop = $this->imageResized;
    //imagedestroy($this->imageResized);

    // *** Now crop from center to exact requested size
    $this->imageResized = imagecreatetruecolor($newWidth , $newHeight);
    imagecopyresampled($this->imageResized, $crop , 0, 0, $cropStartX, $cropStartY, $newWidth, $newHeight , $newWidth, $newHeight);
    }

    ## --------------------------------------------------------

    public function saveImage($savePath, $imageQuality="100")
    {
    // *** Get extension
    $extension = strrchr($savePath, '.');
    $extension = strtolower($extension);

    switch($extension)
    {
    case '.jpg':
    case '.jpeg':
    if (imagetypes() & IMG_JPG) {
    imagejpeg($this->imageResized, $savePath, $imageQuality);
    }
    break;

    case '.gif':
    if (imagetypes() & IMG_GIF) {
    imagegif($this->imageResized, $savePath);
    }
    break;

    case '.png':
    // *** Scale quality from 0-100 to 0-9
    $scaleQuality = round(($imageQuality/100) * 9);

    // *** Invert quality setting as 0 is best, not 9
    $invertScaleQuality = 9 - $scaleQuality;

    if (imagetypes() & IMG_PNG) {
    imagepng($this->imageResized, $savePath, $invertScaleQuality);
    }
    break;

    // ...

ادامه مطلب...

CSS Reset چیست و چه کاربردی دارد؟

تیر ۵, ۱۳۹۲ توسط : سعید

احتمالا تا به حال با اصطلاح CSS Reset برخورد کرده باشید.شاید قبلا از فایلهایی با این عنوان استفاده کرده باشید.معمولا فایلهایی که با عنوان Css Reset استفاده میکنیم شامل یک سری کدهای CSS هستن که یه سری کار انجام میدن.اما واقعا باید ببینیم این فایل و کدهای داخلش چی هستن و چه کاربردی دارن.

به زبان ساده CSS Reset یک سری کدهای CSS هستن که میان تناقضاتی که بین مرورگرها هست رو برطرف میکنن.مثلا اگر یه صفحه HTML درست کنید و یک متن داخلش قرار بدید میبینید که این متن از کناره های صفحه فاصله داره.این فاصله ممکنه توی مرورگرهای مختلف فرق داشته باشه.

حالا کدهای مربوط به CSS Reset میان و این تناقضات رو رفع میکنن.یکی دونمونه از کدهاشون رو باهم بررسی میکنیم بعد لیستی از فایلهای CSS Reset براتون میذارم تا ازش استفاده کنید.…

ادامه مطلب...

کلاس آماده : خواندن ایمیل ها با php

خرداد ۲۶, ۱۳۹۲ توسط : سعید

سلام

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

بازدید : ۴۴۲۰…

ادامه مطلب...

غیرفعال کردن نمایش خطاهای php با htaccess

خرداد ۱, ۱۳۹۲ توسط : سید داوود فامرینی

سلام

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

امروز براتون یه قطعه کد می زارم که شما باید در فایل htaccess ی که در root پروژه  هست قرار بدید و اگر نبود ایجاد کرده و این کد رو قرار بدید.

# supress php errors
php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
php_value docref_root 0
php_value docref_ext 0

بازدید : ۳۰۲۷…

ادامه مطلب...