برگزیده های پرشین تولز

★★★★ تاپیک جامع سورس کدهای PHP

behnamy

Registered User
تاریخ عضویت
16 می 2013
نوشته‌ها
675
لایک‌ها
463
محل سکونت
At my Gray(!) hat World
سلام دوستان. بهنام هستم و توی این تاپیک قصد دارم سورس کدهای زیادی رو برای زبان اسکریپت نویسی PHP به مرور زمان قرار بدم و تا جایی که بتونم آموزش بدم همراه کدها. بیشتر سعی میشه تکه کدهای کوتاه ولی کاربردی گذاشته بشه تا هم یاد بگیرید هم اگر لازم شد توی پروژه هاتون استفاده کنید. به همین خاطر از آوردن سورس کدهای سنگین یا اسکریپت طولانی که حاوی چند فایل هستن خودداری میشه و فقط کد توی انجمن قرار میگیره و فایلی برای دانلود قرار نمیگیره.


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


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


شرایط و قوانین تاپیک:

1- لطفا از به کار بردن کلمات و جملات زیر خودداری کنید:
دمت گرم داداش، ایول داداش، مرسی، واقعا ممنون، نوکرم مخلصم چاکرم، مرسی خوب بود، بد بود، به درد نمیخوره این زیاد بابا، کارم راه افتاد، عجب کدی و .....
خلاصه که توی این تاپیک فقط قراره توش کد گذاتشه بشه، نه پست های اسپم تشکر یا پست های سوال و جواب و .... لطفا اگر سوالی دارید تاپیک ایجاد کنید و اینجا پست های غیر آموزش و سورس کد چیزی ارسال نکنید.


2- لطفا درخواست کد نکنید اینجا.


3- دوستانی که کد قرار میدن سعی کنن یک توضیح مختصری به فارسی اول بدن و همچنین کدهای خیلی طولانی و یا غیر کاربردی یا کدهایی با هدف های ناپسند قرار ندن. ( همواره به بلک هت نه بگویید! )


4- کدی که اینجا قرار میدید رو حتما داخل تگ PHP بزارید، یعنی به صورت زیر:
کد:
[php]کد این وسط[/php]



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

behnamy

Registered User
تاریخ عضویت
16 می 2013
نوشته‌ها
675
لایک‌ها
463
محل سکونت
At my Gray(!) hat World
کد تست زمان و مصرف رم در پی اچ پی
خب بریم سراغ اولین کد. این کد یک کد ساده هستش که میتونه زمان طول کشیدن اجرای اسکریپت PHP شما و میزان مصرف رم اون رو نشون بده و راحت باهاش بنچ مارک های ساده از اسکریپتتون بگیرید تا بتونید بهینه ترین کد رو بنویسید.
توضیح کد: در ابتدای کار با تابع microtime زمان فعلی unix رو بدست میاریم و اونو توی متغییر $time_start میریزیم. یک تابع هم بعدش با نام convert تعریف کردم که داده های بایتی رو اتوماتیک به اون چیزی که ما انسان ها بهش عادت داریم تبدیل میکنه، مثلا 2048 بایت رو ما میگیم 2 کیلوبایت و خودمون راحت میکنیم! کار این تابع هم همینه.
بعدش هم با کمک تابع memory_get_usage میزان مصرف RAM رو میگیریم ودر متغییری میریزیم. تا اینجای کار، این کدها باید بالای اسکریپتتون باشه و بعد از اینا کدهای اسکریپت خودتون رو بذارید.
در نهایت بعد از کدهای اسکریپتتون کدهای انتهایی این اسکریپت رو بذارید که دوباره بعد از انجام کدهای خودتون میاد ومیزان مصرف رم و مصرف ماکریمم رو میگیره و میریزه توی متغییری، بعدش دوباره زمان میگیره و حالا این زمان جدید رو منهای زمان اولیه میکنه تا زمان مصرف شده برای اجرای اسکریپتتون بدست بیاد! به همین راحتی.
بعدش هم یک تابع usagecolor نوشتم که چیزی خاصی نیست و فقط براساس میزان مصرف رم میاد و رنگ خروجی رو از سبز(برای نرمال) به قرمز تبدیل میکنه تا متوجه بشید یک جای کارتون ایراد داره، باید اون مرز قرمز شدنش رو دیگه خودتون بسته به کاری که میخواین بکنید یا توان سرورتون عوض کنید.
در نهایت هم هه این مصارف رم و زمان اجرای کد رو توی یک جدولی در سمت راست صفحه بهتون نشون میده.

PHP:
<?php

$time_start = microtime(true);

function convert($size)

{

    $unit=array('B','KB','MB','GB','TB','PB');

    return round($size/pow(1024,($i=floor(log($size,1024)))),2).' '.$unit[$i];

}

$initialusage=convert(memory_get_usage());

 

 

