php یک زبان open-source و اسکریپتی برای هدف های عمومی می باشد که اساسا برای تولید صفحات داینامیک وب استفاده می شود. php یکی از اولین زبان های server-side scripting (تکنیک استفاده از script ها به صورت نهفته در کد های HTML ) می باشد .
کد ها به وسیله ی وب سرور با php processor تفسیر می شوند و صفحات وب را نتیجه می دهند.
زبان php برای توسعه ی وب سرور ها ، و همچنین به صورت shell مستقل در خیلی از سیستم عامل ها و platform های بدون تغییر.
نرم افزار هایی که از php استفاده می کنند عبارت اند از : Wordpress- MediaWiki -Joomla - Drupal
php اساسا کوتاه شده ی عبارت Personal Home Page می باشد ولی آن را به php را به PHP Hypertext Preprocessor هم نسبت می دهند.
سادگی استفاده از زبان php و شباهت آن به زبان های C و Perl باعث شده اغلب برنامه نویسان با تجربه در کوتاه ترین زمان ممکن برنامه های کامل و قدرتمندی ایجاد کنند.
می توان از PHP-GTK برای طراحی برنامه هایی با ظاهر گرافیکی(GUI) استفاده کرد.
تاریخچه
توسعه ی php در سال 1994 شروع شد توسط برنامه نویس ای به نام Rasmus lerdof . یک مجموعه از اسکریپت های پرل را نگهداری صفحات شخصی خود به وجود آورد.اسکریپت ها وظایفی مثل نمایش resume او و یا ثبت ترافیک web page اش.
او این اسکریپت ها را مثل زبان C به صورت باینری بازنویسی کرد و آن را گسترش داد که بتوانند از web form ها استفاده کنند و با پایگاه داده ارتباط داشته باشند و آن را PHP/FI نامیدند. از PHP/FI برای تولید آسان و پویای وب اپلیکیشن استفاده می شد. lordof توسعه ی php را با ورژن 1.0 در سال 1995 رها کرد تا آن را بهبود ببخشد و اشکالات آن را برطرف کند و این کار باعث به وجود آمدن ورژن دوم php شد که هم اکنون هم استفاده می شود. ترکیب آن مثل پرل بود اما ساده تر ، پایدار تر و محدود تر .
Zeev Suraski و Andi Gutmans دو توسعه دهنده فناوری IIT در اسرائیل بودند که پارسر را در سال 1997 دوباره نوشتند و اساس php3 را تشکیل دادند و نام آن را به دوباره به php تغییر دادند.این دو نفر گروهی را برای بازنویسی پی اچ پی تشکیل دادند و در سال 1999 Zend Engine را تولید کردند.
در۲۲ ماه می۲۰۰۰ پی اچ پی ۴ که توسط موتور زند روی کار آمده بود منتشر شد. در۱۳ ژوئیه ۲۰۰۴ پی اچ پی ۵ که توسط ماشین Zend2 نیرو گرفته بود منتشر شد. پی اچ پی ۵ دارای ویژگیهایی مانند پشتیبانی از زبان شیٴ گرا (برای پایگاه داده) و وسعت بسیار زیاد در کاراییاش شده بود. پی اچ پیی که اخیرا توسط گروه پی اچ پی منتشر شده نسخه ۴ آن است. در آگوست ۲۰۰۸ این نسخه به ۴٫۴٫۹ توسعه یافت.
امنیت
حدود 30% از آسیب پذیزی هایی که در دیتابیس جهانی آمده است به php منتسب می شود.دلیل عدم رعایت قوانین برنامه نویسی می باشد .در واقع درصد خلیلی کمی از این مشکل به اصل زبان و تکنیک های امنیتی زبان بر می گردد(تقریبا 1% از کل).
خیلی از زبان ها مثل پرل و روبی از tain checking برای چک کردن اینکه در فایل های ورودی اشتباه رخ داده است یا نه استفاده می کنند.از چنین ویژگی هایی برای زبان پی اچ پی استفاده شد در گذشته اما همه ی آنها رد شد.
PHPIDS امنیت را به برنامه های php اضافه می کند و از آن در برابر نفوذ محافظت می کند.PHPIDS از برنامه در مقابل دستورات SQL، دستورات header ،اجرای فایل های از را دور و ... محافظت می کند.
syntax
مفسر پی اچ پی فقط کد هایی را اجرا می کند که در جداکننده قرار دارند .این جداکننده در حالت کلی برای شروع php?> , برای بستن آن از <? استفاده می شود.حالت کوتاه تر آن به صورت ?> و <؟ استفاده می شود اما این حالت حالت portable بودن فایل ها را کم می کند پس استفاده از حالت کلی بیشتر توصیه می شود.
از /* */ comment کردن یک قطعه کد و از // یا # برای comment کردن یک خط استفاده می شود.
کلمات کلیدی در این زبان مثل بقیه ی زبان های سطح بالا می باشد.
یک برنامهٔ پیاچپی میتواند قسمتی از یک برنامهٔ (HTML) باشد. مثلاً در برنامهٔ زیر
<code>
<pre>
<html>
<head>
<title>Azmayesh</title>
</head>
<body>
<?php echo 'Hello world!'; ?> </body> </html> </pre> </code>
تنها یک خط از آن که در زیر آمده است پی اچ پی می باشد و بقیه آن HTML می باشد.
<?php echo 'Hello world!'; ?>
انواع تایپ ها
PHP همه متغیرها را در یک محدوده مستقل ذخیره میکند. این محدوده به طور نمونه ۳۲ بیت اعداد علامتدار است. اعداد بدون علامت در حالتهای معینی به مقادیر علامتدار تبدیل میشوند: این رفتار متفاوت از زبانهای برنامه نویسی است. متغیرهای صحیح میتوانند به صورت دهدهی(مثبت یا منفی) ٬هشت هشتی و شانزده شانزدهی مشخص شوند.
اعداد واقعی نیز در محدوده معینی ذخیره میشوند. آنها میتوانند به دو صورت اعشاری و علمی استفاده شوند.PHP دارای یک نوع محلی بولین میباشد که شبیه به بولین در زبان جاوا و ++C است. در نوع داده بولین مقدار غیر صفر به عنوان درست و مقدار صفر به عنوان نادرست استفاده میشود. همانطور که در پرل و ++C نیز همین طور است.
نوع داده null برای متغیرهایی که هیچ مقداری ندارند استفاده میشود.
متغیرهایی با نوع مرجع(resource) به منابع خارجی اشاره میکنند. اینها نوعا توسط توابع ایجاد میشوند و تنها میتوانند با همان تابع مورد استفاده قرار گیرند. مانند پوشهها و عکسها و پایگاه داده.
PHP آرایهها و رشتهها را هم پشتیبانی میکند. آرایه می توانند متغیرهایی از هر یک از انواع داده که توسط زبان پشتیبانی می شود تشکیل شده باشد. رشته ها را هم می توان با " " نمایش داد هم با ' ' .
چند ویژگی php
1- در php متغیر ها با $ مشخص می شوند که در واقع از روش keywords برای مشخص کردن کلمات کلیدی استفاده می کند و به این ترتیب کلمات کلیدی مثل if با نداشتن $ مشخص می شوند.
<?php
$txt="Hello World!";
$x=16;
?>
2- php در زمان type checking ،compile انجام نمی دهد و type checking ضعیف دارد و اگر در خود تابع از اینکه تایپ های مختلف با هم در دو طرف عملیات باشند جلوگیری نشود error داده نمی شود.
توابع
اختیاری بودن تعداد آرگومان ها
در php می توان تابع را یا تعدادی آرگومان تعریف کرد ولی در هنگام صدا کردن آنها می توان با تعداد آرگومان های کمتر یا بیشتر آنها را صدا کرد.همان طور که در کد زیر مشاهده می شود.
- // function with 2 optional arguments
- function foo($arg1 = '', $arg2 = '') {
- echo "arg1: $arg1\n";
- echo "arg2: $arg2\n";
- }
- foo('hello','world');
- /* prints:
- arg1: hello
- arg2: world
- */
- foo();
- /* prints:
- arg1:
- arg2:
- */
از تابع () func_get_args برای مشخص شدن تعداد ورودی هایی که تابع با آنها صدا زده شده استفاده می شود.
- // 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).": $v\n";
- }
- }
- foo();
- /* prints nothing */
- foo('hello');
- /* prints
- arg1: hello
- */
- foo('hello', 'world', 'again');
- /* prints
- arg1: hello
- arg2: world
- arg3: again
- */
چند مثال از تابع های موجود
1-error and logging function
این توابع امکان رفع خطا و ذخیره سازی را می دهند.
توابع error به کاربر اجازه می دهند که قوانین رفع خطا را مشخص کنند و توابع ثبت کننده هم این اجازه را می دهند که کاربر بتواند از برنامه log داشته باشد و خطا ها را به ایمیل بفرستد و یا با مکانیزم های دیگر آنها را ذخیره کند.به برخی از این توابع در زیر اشاره شده است.
debug_backtrace ()
<?php function one($str1, $str2) { two("Glenn", "Quagmire"); } function two($str1, $str2) { three("Cleveland", "Brown"); } function three($str1, $str2) { print_r(debug_backtrace()); } one("Peter", "Griffin"); ?>
Array
(
[0] => Array
(
[file] => C:\webfolder\test.php
[line] => 7
[function] => three
[args] => Array
(
[0] => Cleveland
[1] => Brown
)
)
[1] => Array
(
[file] => C:\webfolder\test.php
[line] => 3
[function] => two
[args] => Array
(
[0] => Glenn
[1] => Quagmire
)
)
[2] => Array
(
[file] => C:\webfolder\test.php
[line] => 14
[function] => one
[args] => Array
(
[0] => Peter
[1] => Griffin
)
)
)
user_error()
برای تولید error مناسب در جای مشخص شده توسط برنامه نویس که در هنگام رخ داد error بتوان به راحتی مکان آن و علت آن را پیدا کرد.
<?php
$test=2;
if ($test>1)
{
user_error("A custom error has been triggered");
}
?
Notice: A custom error has been triggered
in C:\webfolder\test.php on line 6
برخی دیگر از این توابع عبارت اند از:
()restore error handler
() error get last
() set exception handler
() trigger error
()set_error_handler
2-date
از این تابع برای مشخص کردن فرمت نمایش تاریخ استفاده می شود .و همچنین این تابع می تواند یک آرگومان دیگر داشته باشد که یک زمان مشخص را با یک فرمت خاص بدهد. مثلا تاریخ فردا را با یک فرمت خاص چاپ کند.کد زیر این کار را انجام می دهد.
<?php
$tomorrow = mktime(0,0,0,date("m"),date("d")+1,date("Y"));
echo "Tomorrow is ".date("Y/m/d", $tomorrow);
?>
Tomorrow is 2009/05/12
3-serialize()
در php از این تابع برای ذخیره ساختار های پیچیده استفاده می شود.
کد زیر کاربرد این تابع را نشان می دهد.
- // 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
- )
- */