loading...
طراحی وب سایت

hadi بازدید : 3 چهارشنبه 20 شهریور 1392 نظرات (0)

? تابع سودمند Php

 

بعد از مدتها کار با php ممکنه هنوز توابعي باشن که باهاشون برخورد نکرديم و نميدونيم چنين توابعي هم وجود دارن که ميتونن کار

 

مارو راحتتر کنن.در زير اشاره اي ميکنم به ? عدد از توابع مفيدي که ممکنه خيلي ها هنوز بهش بر نخورده باشن.

 

?- توابعي با تعداد آرگومانهاي دلخواه

ممکنه قبلا شما توابعي نوشته باشين که به تعداد دلخوله ميتنين آرگومان بهش پاس بدين اما تابعي توي php وجود داره که به شما

 

اجازه ميده توابعي بسازيد طراحی وب سایت که تعداد آرگومانها به صورت واقعي دلخواه هستند.

در ابتدا يک مثال از تابعي ميزم که ميتونه تعداد آرگ.مانهاي دلخواه رو بهش پاس بديد

 

// yes, the argument list can be empty

function foo() {

 

// returns an array of all passed arguments

$args = func_get_args();

 

foreach ($args as $k => $v) {

echo "arg".($k+1).": $vn";

}

}

 

foo();

/* prints nothing */

foo('hello');

/* prints

arg1: hello

*/

 

foo('hello', 'world', 'again');

/* prints

arg1: hello

arg2: world

arg3: again

*/

حالا شما با تابع func_get_args() به تعداد دلخواه ميتونيد به توابعتون آرگومان بفرستيد و توي تابع ازش استفاده کنيد.

?-استفاده از تابع glob() براي پيدا کردن فايلها :

تابع glob() براي پيدا کردن فايلها با استفاده از يک الگوي خاص ميتونه به شما کمک کنه :

 

// get all php files

$files = glob('*.php');

 

print_r($files);

/* output looks like:

Array

(

[0] => phptest.php

[1] => pi.php

[2] => post_output.php

[3] => test.php

)

*/

 

شما ميتونيد چند نوع فايل مختلف رو جستجو کنيد

1

$files = glob('*.{php,txt}', GLOB_BRACE);

 

print_r($files);

/* output looks like:

Array

(

[0] => phptest.php

[1] => pi.php

[2] => post_output.php

[3] => test.php

[4] => log.txt

[5] => test.txt

)

*/

 

و يا يه مسير بهش بديد :

1

$files = glob('../images/a*.jpg');

print_r($files);

/* output looks like:

Array

(

[0] => ../images/apple.jpg

[1] => ../images/art.jpg

)

*/

 

براي گرفتن مسير واقعي فايلها هم ميتونيد ازrealpath()  تابع  استفاده کنيد :

1

$files = glob('../images/a*.jpg');

 

// applies the function to each array element

$files = array_map('realpath',$files);

 

print_r($files);

/* output looks like:

Array

(

[0] => C:wampwwwimagesapple.jpg

[1] => C:wampwwwimagesart.jpg

)

*/

3- مقدار حافظه استفاده شده :

 

وقتي شما بدونيد که برنامه اي که نوشتيد چقدر از فضاي حافظه رو اشغال ميکنه بهتر ميتونيد برنامه خودتون رو بهينه کنيد.

پي اچ پي يک طراحی وب سایت  مديريت حافظه و GC قوي داره.مقدار فضايي که اسکريپت شما در حافظه اشغال ميکنه ميتونه روي سرعت اجراي برنامه

 

تاثير گذار باشه.ما ميتونيم از تابع memory_get_usage() براي مقدار حافشه مصرفي و از تابع memory_get_peak_usage() براي اطلاع

 

از بيشترين حافظه مصرفي در اسکريت استفاده کنيم.

 

echo "Initial: ".memory_get_usage()." bytes n";

/* prints

Initial: 361400 bytes

*/

 

// let's use up some memory

for ($i = 0; $i < 100000; $i++) {

$array []= md5($i);

}

 

// let's remove half of the array