// your code here

 

 

 

$peakusage=convert(memory_get_peak_usage());

$finalusage=convert(memory_get_usage());

$time_end = microtime(true);

$time = $time_end - $time_start;

$usagecolorfunctionargu = "";

function usagecolor($usagecolorfunctionargu){

if (strpos($usagecolorfunctionargu,'KB') !== false) {

    return 'green';

}

elseif (strpos($usagecolorfunctionargu,'MB') !== false) {

    return 'red';

}

}

 

echo '<div style="float:right;"><table style="border:1px solid black;">';

echo '<tr><td><strong>Initial Memory:</strong></td><td style="color:'. usagecolor($initialusage) .';">' . $initialusage . '</td></tr>';

echo '<tr><td><strong>Peak Memory:</strong></td><td style="color:'. usagecolor($peakusage) .';">' . $peakusage . '</td></tr>';

echo '<tr><td><strong>Final Memory:</strong></td><td style="color:'. usagecolor($finalusage) .';">' . $finalusage . '</td></tr>';

echo '<tr><td><strong>Time (s):</strong></td><td style="color:';

if($time <1){

    echo 'green';

}

else{

    echo 'red';

}

echo ';">' . round($time, 4) .' seconds' . '</td></tr>';

echo '</table></div>';

 

?>

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

behnamy

Registered User
تاریخ عضویت
16 می 2013
نوشته‌ها
675
لایک‌ها
463
محل سکونت
At my Gray(!) hat World
پیدا کردن تعداد تکرار یک کلمه در متن

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

PHP:
<?php

$text = "salam,salam bazam salam khobi? aval salam kon";

 

echo substr_count($text, "salam") . " occurrences";

?>
 

behnamy

Registered User
تاریخ عضویت
16 می 2013
نوشته‌ها
675
لایک‌ها
463
محل سکونت
At my Gray(!) hat World
کد پی اچ پی جدا کردن متن بر اساس یک کاراکتر یا کلمه به خصوص
همیشه که نباید متنمون رو بر اساس , جدا کنیم :دی توی این مثال میخوایم بر اساس کلمه and جدا کنیم، این مثال خوبیه برای آموزش توابع implode,explode و array_slice
توضیح کد: اول یک متن تعریف میکنیم و اونو توی متغییر میریزیم و سپس این متن رو با کمک تابع explode و بر اساس کلمه and جدا میکنیم و به آرایه تبدیل میکنیم. در نهایت هم به کمک تابع implode این آرایه رو دوباره به رشته معمولی تبدیل میکنیم ولی اینبار در پارامتر دوم این تابع، به کمک تابع array_slice فقط اندیس های یک تا سه این آرایه رو به عنوان آرایه ورودی به تابع implode میدهیم.

PHP:
<?php

$text = "apples and bananas and oranges and pineapples and lemons";

 

$search = " and ";

 

 

$matches = explode($search, $text);

 

echo $matches[0];

echo '<br>';

 

echo implode($search, array_slice($matches, 1, 3));
 

behnamy

Registered User
تاریخ عضویت
16 می 2013
نوشته‌ها
675
لایک‌ها
463
محل سکونت
At my Gray(!) hat World
پیداکردن تعداد بازدید کننده یک سایت بر اساس رتبه الکسا (رتبه جهانی)
یه چند وقت پیش توی تاپیک بحث و گفتگوی وبمسترها بحث در مورد پیدا کردن تعدد بازدید یک سایت بر اساس رتبه الکسا بود که حال نداشتم اونجا توضیح بودم :دی امروز کدش رو اینجا براتون گذاشتم.
این کد براساس فرمولی هستش که یک بنده خدایی بر اساس تجربه و تحقیق خودش بدست آورده پس صد در صد قابل اطمینان نیست، همچنین خود الکسا هم که کلا قابل اطمینان نیست! در نتیجه ممکنه این کد نتیجه درستی نشون نده. همچنین اینم اضافه کنم که این کد برای سایت های زیر رتبه 100 هزار جهانی نتایج درستی نشون میده و برای بالاتر از اون خیلی نتایج پرته!

پ.ن: به عنوان تمرین اگر تونستید تخمین تعداد بازدیدکننده رو از روی رتبه ایران بفهمید یک جایزه شکلات پیش من دارید :D

PHP:
<?php

echo '<!DOCTYPE HTML>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

</head>

<body>

 

<form action="" method="post">

رتبه الکسا شما: <input type="text" name="alexa"><br>

<input type="submit">

</form>

 

</body>

</html>';

if (isset($_POST['alexa'])){

    echo "<hr />";

$rank = $_POST['alexa'];

    echo " بازدیدکننده روزانه";

echo ceil(round(pow($rank,-1.008)*104943144672)/30);

}
 

behnamy

Registered User
تاریخ عضویت
16 می 2013
نوشته‌ها
675
لایک‌ها
463
محل سکونت
At my Gray(!) hat World
آموزش تعیین \ برای ویندوز و یا / برای گنو/لینوکس در پی اچ پی

توضیح کد:
اگر مثل من واسه خودتون یک میکرو فریمورک ساختید و بعضی از پروژه هاتون رو با فریمورک خودتون انجام میدید یکی از اولین کارهایی که باید برای ساخت قلب پروژه تون یا همون فایل config.php که تمام تنظیمات پروژه تون اول از این فایل لود میشه، تنظیم Directory Seperator هستش تا اگر پروژه تون توی سیستم عامل های ویندوز یا انواع یونیکس در نهایت اجرا شد بازم کار کنه که دلیل این کار ما بخاطر همین تفاوت در آدرس دهی در این دو نوع سیستم عامل هستش و توی پروژه تون به جای / یا \ از ثابت DS
(یا بقیه ثابت های دیگه برای هسته سایت یا محل کتابخونه ها) که توی کد زیر تعریف میکنیم در آدرس های موجود توی کد های پی اچ پی خودمون استفاده کنیم.
PHP:
<?php
defined('DS') ? null : define('DS',DIRECTORY_SEPARATOR);
defined('SITE_ROOT') ? null : define('SITE_ROOT' , DS.'Users'.DS.'Sites');
defined('LIB_PATH') ? null : define('LIB_PATH', SITE_ROOT.DS.'Includes');

و درrequire_once ها به عنوان مثال به صورت زیر می نویسیم:
PHP:
require_once(LIB_PATH.DS.'Functions.php');

البته اشتباها فایل های CSS و Html رو اینجوری آدرس دهی نکنید!
 

behnamy

Registered User
تاریخ عضویت
16 می 2013
نوشته‌ها
675
لایک‌ها
463
محل سکونت
At my Gray(!) hat World
آموزش تابع date در پی اچ پی


توضیح کد:
یک چیزی که گاقی اوقات میبینم مخصوصا توی سایت های ایرانی اینه که پایین سایت توی فوتر نوشتن
copyright 2009
سال 2014 هم رو به اتمامه ولی اینا هنوز اون قسمت سایتشون رو درست نکردن!
این یک کد خیلی خیلی ساده هستش که بازم گذاشتم تا کمتر از این سایت ها ببینیم! کارش اینه که تاریخ میلادی رو به صورت دینامیک نشون میده توی هر سالی که باشیم

PHP:
copyright <?php echo date("Y", time()); ?>
 

behnamy

Registered User
تاریخ عضویت
16 می 2013
نوشته‌ها
675
لایک‌ها
463
محل سکونت
At my Gray(!) hat World
آموزش ساخت رمز عبور رندوم در پی اچ پی

اگر میخواین پسورد رندوم بسازید که از همه کاراکتر ها توش استفاده شده باشه و یک پسورد قوی بسازید میتونید از تابع زیر استفاده کنید.
این مثال خوبیه که آموزش توابع substr وstr_shuffle داخلش هست.
در تابع generate_random_password میتونید به عنوان ورودی وقتی صداش میزنید بهش طول پسورد رندومی که میخواین بسازه رو بدید اگر ندید به صورت پیش فرض 8 هستش.

توضیح کد:
ابتدا در تابع، متغییر $chars تمام کاراکتر هایی که میخوایم توی ساخت پسورد اسفاده بشه رو تعیین میکنیم. میتونید کم و زیادش کنید بسته به نیاز خودتون.
کار تابع str_shuffle این هستش که رشته متغیر $chars رو به هم بریزه به صورت رندوم و کاراکترهاش رو جابه جا کنه.
حالا در تابع substr در پارامتر اول ورودیش این متغیر به هم ریخته رو میدیم، پارامتر دومش یعنی 0 یعنی از اول این رشته پارامتر اول شروع کن و پارامتر سوم هم یعنی $length به این معنی هستش که تا تعداد این پارامتر برو جلو و تا اون کاراکتر رو جدا کن. نتیجه این میشه که به صورت رندوم هر دفعه یک سری کاراکتر به تعداد کاراکتر دلخواهمون یا 8 پیش فرض ساخته میشه.
PHP:
<?php
function generate_random_password( $length = 8 ) {
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_-=+;:,.?";
$password = substr( str_shuffle( $chars ), 0, $length );
return $password;
}

$password_with_default_lenght = generate_random_password(); // default length is 8
$password_with_6_character = generate_random_password(6);


echo "random password with default lenght:". $password_with_default_lenght;
echo '<hr>';
echo "random password with given lenght:".$password_with_6_character;
 

behnamy

Registered User
تاریخ عضویت
16 می 2013
نوشته‌ها
675
لایک‌ها
463
محل سکونت
At my Gray(!) hat World
آموزش تابع metaphone در PHP - آموزش تشخیص تشابه املایی