for ($i = 0; $i < 100000; $i++) {

unset($array[$i]);

}

 

echo "Final: ".memory_get_usage()." bytes n";

/* prints

Final: 885912 bytes

*/

 

echo "Peak: ".memory_get_peak_usage()." bytes n";

/* prints

Peak: 13687072 bytes

*/

4-مقدار استفاده از CPU

براي اينکار از تابع getrusage() استفاده ميکنيم.اسن تابع روي سرور هاي ويندوز جواب نميده.

 

print_r(getrusage());

/* prints

Array

(

[ru_oublock] => 0

[ru_inblock] => 0

[ru_msgsnd] => 2

[ru_msgrcv] => 3

[ru_maxrss] => 12692

[ru_ixrss] => 764

[ru_idrss] => 3864

[ru_minflt] => 94

[ru_majflt] => 0

[ru_nsignals] => 1

[ru_nvcsw] => 67

[ru_nivcsw] => 4

[ru_nswap] => 0

[ru_utime.tv_usec] => 0

[ru_utime.tv_sec] => 0

[ru_stime.tv_usec] => 6269

[ru_stime.tv_sec] => 0

)

*/

5- ثابتهاي جادويي!

 

Php ثابتهاي بسيار مفيدي استفاده ميکنه که در زير يه تعدادي رو براتون ميذارم :

__LINE__ خط فعلي برنامه

__FILE__ مسير فايل

__DIR__ مسير دايرکتوري فايل جاري

__FUNCTION__ نام تابع جاري

__CLASS__ نام کلاس جاري

__METHOD__ نام متد جاري

__NAMESPACE__ فضاي نام جاري

 

// this is relative to the loaded script's path

// it may cause problems when running scripts from different directories

require_once('config/database.php');

 

// this is always relative to this file's path

// no matter where it was included from

require_once(dirname(__FILE__) . '/config/database.php');

6-ساخت يک شناسه منحصر به فرد :

گاهي اوقات ممکنه شما بخوايد يک رشته منحصر به فرد درست کنيد.پي اچ پي يک تابع با نام uniqid() براي همين کار در اختيار ما گذاشته :

 

// generate unique string

echo uniqid();

/* prints

4bd67c947233e

*/

 

// generate another unique string

echo uniqid();

/* prints

4bd67c9472340

*/

اگر توجه کنيد ميبينيد که ابتداي رشته هاي ايجاد شده مثل هم هستند.اين به دليله که تابع uniqid() براي ساخت چنين رشته هايي از زمان سيستم استفاده ميکنه.

براي اينکه امکان شباهت دوتا رشته رو کم کنيم ميتونيم يک پيشوند به تابع پاس بديم.

 

// with prefix

echo uniqid('foo_');

/* prints

foo_4bd67d6cd8b8f

*/

 

// with more entropy

echo uniqid('',true);

/* prints

4bd67d6cd8b926.12135106

*/

 

// both

echo uniqid('bar_',true);

/* prints

bar_4bd67da367b650.43684647

*/

7-Serialization

 

آيا تا حالا نياز داشتيد که يک متغير پيچيده رو توي فايل يا ديتابيس ذخيره کنيد؟ لازم نيست با يک راه حل فانتزي يک آرايه رو به رشته

 

قالب بندي شده تبديل کنيد.بااستفاده از تابع serialize() وunserialize() به راحتي ميتونيد اين کارو انجام بديد :

 

// a complex array

$myvar = array(

'hello',

42,

array(1,'two'),

'apple'

);

 

// convert to a string

$string = serialize($myvar);

 

echo $string;

/* prints

a:4:{i:0;s:5:"hello";i:1;i:42;i:2;a:2:{i:0;i:1;i:1;s:3:"two";}i:3;s:5:"apple";}

*/

 

// you can reproduce the original variable

$newvar = unserialize($string);

 

print_r($newvar);

/* prints

Array

(

[0] => hello

[1] => 42

[2] => Array

(

[0] => 1

[1] => two

)

 

[3] => apple

)

*/