توضیح کد:
تابع Metaphone یکی از انواع تابع های مختلفی هستش که بر اساس الگوریتم آقای Lawrence Philips برای تشخیص تشابه تلفظ کلمات میتونه به کار بره. این تابع در واقع متافون هر رشته رو نتیجه میده.
توی کد زیر هم ما به وسیله یک شرط متافون دو کلمه رو با هم بررسی میکنیم که اگر یکی بودند اون دو تا کلمه شبیه هم هستن و اگر نبودند مشابه نیستند. تا اونجایی هم که من میدونم و اگر اشتباه نکنم این تابع به صورت پیش فرضش فقط برای کلمات انگلیسی هستش. کارهای جالبی میشه با این تابع کرد مثلا ساخت اپلیکشین های تلفظ و یا حتی بهبود سرچ های پیچیده بر اساس شباهت های کلمات!
PHP:
<?php
// Geep va Gip shabih ham hastan
echo (metaphone("Geep") == metaphone("Gip")) ? "reshte ha shabi ham hastan" : "reshte ha shabi ham nistan";
echo "<br>";
// fire va higher shabih ham hastan
echo (metaphone("fire") == metaphone("higher")) ? "reshte ha shabi ham hastan" : "reshte ha shabi ham nistan";
echo "<br>";
// rest va reset shabih ham hastan
echo (metaphone("rest") == metaphone("reset")) ? "reshte ha shabi ham hastan" : "reshte ha shabi ham nistan";
 

behnamy

Registered User
تاریخ عضویت
16 می 2013
نوشته‌ها
675
لایک‌ها
463
محل سکونت
At my Gray(!) hat World
آموزش جدا کردن قسمتی از متن در PHP
آموزش تابع Array_splice
توضیح کد:
یکی از کارهایی که معمولا همیشه توی CMS ها انجام میگیره اینه که یک تعداد کلمه مشخص مثلا 20 کلمه فقط توی متن پست در صفحه اول سایت نشون داده میشه و بعدش یک لینک ادامه مطلب میزارن که ارجاع میده به متن کامل اون پست. این کد زیر همین کار رو میکنه و یک تابع هستش که توی پارامتر اول متنی که میخوایم تعدادی از کلمات از اولش جدا بشه رو بهش میدیم و پارامتر دومش هم تعداد اون کلمات هستش. روند کار اینطوری هستش که ابتدا با تابع explode متن رو براساس فاصله به آرایه تبدیل میکنم، بعد توسط تابع array_splice از اول اون آرایه تا ایندکس شماره x اش رو جدا میکنیم، این x منظورم همون پارامتر دوم تابع یا تعداد کلماتی هستش که میخوایم از اول متن نشون داده بشه. و در نهایت هم توسط تابع implode این آرایه رو براساس همون فاصله دوبراه به رشته معمولی تبدیل می کنیم.
PHP:
<?php
function limitword($string, $limit){
    $words = explode(" ",$string);
    $output = implode(" ",array_splice($words,0,$limit));
    return $output;
}

//mesal estefade dar payin
$string="salam, man behnam hastam. inja anjoman persiantools ast.";
$limited_string = limitword($string, 4);
echo $limited_string;
 

behnamy

Registered User
تاریخ عضویت
16 می 2013
نوشته‌ها
675
لایک‌ها
463
محل سکونت
At my Gray(!) hat World
آموزش لینک کردن آدرس های اینترنتی در PHP
عبارت باقاعده لینک ها
آموزش نوفالو کردن لینک ها
توضیح کد:
معمولا توی یک ادیتوری که یک آدرس اینترنتی رو مینویسید بعدش میبینید که تبدیل به لینک هم شده! یعنی داخل تگ a قرار گرفته! کد زیر همین کار رو میکنه، ابتدا regular expression یک آدرس اینرنتی رو نوشتم، بعدش هم یک متنی که شامل یک آدرس اینترنتی هستش. درانتها توسط تابع preg_match به دنبال اون regex که برای لینک در بالا تعیین کردیم توی متن می گردیم و اگر پیدا شد اون قسمت متن رو داخل تگ a میگذاریم! به همین راحتی!

PHP:
<?php
// Regex yek url
$reg_exUrl = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";

// matn shoma
$text = "text shoma hamrah ba URL i ke mikhahid link shavad http://forum.persiantools.com";

// Check if there is a url in the text
if(preg_match($reg_exUrl, $text, $url)) {

       // link kardan url ha
       echo preg_replace($reg_exUrl, '<a href="'.$url[0].'" rel="nofollow">'.$url[0].'</a>', $text);

} else {
       echo $text;

}
?>
 

behnamy

Registered User
تاریخ عضویت
16 می 2013
نوشته‌ها
675
لایک‌ها
463
محل سکونت
At my Gray(!) hat World
آموزش بررسی سلامت لینک عکس ها در PHP

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

PHP:
$Image_link = 'www.google.com/image.jpg';
if (@GetImageSize($Image_link) ) {
echo "link valid ast";
} else {
echo "link moshkel darad";
}
 

behnamy

Registered User
تاریخ عضویت
16 می 2013
نوشته‌ها
675
لایک‌ها
463
محل سکونت
At my Gray(!) hat World
آموزش پیداکردن اولین جمله متن در php
آموزش تابع strtok و strrev

توضیح کد:
اگر بخواین اولین جمله یک متن یا آخرین جمله رو پیدا کنید یک راهش اینه که با regex اون چیزی که میخواین رو تعیین کنید و بعد بیفتین دنبالش توی متن! راه ساده ترش هم این کد زیر هستش که با کمک تابع srttok و سه کاراکتر .؟! که معمولا جداکننده جمله ها هستن، این کار رو انجام بدیم.

نکته: حالا که بحث regex شد این نکته رو خارج از بحث بگم که هیچ وقت با regex روی html کار نکنید! به هیچ وجه! چون همیشه جواب نمیده. بلکه باید توسط tidy اول کل کدها رو تمیز کنید و بعد چیزایی رو که میخواین خروجی بگیرید.
PHP:
<?php
$text = "This is the first sentence of this text! Is not here the persiantools forums? And this is the last sentence.";
$firstSentence = strtok($text, ".?!");
echo '<strong>First Sentence: </strong>' .$firstSentence . '<br>';


$lastSentence = strrev(strtok(strrev(trim($text)), ".?!"));
echo '<strong>Last Sentence: </strong>' .$lastSentence;
 

behnamy

Registered User
تاریخ عضویت
16 می 2013
نوشته‌ها
675
لایک‌ها
463
محل سکونت
At my Gray(!) hat World
آموزش جلوگیری از اجرای اسکریپت از طریق آدرس در پی اچ پی

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

PHP:
if (php_sapi_name() !='cli') exit;

روش دوم:
PHP:
  if (!isset($_SERVER["argc"]) || !$_SERVER["argc"])
 {
 echo "in file bayad az command line ejra beshe.";
 exit();
 }


پ.ن: اگر شما کرون جابتون به غیر از حالتی هستش که مسقیم به فایل اسکریپت کرون جاب میدید، مثلا از روش های wget یا curl استفاده میکنید، به جای کد اول از کد زیر استفاده کنید:

PHP:
 if ($_SERVER['HTTP_USER_AGENT'] != 'yourSecretAgent') exit;
به طور مثال اون قسمت yourSecretAgent رو باید اینجوری بگید توی کرون جاب:
wget -O - --user-agent=“yourSecretAgent” http://example.com/your_script.php


پ.ن 2: Interface های زیاد دیگه ای واسه php_sapi وجود داره، پیشنهاد میکنم لینک زیر رو از سایت پی اچ پی بخونید، مخصوصا کامنت اول رو تا جریان رو متوجه بشید:
http://php.net/manual/en/function.php-sapi-name.php
 

behnamy

Registered User
تاریخ عضویت
16 می 2013
نوشته‌ها
675
لایک‌ها
463
محل سکونت
At my Gray(!) hat World
آموزش پاک کردن خود فایل بعد از اجرا شدن در پی اچی پی

توضیح کد:
امروز یک کد یک خطی و به شدت ساده رو واستون میگذارم، بیشتر هدفم اینه که بدونید چنین چیزی وجود داره و فکر کنید چه کارایی بارایی باهاش میشه کرد.
کارای امنیتی خیلی میشه کرد یا مثلا اگر دیده باشید بعضی موقع ها که اسکریپتی رو میخواین نصب کنید، دفعه اول که اسکریپت رو اجرا میکنید مراحل نصب هستش و ازتون اطلاعات دیتابیس و این چیزا رو میپرسه و بعدش که نصب تموم میشه دیگه هیچ وقت این صفجه نصب رو نمی بینید و خود اسکریپت اصلی رو میبنید! کار کد زیر اینه که خود فایل جاری رو پاک میکنه! آخر اسکریپتتون استفاده کنید و با یک چک کردن اینکه آیا کار اسکریپت انجام شده یا نه و بعدش فایل رو پاک کنید.
PHP:
<?php unlink(__FILE__); ?>
 

soroush_tayyebi

Registered User
تاریخ عضویت
15 می 2009
نوشته‌ها
513
لایک‌ها
110
سن
32
محل سکونت
Tehran
با استفاده از کد زیر میتونید یک فایل زیپ شده رو توسط php از زیپ در بیارید .
PHP:
    function unzip($location,$newLocation){
        if(exec("unzip $location",$arr)){
            mkdir($newLocation);
            for($i = 1;$i< count($arr);$i++){
                $file = trim(preg_replace("~inflating: ~","",$arr[$i]));
                copy($location.'/'.$file,$newLocation.'/'.$file);
                unlink($location.'/'.$file);
            }
            return TRUE;
        }else{
            return FALSE;
        }
    }