اين دوتا تابع از توابع بومي پي اچ هستن.اما از وقتي که JSON مجبوب تر شده دوتاتابع ديگه هم به پي اچ پي اضافه شد که

 

json_encode() و json_decode() نام دارن که توابع بسيار مفيدي هستند.

 

// a complex array

$myvar = array(

'hello',

42,

array(1,'two'),

'apple'

);

 

// convert to a string

$string = json_encode($myvar);

 

echo $string;

/* prints

["hello",42,[1,"two"],"apple"]

*/

 

// you can reproduce the original variable

$newvar = json_decode($string);

 

print_r($newvar);

/* prints

Array

(

[0] => hello

[1] => 42

[2] => Array

(

[0] => 1

[1] => two

)

 

[3] => apple

)

*/

اين توابع خيلي بهتر از دوتا تابع قبلي هستن چون با جاوااسکريپت و بيشتر زبانهاي برنامه نويسي ديگه سازگارن.

?-فشرده سازي رشته ها

وقتي بحث از فشرده سازي ميشه ما معمولا فايلها به ذهنمون مياد.اين امکان در پي اچ پي وجود داره که بشه رشته هارو به حالت

 

فشرده در آورد.

در مثال زير ما از دوتا تابع gzcompress() و gzuncompress() براي اين کار استفاده ميکنيم :

 

$string =

"Lorem ipsum dolor sit amet, consectetur

adipiscing elit. Nunc ut elit id mi ultricies

adipiscing. Nulla facilisi. Praesent pulvinar,

sapien vel feugiat vestibulum, nulla dui pretium orci,

non ultricies elit lacus quis ante. Lorem ipsum dolor

sit amet, consectetur adipiscing elit. Aliquam

pretium ullamcorper urna quis iaculis. Etiam ac massa

sed turpis tempor luctus. Curabitur sed nibh eu elit

mollis congue. Praesent ipsum diam, consectetur vitae

ornare a, aliquam a nunc. In id magna pellentesque

tellus posuere adipiscing. Sed non mi metus, at lacinia

augue. Sed magna nisi, ornare in mollis in, mollis

sed nunc. Etiam at justo in leo congue mollis.

Nullam in neque eget metus hendrerit scelerisque

eu non enim. Ut malesuada lacus eu nulla bibendum

id euismod urna sodales. ";

 

$compressed = gzcompress($string);

 

echo "Original size: ". strlen($string)."n";

/* prints

Original size: 800

*/

 

echo "Compressed size: ". strlen($compressed)."n";

/* prints

Compressed size: 418

*/

 

// getting it back

$original = gzuncompress($compressed);

با اين توابع ما ميتونيم حدود ??% از حجم يک رشته رو کم کنيم.همچين توابع gzencode() و gzdecode()با يک الگوريتم ديگه ميتونن

 

همين مقدار از حجم رشته هارو فشرده کنن.

?- register_shutdown_function()

 

تابع register_shutdown_function() ميتونيد تعيين کنيد قبل از اينکه اسکريپت شما به اتمام برسه چه تابعي اجرا بشه.اما اگر

 

اسکريپت شما با دستور exit به پايان برسه يا يک خطا رخ بده ويا برنامه به وسيله کاربر متوقف بشه (باکليک روي دوکمه stop مرورگر )

 

$start_time = microtime(true);

 

register_shutdown_function('my_shutdown');

 

// do some stuff

// ...

 

function my_shutdown() {

global $start_time;

 

echo "execution took: ".

(microtime(true) - $start_time).

" seconds.";

}

ارسال نظر برای این مطلب

کد امنیتی رفرش
اطلاعات کاربری
  • فراموشی رمز عبور؟
  • آرشیو
    آمار سایت
  • کل مطالب : 14
  • کل نظرات : 0
  • افراد آنلاین : 1
  • تعداد اعضا : 0
  • آی پی امروز : 17
  • آی پی دیروز : 1
  • بازدید امروز : 20
  • باردید دیروز : 0
  • گوگل امروز : 0
  • گوگل دیروز : 0
  • بازدید هفته : 20
  • بازدید ماه : 22
  • بازدید سال : 24
  • بازدید کلی : 236