?>
نحوه استفاده :
PHP:
<?php
include 'functions.php';
if(unzip('zipedfiles/test.zip','unziped/myNewZip'))
    echo 'Success!';
else
    echo 'Error';
؟>

این تابع برای چک کردن صحیح بودن ایمیل هستش:

PHP:
function is_valid_email($email, $test_mx = false)  
{  
    if(eregi("^([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4})$", $email))  
        if($test_mx)  
        {  
            list($username, $domain) = split("@", $email);  
            return getmxrr($domain, $mxrecords);  
        }  
        else 
            return true;  
    else 
        return false;
}

نمایش زمان باز شدن یک صفحه یا اجرای یک دستورالعمل
PHP:
$start=microtime(true);
sleep(5);
$end=microtime(true);
echo number_format($end-$start,2);

با استفاده از این تیکه کد میتونید سورس یه سایت رو تو سایتون نشون بدید (مثل view source در مرورگرها)
PHP:
< ?php // display source code
$lines = file('http://google.com/'); // pick teh url
foreach ($lines as $line_num => $line) { 
    // loop thru each line and prepend line numbers
    echo "Line #<b>{$line_num}</b> : " . htmlspecialchars($line) . "\n";
}

تغییر سطح دسترسی :

PHP:
< ?php
  function chmod_R($path, $filemode) 
{
  $dh = opendir($path);
while ($file = readdir($dh)) {if($file != '.' && $file != '..')
 {
$fullpath = $path.'/'.$file;echo 'chmod ' .$filemode.' '.$fullpath. "<br />";
chmod($fullpath, $filemode);
echo '<br />';
if(is_dir($fullpath)) 
{  chmod_R($fullpath, $filemode);  
}
}
}
  closedir($dh);
}
  chmod_R('.', 0755);
?>

تابعی ساده برای گرفتن whois :
PHP:
< ?
function whois($domain, $server="www.geektools.com")
{ 
$fp = fsockopen ($server, 43, &$errnr, &$errstr) or die("$errno: $errstr");
fputs($fp, "$domain\n");
while (!feof($fp))
echo fgets($fp, 2048);
fclose($fp); 
} 
 ?>

سلام
با استفاده از تیکه کد زیر می تونید صحت یک آی پی آدرس رو چک کنید (مثل چک کردن صحت ایمیل و ...)
PHP:
    $string = "255.255.255.255";
    if (preg_match(
    '/^(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:[.](?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}$/',
    $string)) {
    echo "IP is good.";
    }
توی $string مقدار آی پی که میخواهید چک شود را وارد کنید

با کردن فایل tar با PHP
PHP:
< ?php
 
function untar($tarfile,$outdir=\"./\",$chmod=null) {
$TarSize = filesize($tarfile);
$TarSizeEnd = $TarSize - 1024;
if($outdir!=\"\"&&!file_exists($outdir)) {
    mkdir($outdir,0777); }
$thandle = fopen($tarfile, \"r\");
while (ftell($thandle)<$TarSizeEnd) {
    $FileName = $outdir.trim(fread($thandle,100));
    $FileMode = trim(fread($thandle,8));
    if($chmod===null) {
        $FileCHMOD = octdec(\"0\".substr($FileMode,-3)); }
    if($chmod!==null) {
        $FileCHMOD = $chmod; }
    $OwnerID = trim(fread($thandle,8));
    $GroupID = trim(fread($thandle,8));
    $FileSize = octdec(trim(fread($thandle,12)));
    $LastEdit = trim(fread($thandle,12));
    $Checksum = trim(fread($thandle,8));
    $FileType = trim(fread($thandle,1));
    $LinkedFile = trim(fread($thandle,100));
    fseek($thandle,255,SEEK_CUR);
    if($FileType==\"0\") {
        $FileContent = fread($thandle,$FileSize); }
    if($FileType==\"1\") {
        $FileContent = null; }
    if($FileType==\"2\") {
        $FileContent = null; }
    if($FileType==\"5\") {
        $FileContent = null; }
    if($FileType==\"0\") {
        $subhandle = fopen($FileName, \"a+\");
        fwrite($subhandle,$FileContent,$FileSize);
        fclose($subhandle); 
        chmod($FileName,$FileCHMOD); }
    if($FileType==\"1\") {
        link($FileName,$LinkedFile); }
    if($FileType==\"2\") {
        symlink($LinkedFile,$FileName); }
    if($FileType==\"5\") {
        mkdir($FileName,$FileCHMOD); }
    //touch($FileName,$LastEdit);
    if($FileType==\"0\") {
        $CheckSize = 512;
        while ($CheckSize<$FileSize) {
            if($CheckSize<$FileSize) {
            $CheckSize = $CheckSize + 512; } }
        $SeekSize = $CheckSize - $FileSize;
        fseek($thandle,$SeekSize,SEEK_CUR); } }
    fclose($thandle); 
    return true; } 
?>

با استفاده از تکه کد زیر https بودن یا نبودن رو چک کنید.
PHP:
if ($_SERVER['HTTPS'] != "on") { 
    echo "This is not HTTPS";
}else{
    echo "This is HTTPS";
}

کپی کردن یک فایل از آدرس درون هاست (دانلود یک فایل)
PHP:
function copy_file($url,$filename){
   
    $file = fopen($url, "rb");
   
    if(!$file) return false; else {
        $fc = fopen($filename, "wb");
   
        while(!feof($file)) {
            $line = fread($file, 1028);
            fwrite($fc,$line);
        }
   
        fclose($fc);
        return true;
    }
}

با استفاده از کد زیر میتونید Gravatar رو نمایش بدید.

PHP:
function show_gravatar($email, $size, $default, $rating)
{
    echo '<img src="http://www.gravatar.com/avatar.php?gravatar_id='.md5($email).
        '&default='.$default.'&size='.$size.'&rating='.$ra  ting.'" width="'.$size.'px"
        height="'.$size.'px" />';
}

سلام توسط تکه کد زیر می توانید قدرت یک پسورد رو از نظر امنیتی توسط PHP بررسی کنید و نمایش دهید.
PHP:
 < ?php
function password_strength($string){
  $h  = 0;
  $size = strlen($string);
  foreach(count_chars($string, 1) as $v){
  $p = $v / $size;
  $h -= $p * log($p) / log(2);
  }
  $strength = ($h / 4) * 100;
  if($strength > 100){
  $strength = 100;
  }
  return $strength;
}

var_dump(password_strength("Test For Password Data"));
echo "<br />";
var_dump(password_strength("soroush tayyebi Iran"));
echo "<br />";
var_dump(password_strength("Tr0ub4dor&3"));
echo "<br />";
var_dump(password_strength("tinamo123"));
echo "<br />";
var_dump(password_strength("soroush"));
?>
 
Last edited by a moderator:

MOHAMMAD026_1

مدیر بخش ویژه وب مستر
مدیر انجمن
تاریخ عضویت
16 ژوئن 2014
نوشته‌ها
5,051
لایک‌ها
8,680
محل سکونت
ROOT
جلوگیری از حملات XSS (تزریق کد)

توضیح کد:
تزریق کد عبارت‌ است از بهره‌جویی از باگ‌های یک سامانهٔ رایانه‌ای که منجر به اجرایِ کد‌های ناخواسته در سامانه می‌شود. رخنه‌گر با استفاده از حملات تزریق می‌تواند مسیر برنامه را به سمتی که می‌خواهد تغییر دهد.
یکی از زمینه‌سازهای رایج برای حمله‌های تزریق کد اعتماد نابجای توسعه‌دهندگان نرم‌افزارها به ورودی کاربران است که در پی آن حمله‌کننده با سوءاستفاده از این موضوع کد خود را در کنار ورودی کاربر جاسازی می‌کند.
PHP:
function xss_clean($data)
{
        // Fix &entity\n;
        $data = str_replace(array('&amp;','&lt;','&gt;'), array('&amp;amp;','&amp;lt;','&amp;gt;'), $data);
        $data = preg_replace('/(&#*\w+)[\x00-\x20]+;/u', '$1;', $data);
        $data = preg_replace('/(&#x*[0-9A-F]+);*/iu', '$1;', $data);
        $data = html_entity_decode($data, ENT_COMPAT, 'UTF-8');

        // Remove any attribute starting with "on" or xmlns
        $data = preg_replace('#(<[^>]+?[\x00-\x20"\'])(?:on|xmlns)[^>]*+>#iu', '$1>', $data);

        // Remove javascript: and vbscript: protocols
        $data = preg_replace('#([a-z]*)[\x00-\x20]*=[\x00-\x20]*([`\'"]*)[\x00-\x20]*j[\x00-\x20]*a[\x00-\x20]*v[\x00-\x20]*a[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu', '$1=$2nojavascript...', $data);
        $data = preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*v[\x00-\x20]*b[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu', '$1=$2novbscript...', $data);
        $data = preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*-moz-binding[\x00-\x20]*:#u', '$1=$2nomozbinding...', $data);

        // Only works in IE: <span style="width: expression(alert('Ping!'));"></span>
        $data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?expression[\x00-\x20]*\([^>]*+>#i', '$1>', $data);
        $data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?behaviour[\x00-\x20]*\([^>]*+>#i', '$1>', $data);
        $data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:*[^>]*+>#iu', '$1>', $data);

        // Remove namespaced elements (we do not need them)
        $data = preg_replace('#</*\w+:\w[^>]*+>#i', '', $data);

        do
        {
                // Remove really unwanted tags
                $old_data = $data;
                $data = preg_replace('#</*(?:applet|b(?:ase|gsound|link)|embed|frame(?:set)?|i(?:frame|layer)|l(?:ayer|ink)|meta|object|s(?:cript|tyle)|title|xml)[^>]*+>#i', '', $data);
        }
        while ($old_data !== $data);

        // we are done...
        return $data;
}

نحوه استفاده:
ابتدا تابع بالا رو در فایل قرار میدهید و سپس بصورت زیر فراخوانی میکنید:
PHP:
$data = "Testing for <script>alert(document.cookie);</script> Crosssite scripting";
echo xss_clean($data);

پ.ن: تاپیک مهم شد :general601:
انشالا که شاهد فعالیت مجدد آقا بهنام و دوستان دیگر باشیم.
 

Quen

کاربر فعال هنرهای نمایشی
کاربر فعال
تاریخ عضویت
10 دسامبر 2009
نوشته‌ها
2,199
لایک‌ها
3,805
محل سکونت
شهر گناه
اگه توی سایتتون از سیستم های پرداخت و یا پیامکی استفاده می کنید حتما دیدید که اکثر وب سرویسها و API ها با اعداد فارسی مشکل دارن. این تابع PHP خیلی آسون و سریع همه اعداد فارسی را به هر دو صورت ٤٥٦ و ۴۵۶ به اعداد لاتین (456) تبدیل می کنه: (مثلا تبدیل شماره موبایل جهت ارسال به وب سرویس SMS)

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

PHP:
function fa_num_to_en_num($text_phone) {
    $persian_1 = array('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹');
    $persian_2 = array('٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩');
    $en_num = range(0, 9);
    $text_phone = str_replace($persian_1, $en_num, $text_phone);
    return str_replace($persian_2, $en_num, $text_phone);
}
 

soroush_tayyebi

Registered User
تاریخ عضویت
15 می 2009
نوشته‌ها
513
لایک‌ها
110
سن
32
محل سکونت
Tehran
یه کد ساده نوشتم برای اتصال و آپلود فایل توسط اف تی پی (FTP) و پی اچ چی (PHP)
PHP:
// FTP access parameters
$host = 'ftp.tinamo.ir';
$usr = 'SomeUsername';
$pwd = 'SomePassword';

// file to move:
$local_file = './soroush.txt';
$ftp_path = '/data/soroush.txt';

// connect to FTP server (port 21)
$conn_id = ftp_connect($host, 21) or die ("Cannot connect to host");

// send access parameters
ftp_login($conn_id, $usr, $pwd) or die("Cannot login");

// turn on passive mode transfers (some servers need this)
// ftp_pasv ($conn_id, true);

// perform file upload
$upload = ftp_put($conn_id, $ftp_path, $local_file, FTP_ASCII);

// check upload status:
print (!$upload) ? 'Cannot upload' : 'Upload complete';
print "\n";

/*
** Chmod the file (just as example)
*/

// If you are using PHP4 then you need to use this code:
// (because the "ftp_chmod" command is just available in PHP5+)
if (!function_exists('ftp_chmod')) {
function ftp_chmod($ftp_stream, $mode, $filename){
return ftp_site($ftp_stream, sprintf('CHMOD %o %s', $mode, $filename));
}
}

// try to chmod the new file to 666 (writeable)
if (ftp_chmod($conn_id, 0666, $ftp_path) !== false) {
print $ftp_path . " chmoded successfully to 666\n";
} else {
print "could not chmod $file\n";
}

// close the FTP stream
ftp_close($conn_id);
 

soroush_tayyebi

Registered User
تاریخ عضویت
15 می 2009
نوشته‌ها
513
لایک‌ها
110
سن
32
محل سکونت
Tehran

اجبار کاربر به دانلود یک فایل با PHP
با سلام
توسط این کد می‌تونید کاربر رو مجبور به دانلود یک فایل داخل صفحه بکنید. البته تو این تکه کد اطلاعات فایل از داخل دیتابیس خوانده می‌شه:
PHP:
<?php
   $filename = $_GET['file']; //Get the fileid from the URL
// Query the file ID
$query = sprintf("SELECT * FROM tableName WHERE id = '%s'",mysql_real_escape_string($filename));
$sql = mysql_query($query);
if(mysql_num_rows($sql) > 0){
    $row = mysql_fetch_array($sql);
    // Set some headers
    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Content-Type: application/force-download");
    header("Content-Type: application/octet-stream");
    header("Content-Type: application/download");
    header("Content-Disposition: attachment; filename=".basename($row['FileName']).";");
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: ".filesize($row['FileName']));

    @readfile($row['FileName']);
    exit(0);
}else{
    header("Location: /");
    exit;
}
?>
 
بالا