معرفی اجمالی و مروری بر PHP
PHP که با نام کامل “PHP : Hypertext Preprocessor “ شناخته می شود ، یک زبان اســکریپت نویسی توکار HTML می باشد . بیشترترکیب ها (syntax) و دسـتورات PHP از زبانهای C ، Java و Perl گرفته شده و قابلیتهای منحصر به فردی به آن اضافه گردیده است . هدف اصلی از این زبان آنسـت که به توسعه دهندگان وب امکان دهد تا به سرعت ، صفحات پویایی را تولید نمایند.
توجه کنید که PHP امروزه صرفا یک پیش پرداز ابرمتن نیست . شما می توانید تصاویر ، فایلهای PDF و حتی پویانمایی های ” فلش “ را با اسکریپت های ساده PHP تولید نموده یا بکار گیرید .
PHP چه توانایی هایی دارد ؟
در ساده ترین سطح ، با PHP می توانید تمام کارهایی را که با سایر برنامه های CGI قابل اجرا هستند ، انجام دهید. مانند گردآوری داده از فــرم های HTML ، تولید صفحات پــویا و یا ارســال ودریافــت
Cookie ها. شاید قوی ترین و مهمترین خاصیت PHP ، پشتیـبانی آن از بسیاری پایگاه داده هاست .
نوشتن یک صفحه مرتبط با پایگاه داده به طرز غیر قابل باوری ، ساده است . هم اکنون این پایگاه داده ها توسط PHP پشتیبانی می شوند.
Adabas D Ingres Oracle(OCI7andOCI8)
dBase InterBase Ovrimos
Empress FrontBase PostgreSQL
FilePro mSQL Solid
Hyperwave DirectMS-SQL Sybase
IBM DB2 MySQL Velocis
Informix ODBC Unix dbm
PHP همچنین برای ارتباط با سایر سرویس ها ، از پروتــکل هایی مانند IMAP ،SNMP ، NNT ،POP3 ، HTTP و بسیاری دیگر پشتیبانی می کند.
تاریخچه مختصری از PHP
فکر اولیهPHP در پاییز سال 1994 توسط Rasmus Lerdorf ( ) شکل گرفت .
در ابتدا نگارشی از PHP در صفحه شخصی وی به کار گرفته شد ، تا اطلاعاتی از کسانی که رزومه وی را
را می بینند ، نگاه داشته شود. اولین نگارش عمومی آن در اوایل سال 95 ارایه شد و با نام ” Personal Home Page Tools “ معرفی گردید . که البته شامل پارسری بسیار ساده بود که ماکروهای خاصی را می شناخت و نیز برخی کاربردهای مشترک در صفحات شخصـی مانند شمـارنده یا Guestbook وبرخـی ابزار های دیگر را شامل می شد.
پارســر در نیمه سال 95 بازنویســی شد و با نام “ PHP/FI نگارش 2 “ ارایه گردید . FI نام بسـته
نرم افزاری دیگری از Rasmus بود که فرم های داده HTML را تفسیر می کرد . پس از آن بسیاری از PHP در کــد های خود استفاده کردند . در میانه سال 96 میزان استــفاده کنندگان به حـــدود 15 هـزار سایت رسید . این میــزان در نیمه سال 97 در حدود 50 هزار سایت مختلف بود. در هـمین زمان PHP از حالت یک پروژه شخصی درآمد و توســط تیمی توسـعه یافت . این گروه نگارش جدیدی از PHP را ارایه دادند و پارسر آن را بازنویسی نمودند. PHP3 به سرعت مورد استفاده قرار گرفـت . هم اکنـون نیز PHP4 آخرین نگارش این محصول است که در آن از موتور اسکریپت Zend برای بدست آوردن قابلیت های بیشتر استفاده شده است .
امروزه ، PHP3 و PHP4 بر روی بسیاری از محصولات تجاری مانند “RedHat’s Stronghold web Server” ارایه می گردد. هم اکنون برآورد می شود بیش 5.100.000 سایت از PHP استفاده کرده اند
که این میزان اندکی از تمامی سایتهای که از ســرور های IIS مایکروسافت استفاده می کنند (5.03 میلیون) بیشتر است.
چگونه از PHP استفاده کنیم ؟PHP نرم افزاری رایگان و Open source است که می توان آنرا از سایت http://www.php.net دریافت کرد. در این سایت بسیاری از نرم افزار هایی که برای کار با PHP طراحی شده اند معرفی گردیده و می توانید از آنها استفاده نمایید.همچنین دستورالعمل استفاده از PHP و معرفی دستورات و توابع آن درقالبهای مختلف از جمله Html ، PDF و فایل Help ویندوز در دسترس شماست.
البته ابزارهایی مانند “ PHP Traid “ که یک بسـته نرم افزاری رایگان است و در آن علاوه بر مفســرPHP ، مفسر زبان Perl ، موتور پایگاه داده MySQL و نسخه تحت ویندوز وب ســرور Apache قرار گرفته ، ابزار مناسبی جهت کار با PHP و پایگاه داده MySQL می باشد ویا نرم افزار PHPEDکه محیطی دیداری جهت کار با PHP فراهم می آورد. از سـایـت http://www.download.comقابل تهیه می باشند.
آموزش PHPآنچه می آید راهنمایی کاربردی برای آغاز کار بار PHP است . تاکید این آموزش بر روی راهنمایی دادن به مبتدیانی که کاربردهای کوچک web و پایگاه داده های SQL را انجام میدهند ، و نیز پاسخ دهی به پرسشهای عمومی مانند چگونگی ارسال یک فرم توسطmail و.. می با شد .
1- نخستین گام با PHP
2- ساخت سر آیند (header) و زیر صفحه (footer) هماهنگ در یک سایت
3- استفاده از PHP برای ساخت و ارسال mail
4- استفاده از MyODBC برای تماس با یک پایگاه داده راه دور.
5- اجرای ایمن اسکریپت های PHP
نخستین گام با PHP
I . معرفی PHP
PHP زبانی برای ساخت آسان صفحات پویای وب می باشد . این زبان راهی سـاده تر برای انجام برنامـه- نویسی های مربوط به وب را فراهم می سازد ، که پیش از این صرفا توسط زبانهای پیچیده و توانمندی مانندC و Perl انجام می شده است .
PHP به صورت ایده آلی به وب متصل شده است . چون اســکریپتهای آن درون صفـحات وب و در مـیان تگ ها و محتوای HTML جای می گیرند ، PHP یک زبان اسکریپت نویسی ” توکار “ خوانده می شـودتوسعه دهندگان می توانند برنامه هایشان را در صفحات وب جاسازی نموده و آنرا پویا سازند.
آنها می توانند با برنامه ، همچون صفحات وب رفتار کنند. صفحات PHP همزمان می توانند داراری محتوای معمول HTML و نیز کدهای PHP باشند. این قابلیت به شما اجازه می دهد تا کاربردهای وب را بسرعت توسعه دهید.
به هر حال ، برخلاف برخی زبانهای اســـکریپت نویسی وب ، PHP تفاوت آشــکاری میان بخش کدهای PHP و محتوای HTML ایجاد می کند.
هنگامی که یک وب ســرور درخواستی را برای صفحات PHP دریـافت می کند. ابتدا در صفحه به دنــبال کدهای PHP می گردد و هر آنجه را که یافت اجرا می کند . بخشهای معمولی HTML نیز بدون تغییر بـه
مرورگر ارسال می گردد.
II. چرا از PHP استفاده کنیم ؟
گذشته از Open Source بودن آن ، دلایل بسیاری برای انتخاب PHP برای ایجاد محتوای محاوره ای بـر روی سایت های وب ، وجود دارد.
ساختار و ترکیبی بسیار شبیه زبان C دارد .
نوع داده ها و ساختارهای (Structures) ، PHP به آسانی آموخته و به کار گرفته می شوند.PHP مـیداند منظور شما چیست و نوع های داده را ، خود تغییر می دهد.
نیازی به دانستن دستور خاصی برای کامپایل برنامه ندارید ، برنامه شما خود ، در مـرورگر اجرا می شود لازم نیست برای ابتدای کار و نوشتن برنامه های کاربردی در باره PHP زیاد اطلاع داشته باشید .
PHP سرویسی از مجموعه فایل های کتابخانه ای C را ارایه می دهد که به آسانی درون زبان قرارگرفته و با انعطاف بسیار به آن قابلیت پاسخ دهی سریع برای تغییرات در وب را می دهد .
آنچه شما می توانید با PHP انجام دهید ، با دیگر زبانها نیز قابل انجام است . اما PHP برای کار در زمـینه وب طراحی شده است . بنابراین کارهایی مشکل و خسته کننده برای برنامه نویسان که نوشـتن آن در Perl آنها را به زحمت می انداخت ، به آسانی با PHP انجام می شود.
PHP وب سایت ها را قادر می سازد که با سرعت مبهوت کننده ای گسترش یابند . به این خاطر بسرعــت برای صفحات پویا و پشتیبانی پایگاه داده ها به کار گرفته شده است .
کد های کوچک توکار در یک صفحه وب بسیار کـارآمدند . به عنوان مثال ، در یک صفــحه وب ایستا ممکن است شما مقدار یک متغیر را بدست آورید . و سپس آنرا برای تغییرات پویای محتوای صفحه به کار برید. این مثال PHP ، عبارتی را که نشانگر مرورگر وب کاربر است بر روی صفحه نمایش می دهد .
<?php
$browser = getenv("HTTP_USER_AGENT");
?>
<P>You are using the <?php echo($browser);?> web browser.
</P>
III . چند مثال
الف )Hello World
سریعترین راه برای آموختن PHP آنست که شروع به کار با آن کنید و ببینید که چه رخ می دهد. ما با مثال معروف “Hello World “ که شما پیــش از این در آموختن سایر زبانها نیـز آنرا به کار برده اید ، کار با PHP را آغاز می کنیم . این مثال سـاده عبارت “HELLO WORLD” را در مرورگر به وســیله تابع echo () می نویسد.
<?php
echo("Hello World\n");
?>
تابعecho ( ) یک یا چند رشته متنی را به مرورگر برای نمایش می فرستد . در واقع echo() یک تابع نیست بلکه یک ساختار زبان است . اما مانند یک تابع عمل می کند. به ابن خاطر نیــازی به پرانتزها نیسـت و می- توانید از آنها صرف نظر کنید.
اکنون اجازه دهید به برخی از ترکیبهای دستوری معمول در اسکریپت های PHP بپردازیم .
ابتدا وانتهای بخش PHP با علامتهای ” کوچکتر از “ و ” بزرگتر از “ نشانه گذاری می شود . که پس و یا پیش از آنها یک علامت سوال آمده است . پایان هرخط با یک ” ; “ مشخـص می شود. ”\n “ نیز یـک خط جدید ایجاد می کند . و عبارات پس از آن در خط جدید نوشته می شود .
کد بالا را می توان به این شکل نیز نوشت .
|
<?php |
ب ) Hello Web
مثال معروف Hello World را برای وب که پایه محاوره ای آن فرم هاست ، بازنویسی می کنیم. این مثالی بسیار ساده از به کار گرفتن اسکریپت ، توسط یک فرم در مرورگر است . این اسکریپت یک ورودی از کـاربر ” نام وی “ را دریافت می کند و در پاسخ این نام را در پنجره مرورگر نمایش می دهد .
|
<form action="hello-web.php3" method="post"> |
Hello-web.html
چون PHP ، مقادیر ارسال شده از فرم را می پذیرد و خود متغییر هایی به نام متغییرهای ورودی می سازد ، فقط یک خط برای تولید پاسخ کافیست . و به خاطر اینکه PHP در خود این قابلیت را دارد که به عنوان یک پرونده وب عمل کند ، اسکریپــت به طور خودکار یک سر آیند (header) HTTP ایجاد می کند .تا برای مرورگر مشخص نماید که چه متنی را نمایش دهد.
|
Hello <?php echo($frmName); ?>! |
hello-web.php3
در ابتدا ، PHP سر آیند فایل Html را به مرورگر می فرستد . سپس تگ P و بعد از آن Hello را نمایـش می دهد. ، هنگامی که به تگ آغازین PHP رسید آن را اجرا و نتیجه را به مرورگر ارسال کرده و بعد از تگ پایانی PHP ، به حالت HTML می رود و سایر بخشها را بدون تغییر ارسال می کند.
یک متغیر می تواند از مقادیر ورودی یک فـرم ، یا پــارامتر URL و یا متـغییرهای محلی که دارای مـقدار هستنــد ، تشکیل شود .
همچنین می توان یک فایل PHP تولید نمود که وظایف دو فایل html و PHP فوق را انجام دهد . این فایل با تغییرات بسیار جزئی و از پیوند دو فایل پیشین پدید می آید.
IV .دارا بودن محتوای پویا
بیایید بوسیله اسکریپت “Tip of the Day “ بیشتر با PHP آشنا شویم .
در این مثال با توابع و ایده های جدیدی آشنا می شوید که البـته لزومی ندارد همه آن را یکبــاره بیاموزید .
همچنین این اسکریپت ، مقدمه ای است برای کار با سیستم فایل .
|
<?php |
سطر دوم اسکریپت ، فایلی به نام “photo.tips” را فراخوانی می کند. نیاز به نوشتن چیزی در فایل نیست چون ما فقط یک سطر از این فایل را خوانده و نمایش می دهیم . استفاده از تابع file () سبب می شود تا هر سطر فایل مربوطه ، در یک عنصر آرایه $tiplist ذخیره شود . نیازی به مشخص کردن یـک handle برای استفاده از این تابع نیست .تابع file () یک نام را به عنوان آرگومان می پذیرد و خروجی آن یک آرایه است. که هر عضو آرایه با یک سطر فایل برابر است .
فایل tips دارای چندین مطلب می باشد که هر کـدام در یک خـط قرار دارند . توسط تابع sizeof می توان تعداد سطر های موجود در فایل که مشخص کننده تعداد tip ها نیز هست را پیدا کرد. این تابع تعداد عناصـر یک آرایه را معین می کند . در سطر بعد ، یک عـدد تصادفی مـیان صفر و تعـداد عنـاصر آرایه تولید می شود. rand(n,m) یک عدد رندم میان n و m تولید می کند . چون اندیس آرایه در PHP از 0 شروع می شود ،
ما تابع رندم خود را میان صفر و تعداد عناصر منهای یک ، تنظیم می کنیم .عدد تولید شـده به عـنوان اندیس آرایه به کار می رود. متنی که به صورت تصادفی انتخاب شده توسط تابع echo () نمایش داده می شود.
ایجاد سر آیند و زیر صفحه هماهنگ برای یک سایت
I . چگونه سر آیند(header) و زیر صفحه (footer)درکد PHP قرار می گیرند ؟
یکی از توانمندترین خصوصیات PHP ، توانایی آن در کاهش میزان اعمالی است که برای نگهداری ســایت بایستی انجام دهید. با به کارگیری الــگویی سازگار با سایت ، شما می توانید زحمتی را که برای ایجاد صفحات جدید نیاز است را کاهش دهید . همچنین می توانید به آسانی طراحی کل سایت خود را تغییر دهید . این مثال کاربردی ، چگونگی به کارگیری و دستیابی به یک الگوی سایت را به شما آموزش می دهد.
اولین مساله ، طراحی header و footer ها توسط تگهای HTML است . آنها شامل تمام اطلاعاتی هستند که بایستی در تمامی صفحات شما نمایش داده شوند. سر آیند معمولا بخش HEAD از صفحه شما را در بردارد. و شاید آگهی های سایت و یک منو و سر آغاز صفحه .
Footer معمولا شامل اعلان Copyright و اطلاعات تماس برای سایت شماست .
header1:
|
<HEAD> |
footer1:
|
<PRE> |
II. سر آمد و زیر صفحه های پویا
مرحله بعد جانشــین کردن بخشهایی از سر آیند و زیرصفحه ها ، که می خواهید پویا باشـند ، با تـگ ها و اسکریپت های PHP است .این بخشها می توانند شامل عنوان ، کلمات کلیدی ، توضیحات ، نشـانی پست- الکترونیک و ... باشد .
header2:
<HEAD>
<TITLE><?php print $strTitle; ?></TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<H1><?php print $strCaption; ?></H1>
footer2:
<PRE>
</PRE>
<CENTER>
<A HREF="http://www.coolsite.loc/legal.php3">Copyright
</A>
1999 By Me<BR>
Written by: <I><?php print $strAuthor;
?></I><BR>
Questions? Write to <B><?php print $strContact;
?></B><BR>
</CENTER>
</BODY>
اکنون شما بایستی بتوانید در تمام صفحات خود به آنها دسترسی داشته باشید . این مرحله آسانتر از آنـست که تصور می کنید. فایلهایی که می خواهند به header و footer دسترسی داشته باشند ، بایستی متــغیرها را مقــدار دهی کنند ، header را فراخوانی کرده ، محتوای اختصاصی هر صفحه را نوشته و سپس footer را فراخوانی نمایید. یک مثال :
<?PHP
$strTitle = 'My Cool Site';
$strCaption = 'The Coolest Site Ever';
$strAuthor = 'The Author';
$strContact = '
';
require ('/path/to/includes/header.php3');
?>
<P>This is a the text of your page. Make it as fancy as you want!</P>
<?PHP
require ('/path/to/includes/footer.php3');
?>
main1
III .جداسازی محتوا از علائم
بسیار خوب ، اکنون می خواهیم مثال پیچیده تری بیاوریم . مثلا شما می خواهید ، قـادر باشیــد که مقــادیر متغییرهای پویا header و footer کل سایت خود را به آسانی و یکباره تغییر دهیــد . ساده ترین راه برای این کار ، انتقال اطلاعات به یک فایل پیکربندی عمومی و ذخیره کردن بخشهای خاص صـفحه در یک آرایه ، می باشد. به این خاطر باید بدانید که از نظر برنامه نویسی آرایه یک لیست ساده اسـت که تــوسط کلید های عددی و یا متنی می توان به اجزا آن دسترسی داشت . یک مثال برای فایل پیکریندی در زیر آمده است:
config1:
<?PHP $aryConfig = array(
"main" => array (
"title" => "My Cool First Page" ,
"caption" => "Welcome to the Coolest Site Ever" ,
"author" => "The Author" ,
"contact" => "
" ) ,
"second" => array (
"title" => "My Cool Second Page" ,
"caption" => "More Coolness!" ,
"author" => "The Other Author" ,
"contact" => "
" )
);
?>
فایل پیکر بندی فوق اطلاعات هدر را در بر دارد . این فایل مقادیر همه مــتغیر های پیکر بندی را در تمامی محدوده صفحات سایت ، قابل دسترسی می کند . اکنون ، پس از آنکه فایل پیکر بندی آماده شد ،header و footer را بایستی تغییر دهید تا مقادیر متغیرها را از آرایه بخوانــد . ما هنوز می خواهــیم بتــوانیم مقادیر سراسری را جانشین مقادیر محلی نماییـم . به این صورت که اگر مطمــئن شویم مقدار محلی موجود نباشد ، از مقادیر سراسری استفاده می شود.
header3:
<?PHP
if (empty ($strTitle)) { $strTitle = $aryConfig[$strPagename]["title"]; }
if (empty ($strCaption)) { $strCaption =
$aryConfig[$strPagename]["caption"]; }
?>
<HEAD>
<TITLE><?php print $strTitle; ?></TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<H1><?php print $strCaption; ?></H1>
footer3:
<?PHP
if (empty ($strAuthor)) { $strAuthor = $aryConfig[$strPagename]["author"] } ;
if (empty ($strContact)) { $strContact = $aryConfig[$strPagename]["contact"] } ;
?>
<PRE>
</PRE<
<CENTER>
<A HREF="http://www.coolsite.loc/legal.php3">Copyright</A> 1999 By Me<BR>
Written by: <I><?php print $strAuthor; ?></I><BR>
Questions? Write to <B><?php print $strContact; ?></B><BR>
</CENTER>
</BODY>
و در پایان صفحه اصلی نیز برای دسترسی به فایل config بایستی تغییر کند .
main2:
<?PHP
$strPagename = 'main';
require ('/path/to/includes/config.php3');
require ('/path/to/includes/header.php3');
?>
<P>This is a the text of your page. Make it as fancy as you want!</P>
<?PHP
require ('/path/to/includes/footer.php3');
?>
و در یک مرحله دیگر ، برای شما آسان خواهد بود که متن و محتوای اصلی صفحه را به یک فــایل مجزا منتقل نمایید . این عمل اجازه تغییرات را به آسانی ،و بدون آنکه نگران از دســت دادن کدهای PHP باشــید ، در اختیار شما می گذارد . این عمل نیاز به تغییرات جدید در صفحه اصلی و نیز ایجاد یک فایل Content دارد.
main3:
<?PHP
$strPagename = 'main';
require ('/path/to/includes/header.php3');
require ('/path/to/includes/contents.html');
require ('/path/to/includes/footer.php3');
?>
contents1:
This is a the text of your page. Make it as fancy as you want!
این عمل می تواند نقطه آغاز مناسبی برای شما و برای حرکت به سوی ساخت سایتهای پویا باشد .
به کار گیری PHP برای تولید وارسال Email
I . بررسی تابع Mail
زبان برنامه نویس وب محبوب ما روشی دستی و ساده برای ارسال email توسط تابع mail() فراهـم نموده است . این تابع یک روش کامل برای ارسال mail و با استفاده از واسط استاندارد و ساده ، که مشکــلات و خصوصیات خاص برنامه های سیستمی مسؤول ارسال mail را پنهان می کند : می باشد . (Sendmail و Qmail دو مثال از برنامه های محبوب مدیریت ارسال و دریافت mail هستند که اگر تابع mail نـبود شما بایستی مستقیما با آنها ارتباط برقرار می کردید . ) این آموختار (tutorial) ، شما را با مفاهیم اولیه ارســال email توسط اسکریت های PHP و ساختن یک فرم ساده feedback آشنا می کند .
تابع mail() سه مقدار ضروری و یک مقدار اختیاری را می پذیرد. و نیز مقداری منطـقی را کـه نشان دهنده موفقیت یا عدم موفقیت ارسال است ، برمی گرداند .
نشانی پست الکترونیک گیرنده ( فیلد To: ) ، موضـوع پیام ( فیلد Subject ) و متــن پیــام که به عنـوان پارامترهای اصلی به تابع داده می شوند . یک رشته اختیاری که شامل هدر اضافه (Extra Header) ،است نیز می تواند تعیین شود .
bool mail(string msgTo, string msgSubject, string msgBody, string extraHeaders);
برای ارسال یک پیام شما به سادگی پارامترها را مقدار دهی می کنید . در این مثال از رشته های ثابت اسـتفاده می کنیم تا کاربرد اصلی تابع شرح داده شود . اولین پارامتر نشانی پست الکترونیک فردی را تعیین می کـند که ما می خواهیم برای او mail را ارسال کنیم . دومین پارامتر عنوان و موضوع پیـام است . پارامـتر سـوم متن نامه است و در پارامتر چهارم به صورت اختیاری ما هدر From: را قرار می دهیم و در آن نشانی را که می خواهیم پاسخ به آن ارسال شود ، می آوریم . و X-Mailer را اضافه می کنیـم تا به برنامه مدیریت email کمک کند تا تشخیص بدهد که پیام از یک منبع خودکار ارسال شده اسـت . زمــانی که شما یک هدر انتخابی را تولید می کنید بیاد داشته باشید که هر هدر اضافه را با یک linefeed \n) ) جــدا نمایید . وگرنه مـتن پیام ، ممکن است در هم و غیر قابل استفاده شود . پیام های ارسالی از طریق این تابع با فرمت plain text ارسال
خواهند شد .
mail ( " ", "Use PHP Everyday",
"Don't forget to floss and use PHP everyday!",
"From: \nX-Mailer: My PHP Script\n");
بیشتر اوقات شما نمی خواهید مقادیر پارامترها را با رشته های ثابت پر کنید . بلکه می خواهید متغییرهایی را استفاده نمایید . ممکن است بخواهید این مقادیر را از یک بخش اسکریپت PHP ( یک فایل مقدار دهـی اولیه ) یا از یک فرم ثبت نام بدست آورید. این عمل همانند آنست که شما بخواهید مقادیر ارائه شده توسط یک فرم را بکار برید یا متغییرها را به صورت مدون برای ارسال پیام ، تولید نمایید . در این صورت ، رشته های معین را با متغییرهای رشته ای جانشین می کنیم .
mail ($strMailTo, $strSubject, $strBody, $strXHeaders);
II . افزودن اطلاعات هدر
همانطور که اشاره شد تایع mail () به شما اجازه می دهــد که فــیلدهای هدر بیشتری را به هدر پیام خود اضافه نمایید . یک کاربرد برای هدرهای اضافی Extra Header) ( مشخص کردن این است که پیام بوسیله
یک برنامه تولید شده است . هر اسکریپتی که نامه را تولید کـند ، می تـواند به عنوان یک remailer نامیده شود. گاهی مفید است که به نظر آید email ارسالی از فرم ، از سـوی شخصـی که فـرم را submit کرده ، فرستاده شده است . مانند زمانی که از یک فرم برای ثبت نام کاربر در یک لیست پســتی استــفاده می شود . در کد زیر فیلد From: با نشانی ثبت نام کننده ، بازنویسی شده و یک X-Header که مــشخص می کند . mail از سوی اسکریپت remailer شما ارسال شده ، اضافه گردیده است .معین کردن اینکه mail از سوی اسکریپت شما می آید برای مدیر سایت مشــخص می کند، که email از یک منبــع خــودکار ارسال شده است و اگرمشکلی باشد ، از سوی اسکریپت شما رخ داده است . ما تابع phpversion () را برای شناسایی پیامی که از سوی یک اسکریپت PHP ازسال شده ، به کار برده ایم :
mail($list_request, "Subscribe", "Subscribe", "From: $email_address\nX-Mailer: PHP/" . phpversion());
برخی لیست سرور ها نیاز دارند که نام و نام خانوادگی کاربر در فیلد From : در دسترس باشـند . بـه این منظور ، متغیرهایی برای نام ، در فیلد From اضافه می کنیم . ضروری است که راهی برای درج کـوتـیشن در یک عبارت که بوسیله کوتیشنها مشخص می شود بیابیم . ( عبارتی که ابتدا و انتها آن با کوتیشن مشـخص می شود .) به این منظور بایستی از علامت backslash (‘\’) پیش از علائم کوتیشـن نام ونام خانوادگــی استفاده کرد . نشانی پست الکترونیک در میان دو عـلامت کوچــکتراز و بزرگتر از قــرار می گیرد تا از متن اطراف آن متمایز گردد .
$from = "From: \"$first_name $last_name\" <$email_address>\nX-Mailer: PHP/" . phpversion();
mail($list_request, "Subscribe", "Subscribe", $from);
III. چه هنگامی از تابع Mail () استفاده می شود ؟
داشتن یک تابع آسان برای ارسال نامه ، هنگامی که یک اســکریپت بخواهد پیامهای متعددی را ارسال نماید ، بسیار مفید است . این تابع فقط یک خط از کد را بـخود اختصــاص می دهـد . همچنین کمک می کند تـا کد خوانایی خود را ،اگر تابع mail () بخواهد در یک عبارت شرطی بیاید نیز به خوبی حفظ نماید . همــچنین به خوبی توانایی محاوره با برنامه mail بدون هراس از command syntax و یا معیارهای ایمنی مــورد نیاز برای اجرای یک برنامه mail یونیکس را دارد . گرچه واسط Sendmail و Qmail استاندارد شده انــد ، اسـتفاده از تابع mail () اســکریپت شما را تا حدودی در برابر تغــییراتی که ممکن اســت مـدیر در برنامه Sendmail ایجاد نماید ، حفاظت می کند . استفاده از تابع mail() به این معــناســت که شما مجبور نیستید خودتان تابعی برای ارسال mail با استفاده از Sendmail ویا Qmail بنویسید .
مثال زیر درباره استفاده از چند تابع در یک اسکریپت ، برای آگاه کردن مدیر هنگامی که فرمی تکمیل گردید و در همان لحظه ، ارسال یک email پاسخ برای کاربر می باشد .( توجه داشته باشید که این یک طـرح اولیه است و ممکن است مثالی عملی نباشد .)
if ($notify)
{
// notify admin
$mailTo = "
";
$msgSubject = "Downloading MediaKit";
$msgBody = "$name, $company, $address, $email_address, $demographics";
$xHeaders = "From: $email_address\nX-Mailer: PHP/" . phpversion();
mail ($mailTo, $msgSubject, $msgBody, $xHeaders);
}
// thank customer
$mailTo = $email_address;
$msgSubject = "Thank You for Downloading our MediaKit";
$msgBody = "Please feel free to contact us if you have any questions or desire a quote.\nThank You.\n";
$xHeaders = "From:
\nX-Mailer: PHP/" . phpversion();
mail ($mailTo, $msgSubject, $msgBody, $xHeaders);
IV . ارتباط با برنامه Sendmail
البته PHP به شما اجازه می دهد که برنامه mail سیستم را به طور مستقیم بکار برید . شاید بخواهید که این کار را با استفاده از مشخصات ویژه ای که فقط در یک برنامه خاص mail موجود است ، بکار برید . هدف دیگر از فراخوانی مستقیم sendmail ، ایجاد هدر From : یا دیگر هدر های اختیاری در روشی خواناتر است .
فراخوانی یک برنامه mail مانند نوشتن در فایل است . ( برنامه نویسان Perl به این موضوع آشناترند .) به جای باز کردن یک فایل ، تابع popen () یک برنامه را برای pipe پیام شما ( ” صدازدن “ : روش ارتباط استاندارد UNIX) مشخص می کند . این تابع یک ارتباط با برنامه mail ایجاد می نماید . تابع puts () برای نوشتن هدرهای پیام و متن آن در برنامه mail ، که ارتباط آن بوسیله تابع popen () برقرار شده ،به کار می رود. چون ممکن است شما بخواهید برنامه mail متفاوتی را بکار برید ، فکر خوبی است که مسیر موجود در popen () را در یک متغیر ذخیره نمایید . شما می توانید نشانی گیرنده را در متغیری ذخیره کرده تا تغییرات در آن به آسانی انجام شود . اسکریپت زیر مثالی از بکارگیری برنامه Sendmail است .
<?php
$fd = popen("/usr/sbin/sendmail -t","w");
fputs($fd, "To:
\n");
fputs($fd, "From: Me \n");
fputs($fd, "Subject: Test message from my web site\n");
fputs($fd, "X-Mailer: PHP3\n");
fputs($fd, "Testing.\n");
pclose($fd);
?>
تابع popen () یک pipe به برنامه mail باز می کند . برای بازکردن یکpipe شما باید به تابع ، نام برنامه و نیز نوع ارتباطی که بایستی برقرار شود را بدهید . “w” برای “Write” به تابع popen می گوید که یک pipe برای ارسال اطلاعات از سوی PHP به Sendmail برقرار کند . اگر “r” نوشته شود ، تابع بایستی پایپی در خلاف جهت و برای ارسال اطلاعات به PHP باز نماید . تابع fputs() هر خط پیام را در Sendmail می نویسد . این تابع نیاز دارد که ما به آن یک اشاره فایل و رشته ای که می خواهیم نوشته شود را بدهیم .اشاره گر فایل که هنگام باز شدن فایل آنرا بدست آورده ایم ، می گوید که پیام به کجا بایستی ارسال شود . ( در Unix وسایل به عنوان فایل در نظر گرفته می شوند . ) پیام خود ، شامل یک رشته است . هنگامی که کار ما پایان یافت ، پایپ بوسیله تابع pclose () بسته می شود .
توجه : گزینه (-t) را هنگام کار کردن مستقیم با Sendmail برای کاهش میزان اشتباه به کار برید . بنابه توضیحات برنامه Sendmail : انتخاب (-t) به Sendmail می گوید که handle پیام را تجزیه کند . و تمامی انواع گیرندگان را ( مانند To : ، Cc و BCc ) بکار برد . تایک لیست مشخص و مجزا از گیرندها بدست آید . خط فرمان ساده Sendmail این امتیاز را در حالی به شما می دهد که امکان معرفی گیرنده غیر از آنچه در هدر ها لیست شده را از دست می دهید .
یک هدف دیگر از دسترسی مستقیم به برنامه mail ، ایجاد نشانی پست الکترونیک پوششی است .اگر برنامه mail شما در میزبان دیگری قرار دارد ، ممکن است شما هنگامی که از تابع mail () برای ارسال email استفاده می کنید ، ببینید پیامها به خاطر اینکه از نشانی ، غیر از نشانی های پوشش یافته ، ارسال شده اند : برگشت می خورند . این مشکل توسط ارتباط مستقیم با برنامه Sendmail کاهش می یابد .
سوئیچ –f را برای مشخص کردن آدرس پوششی به کار برید.
-f
// Configuration
$announce_subject = "Message From Our Web Site";
$announce_from_email = "
";
$announce_from_name = "Our Site";
$announce_to_email = "
";
$body = "Announcement. Our site has a special offer today. Please visit. Thank you.";
$MP = "/usr/sbin/sendmail -t";
$spec_envelope = 1;
// Access Sendmail
// Conditionally match envelope address
if($spec_envelope)
{
$MP .= " -f $announce_from_email";
}
$fd = popen($MP,"w");
fputs($fd, "To: $announce_to_email\n");
fputs($fd, "From: $announce_from_name <$announce_from_email>\n");
fputs($fd, "Subject: $announce_subject\n");
fputs($fd, "X-Mailer: PHP3\n");
fputs($fd, $body);
pclose($fd);
V. ارسال ایمن email
هنگامی که برنامه mail سیستم را فراخوانی می کنیم . بایستی مراقب باشیم که چه کاراکترهایی به آن ارسال کرده ایم . چون ما یک پایپ یونیکس را بازکرده ایم برای کاربران بداندیش این امر را ممکن می سازد تا meta character های پوسته shell یونیکس را در فرم ورودی بنویسند و بعد آن را به Sendmail بفرستند . نتیجه ممکن است فاجعه بار باشد .
هنگامی که اسکریپت کنترل کننده یک فرم را می نویسید که قرار است داده های وارد شده توسط کاربران را به یک برنامه mail بفرستند ، شما بایستی به دقت مراقب ورودی های کاربر باشید . به همه کاربران آنچنان نگاه کنید که شاید آنها دشمن باشند . ( رفتار غیر مسؤولانه ای دارند .) meta character های پوسته Shell را ، که بایستی توسط Sendmail استفاده شود مانند “TO :” ، “From :” و یا “Subject” ، از ورودی حذف نمایید . به جای حذف کاراکترهای نادرست می توانید به گونه ای متغیر ورودی را تعریف نمایید که صرفا عبارتهای مجاز را دریافت کند . به عنوان مثال ، ورودی خود را به این شکل تعریف نمایید :
$data =~ s/[^A-Za-z0-9_]//gs;
VI . ارسال Mail از یک فرم
البته هریک از هدرها ویا متن پیام می توانند توسط متغیرهایی معرفی و مقداردهی شوند .این یک مثال کاملتر از اسکریپت قبلی است که به صورت یک اداره گر ساده فرم، توسعه داده شده است . مثال ، متغیرهایی را معرفی می کند و کد را به بخش کوچک پیکربندی و اسکریپت آشنای Sendmail ، تقسیم می کند . بخش اول کد PHP ، به عنوان بخش پیکربندی برای مقداردهی متغیرهای کلیدی ، عمل می نماید . مفید است که مسیر برنامه mail خود را در یک متغیر ذخیره کنید . در این صورت نیازی به جستجو در کد و تغییر قسمتهای لازم، در صورتی که مسیر برنامه تغییر کند ، نخواهید داشت . بخش دوم ، عمل ارسال mail را انجام می دهد . در روش صحیح نوشتن PHP ، کدهای HTML و PHP با هم آمیخته می شوند تا پس از آنکه فرم کامل شد توسط همان صفحه ، اطلاعات جمع آوری شده، از طریق mail به مدیر سایت ارسال شود . اگر فرم شامل نشانی پست الکترونیک پرکننده ، ( فیلد From : ) باشد : ارسال یک email به کاربر و پاسخ دهی به آن را جهت تایید عضویت ، آسان می کند . بر اساس پروتکلهای مربوطه ، فیلد ، From : با قرار گرفتن نشانی email در میان دو نشانه “>” و “<” قالب بندی شده است :
“ From : $frmName < $frmEmail> \n”
هر فرم دارای نام متغیرهای ورودی است . هنگامی که فرم تکمیل و تایید شد PHP به صورت خودکار متغیرهایی با نام هایی که در خاصیت NAME اجزای فرم وجود دارد ، ایجاد می کند و آنها را با مقادیری که کاربر وارد نموده است مقداردهی می نماید . این متغیرها در بخش PHP اسکریپت در دسترس خواهند بود. برای هر متغیر یک خط شامل مقدار آن ، در پیام تولید شده اضافه می شود .
<?php
/* Configuration -----------------------------------------*/
/* Mail results to this address */
/* Set this to the email address you wish to receive mail */
/* from the form submissions at. */
$TO = "
";
/* Specify system mail program */
/* Set this to the path to your mail program. Check with */
/* your server administrator for the proper location. */
$MP = "/usr/sbin/sendmail -t";
?>
<?php
/*-------------------------------------------------------*/
/* Decide if we should display a new form or send the */
/* form data by email. */
/* To make this decision, the script can check for the */
/* existence of 1) the action variable defined by a */
/* hidden field; 2) a required form field that you know */
/* will always be set on submission; or you may set the */
/* action variable to a particular value that can be */
/* checked to determine the action to take. I chose */
/* to simply check for the existence of the hidden */
/* action variable (which is always set as long as we */
/* give a value in the hidden field). */
/*-------------------------------------------------------*/
if ($frmAction)
{
/*-------------------------------------------------------*/
/* A thank you message (or other response) goes here. We */
/* switch to HTML mode to make it easy to include any */
/* tags you wish without worrying about quoted */
/* attributes. */
/*-------------------------------------------------------*/
?>
<div align="center">
<table width="350" border="2">
<tr>
<td bgcolor="#C0C0C0">
<p>Thank you for requesting a personalized quote for our products and services.
</p>
</td>
</tr>
</table>
</div>
<?php
/*-------------------------------------------------------*/
/* The real work gets done here by opening a pipe to */
/* sendmail, which sends the contents of the submitted */
/* form by email to the address specified in the */
/* configuation section (which can acutally be an */
/* an included initialization file if you want to get */
/* fancy). For each variable we expect the form to */
/* to submit, we output as part of the email. */
/*-------------------------------------------------------*/
$fd = popen($MP,"w");
fputs($fd, "To: $TO\n");
fputs($fd, "From: $frmName <$frmEmail>\n");
fputs($fd, "Subject: Message from your web site\n");
fputs($fd, "X-Mailer: PHP3\n");
fputs($fd, "Name: $frmName\n");
fputs($fd, "Phone: $frmPhone\n");
fputs($fd, "Fax: $frmFax\n");
fputs($fd, "Email: $frmEmail\n");
fputs($fd, "Address: $frmAddress\n");
fputs($fd, "Price range: $frmPriceRange\n");
fputs($fd, "Details: $frmFurther");
pclose($fd);
/*-------------------------------------------------------*/
/* Here the script must exit so we don't display the */
/* form again once the thank you message has been */
/* displayed and the mail sent. */
/*-------------------------------------------------------*/
exit;
} else {
// start else clause
?>
<div align="center">
<form action="mail.php3" method="post">
<table>
<tr><td colspan="2">
<p>Please enter your information for a personal quote.
</p>
</td>
</tr>
<tr>
<td>Name:</td>
<td><input type="text" name="frmName" size="24">
</td>
</tr>
<tr>
<td>Phone:</td>
<td><input type="text" name="frmPhone" size="24">
</td>
</tr>
<tr>
<td>Fax:
</td>
<td><input type="text" name="frmFax" size="24">
</td>
</tr>
<tr>
<td>Email:
</td>
<td> <input type="text" name="frmEmail" size="24"><br>
</td>
</tr>
<tr>
<td>Address:
</td>
<td><input type="text" name="frmAddress" size="24">
</td>
</tr>
<tr>
<td>Price Range:
</td>
<td><input type="text" name="frmPriceRange" size="24">
</td>
</tr>
<tr>
<td>Details:
</td>
<td><input type="text" name="frmFurther" size="24">
</td>
</tr>
<tr>
<td>
<!-- To determine whether the script should display the form or mail the data, you can check for existence of a required field or this special action variable. -->
<input type="hidden" name="frmAction" value="formmail">
<input type="submit" value="Submit">
</td>
<td>
</td>
</table>
</div>
<br>
</form>
<?php
} // end else clause
?>
این دستورالعمل مثالی از اینکه چگونه یک اسکریپت وب می تواند برای تولید فرم HTML وپذیرش مقادیر تاییده شده فرم ، بکار رود است . این امر اینگونه رخ می دهد : در اولین باری که اسکریپت فراخوانده می شود ، بخشهای HTML فرم به مرورگر مشتری (client) ارسال می گردد . اسکریپت پس از آن بیکار می ماند تا کاربر مقادیر فرم را تایید کند . پارامتر action فرم ، برای فراخوانی همان اسکریپت تنظیم شده است . اسکریپت به مقادیر توجه می کند تا ببیند آیا از سوی فرم فراخوانی شده است؟همچنین می توان متغیری برای action به صورت مخفی درنظر گرفت تا براساس مقادیر ارسالی ، متغییر action مقداردهی شود .
این مثال ، یک اسکریپت آموزشی است و به تعداد ورودی مرتبط است . می توان اداراه گر فرمی ساخت که برای هر فرم بدون توجه به تعداد ورودی ها عمل نماید .
به کارگیری MyODBC برای اتصال به یک پایگاه داده راه دور
I . اصول اولیه استفاده از MyODBC
یکی از گیرا ترین خصوصیات MySQL پشتیبانی کامل آن از ODBC است . منبع (source) راه انداز و واسط ODBC برای علاقمندان در اکثر مراکزتوسعه و بهینه سازی دستیابی به ODBC در اختیار است . همه توابع ODBC 2.5 و بسیاری دیگر در MySQL پشتیبانی شده است . شما می توانید از Microsoft Access برای تماس با کارگزار (سرور) MySQL خود استفاده نمایید . این آموختار نیز بر این اساس است . MyODBC یک راه انداز ODBC برای سرویس دهنده پایگاه داده MySQL است که توسط شرکت سوئدی TCX Data-Consult تولید گردیده است . توسط برنامه MyODBC ، MySQL از ODBC(Open DataBase Connectivity) پشتیبانی می کند .
- چرا برای اتصال از MyODBC استفاده می کنیم ؟
با MyODBC شما می توانید :
- ارتباط با سرویس دهنده پایگاه داده راه دور را ، از هر نقطه ای که شما به یک برنامه رومیزی مانند Microsoft Access دسترسی داشته باشید، برقرار نمایید .
- ارسال (Export) یک پایگاه داده به یک سرویس دهنده راه دور
- دریافت(Import ) یک پایگاه داده از یک سرویس دهنده راه دور
- اتصال (link) یک پایگاه داده محلی به یک پایگاه داده راه دور
Exporting : برای ارسال یک پایگاه داده هنگامی که شما اولین پایگاه داده راه دور یا online خود را ایجاد می کنید ، کارآمد است .اگر شما یک پایگاه داده دارید که می خواهید آن را به صورت Online قرار دهید . آنرا از Access به MySQL بوسیله یک اتصال ODBC ارسال (export) نمایید . این عمل بسیار آسان انجام خواهد شد . MyODBC به نوآموزان اجازه می دهد تا پایگاه داده های خود را بدون نیاز به آموختن فرمانهای پوسته Unix یا application های سودمند ، در اینترنت قرار دهند .نکته مهم آنست که توجه داشته باشید exporting یک پردازش ایستا در ارسال یک جدول از سرویس دهنده محلی به کارگزار (server) راه دور در هر بار انجام آن ، می باشد . معمولا فیدبکی از شاخص پیشرفت عملیات دریافت نمی شود . هنگامی که شما یک جدول را export می کنید ، دستورات SQL به کارگزار SQL راه دور، فرستاده می شوند . برای ایجاد یک جدول، دستور CREATE TABLE و برای درج داده ارسالی ،INSERT به
کارگزار SQL راه دور ارسال می شوند . اگر جدول پیش از این ایجاد شده باشد ، عبارت CEARTE TABLE فرستاده نخواهد شد و اطلاعات جدید ارسالی از دستور UPDATE استفاده می کنند .
Importing : دریافت جدول از یک پایگاه داده راه دور هنگامی که شما می خواهید یک گزارش از اطلاعات ذخیره شده در آن تهیه نمایید ، می تواند بسیار ارزشمند باشد . با import یک جدول به Access شما می توانید ، نمودارها یا گزارشهایی از داده هایی که به صورت online گرد آوری شده اند ، به آسانی تهیه نمایید . نکته مهم آنست که دریافت یک جدول از یک پایگاه داده راه دور ، در یک سرویس دهنده محلی پردازشی ایستاست و معمولا فیدبکی از شاخص پیشرفت دریافت نمی شود .
Linking: پیوند دهی ؛ هنگامی که شما یک جدول محلی را به یک جدول راه دور متصل می کنید ، به کاربران محلی خود اجازه تغییرات در جدول راه دور را از طریق واسط گرافیکی کاربر Access می دهید . برای مثال ، اگر یک سطر بوسیله یک فرم Access ، به جدول محلی اضافه شود و یا تغییر نماید؛ تغییرات در جدول پیوند شده راه دور نیز اعمال می گردد وآنرا به هنگام می کند .این ارتباط به کاربران مبتدی اجازه می دهدکه پایگاه داده های online خود را به وسیله محیطی دوست داشتنی و با کاربری ساده ، نگه داری نمایند . یکی از فواید اتصال جداول آنست که هر تغییری که توسط کاربرد پایگاه داده محلی صورت پذیرد ؛ در پایگاه داده راه دور نیز اثرخواهـد کرد .این عمل پردازشها بر روی پایگاه داده راه دور را بیشتر قابل رؤیت می کند .
تمامی این اهداف را می توان با استفاده از MySQL و خط فرمان پوسته Unix نیز انجام داد . براخی اوقات کارشناسان ومتخصصین کار کردن با خط فرمان را بیشتر می پسندند . اما برای بسیاری از مردم client) ها و کارکنان اداری ) ODBC راهی آسان برای دریافت داده هایشان از کارگزار راه دور، و یا تولید نمودارهای قالب بدنی شده‘ دلپذیر و گزارشهای مناسبی از داده های online می باشد . MyODBC یک گزینه مهم در میان ابزار های مورد نیاز توسعه دهنگان است . که به شما اجازه می دهد ، تا به مشتریان یک واسط ساده و منعطف برای پایگاه داده های onlineشان بوسیله چارچوب و برنامه کاربردی - که با آن راحت هستند - معرفی نمایید . برای توسعه دهندگان کاربردهای وب ، اجازه یافتن کاربران برای به هنگام رسانی پایگاه داده های راه دور از محل کار ، باعث صرفه جویی در زمان می شود . ورود داده و مدیریت پایگاه داده می تواند از محل کار درست در زمانی انجام شود که یک اسکریپت PHP صفحات پویایی را بر پایه اطلاعات جداول پایگاه داده ، تولید می نماید .
II . بارگذاری MyODBC (Download)
بسته قابل بارگذاری MyODBC در بخش Downloads سایت MySQL به نشانی http://www.mysql.com موجود است . به بخش نرم افزارهای مرتبط با MySQL بروید و Download for MyODBC را انتخاب نمایید .
توجه : برای بارگذاری سریعتر یکی از سایتهای آینه ای MySQL را آزمایش نمایید ، سایتی را برگزینید که به شما نزدیکتر باشد .
MyODBC برای windows 9x و چارچوبهای NT به خوبی گونه های مختلف موجود در Unix در دسترس است . کد منبع MyODBC در بسته فوق موجود است . اگر شما صرفا برنامه کاربردی آن را می خواهید می توانید بدون مشکل ، از کدهای C موجود در بسته چشمپوشی نموده و فقط برنامه اجرایی را نصب نمایید .
توجه : MyODBC در نسخه های مجزایی برای win 9x و NT توزیع شده است ، چون یک اشکال در نصب Microsoft ODBC ، از شناسایی سیستم عامل جلوگیری می کند .
نگارش فعلی MyODBC ،شماره2.5 است . آخرین نگارش از بسته قابل بارگذاری در نشانی زیر موجود است : http://www.mysql.com/doanloads/myodbc . مطمئن شوید که آخرین نگارش که تمامی بروز رسانی ها و رفع نواقص را در بر دارد مورد استفاده قرار می دهید . فایل فشرده MyODBC در حدود 1.5 MB است.
نصب MyODBC
فایل setup.exe را اجرا نمایید . هنگامی که شما پردازش نصب را آغاز نمودید ، اولین پنجره ای که مشاهده خواهید کرد ؛ پنجره نصب MS ODBC است که بایستی بر روی “ continue “ کلیک نمایید . در این بخش پنجره نصب راه اندازها پدیدار می شود . MySQL را انتخاب نموده و بر روی OK کلیک نمایید. اگر مشکلی در نصب پیش آید گزینه نصب وابسته به نگارش را که با کلیک کردن بر دکمه Advanced خواهید یافت ، انتخاب کنید . این دکمه پنجره محاوره Advanced Installation Options را خواهد آورد .
اطلاعات بیشتر در مورد نگارش راه انداز در پنجره version موجود است . اگر راه انداز MyODBC به درستی نصب شده باشد ، پنجره بعدی که مشاهده خواهید کرد مربوط به محاوره Data Source است . این پنجره محاوره ، بخشی از MS ODBC است و ربطی به MyODBC ندارد . شما می توانــید با فراخـوانی
Sample MySQL در پنجره Data Source ، یک مثال از منبع داده ای که توسط MyODBC نصب شده است را ملاحظه نمایید . اگرچه می توانید MySQL entry را انتخاب کرده و دکمه setup را برای ادامه کلیک کنید . اما ما اتصال راه دور را از MS Access پیکربندی خواهیم کرد . هنگامی که کار به اتمام رسید ، شما بایستی پیامی مبنی بر پایان موفقیت آمیز نصب راه انداز ODBC جدید . مشاهده نمایید . سپس بر OK کلیک کنید .
III . پیکربندی و برقراری تماس
- ایجاد ارتباط با یک پایگاه داده راه دور موجود .
پس از آنکه شما راه انداز را نصب کردید ، از Access برای ارتباط با پایگاه داده راه دور استفاده می کنیم . پایگاه داده باید برای دسترسی راه دور تنظیم شده باشد . در بسیاری از ارائه دهنگان خدمات میزبانی وب ، این عمل فقط با یک درخواست انجام می شود . لطفا از مدیر یا گروه پشتیبانی ارائه دهنده خدمات میزبانی وب خود ، درباره فعال سازی دستیابی راه دور به پایگاه داده MySQL پرسش نمایید .
یک Data Source را ایجاد کنید . راه انداز ODBC مناسب را انتخاب و یک Data Source Name (DSN) برای برنامه های کاربردی ویندوز ، ایجاد نمایید . برخی تنظیمات پیچیده و بسیاری اصطلاحات که شما ممکن است با آنها نا آشنا باشید ، وجود دارد . اما براحتی مراحل را دنبال کنید تا به پایان ویزارد برسید .
برروی File | Get External Data |Import کلیک نمایید. بر روی New در پنجره Data Source کلیک نمایید . پنجره محاوره راه انداز MyODBC بایستی پدیدار شود .
ایجاد یک منبع داده جدید
در این بخش شما بایستی یک منبع داده جدید ایجاد نمایید . یک منبع داده ، مکانی است که”داده“ از طریق اتصال ODBC ، منتقل می گردد . نام منبع داده (DSN) همان نام پایگاه داده است . هنگامی که شما یک منبع پایگاه داده ایجاد می کنید ، هرنامی که دوست دارید می توانید به آن بدهید .
استفاده از ویزارد برای ایجاد یک منبع داده جدید
اولین مرحله ، ایجاد یک منبع داده جدید ویندوز است . این مرحله به برنامه های کاربردی ویندوز اجازه می دهد تا به پایگاه داده ODBC شما مرتبط شوند. User Data Source را انتخاب نموده و برNew کلیک نمایید . پنجره بعدی ، فهرستی از راه انداز های ODBC موجود را نشان می دهد که شما می توانید با آنها یک منبع داده ایجاد نمایید. ( می توانید به هر میزان که نیاز داشته باشید منبع داده با هریـک از راه انداز های موجود
ایجاد نمایید .) راه انداز MySQL را انتخاب کنید .
صفحه اطلاعات پالایش شده ای نمایش داده می شود که شامل نوع منبع داده و راه انداز ODBC انتخابی است . بر این اساس ، مرحله بعد به صورت اختیاری است و پیکربندی تنظیمات اختصاصی راه انداز می باشد بر روی Next کلیک نمایید. پانل تنظیم راه انداز MyODBC پدیدار می شود . این صفحه به شما اجازه می دهد تا نام DSN ، تنظیمات کارگزار راه دور و سایر تنظیمات سازگار را مشخص نمایید .شما هرنامی که در فهرست windows DSN شما یکتا باشد را می توانید برای این منبع داده انتخاب کنید .
پورت پیش فرض برای اکثر مواقع درست است . مقدار Server ، User ، Password و فیلد پورت نباید در صفحه نصب مشخص شده باشند . اگر آنها را در این بخش ، مشخص کرده اید ؛ به عنوان مقادیر پیش فرض در ارتباط های بعدی استفاده خواهند شد . مقادیر ، می توانند در زمان استفاده و در صورت نیاز تغییر کنند.
مرجع سریع تنظیمات
|
نام پایگاه داده شما که توسط windows استفاده خواهد شد. ( این نام می تواند هرجه شما می خواهید باشد ، هرجه به شما کمک کند تا پایگاه داده را به خاطر آورید و یا تشخیص دهید ، بهتر است.) |
Windows DSN |
|
آدرس IP و یا Domain میزبان کارگزار پایگاه داده ( می توانید از فراهم کننده خدمات میزبانی وب خود آنرا دریافت نمایید .) |
MySQL Host |
|
نام پایگاه داده راه دور است .( توسط فراهم کننده خدمات میزبانی وب و یا شما هنگامی که پایگاه داده را ایجاد کرده اید ، بدست می آید . ) |
MySQL Database Name |
|
نام کاربری است که می تواند به پایگاه داده راه دور متصل شود . ( از فراهم کننده خدمات میزبانی وب دریافت نمایید . ) |
User |
|
رمز عبوری است که برای دسترسی به پایگاه داده راه دور نیاز است . ( از میزبان وب خود بخواهید .) شما بایستی سطوح دسترسی درستی برای انجام برخی اعمال خاص مانند ایجاد و یا از بین بردن جداول اتخاذ نمایید . برخی مدیران به شما سه جفت User ID و Password می دهند . یکی برای فقط خواندن ، (SELECT) ، یکی برای دسترسی در حد خواندن و نوشتن (SELECT , INSERT , UPDATE) و دیگری برای کنترل در سطح مدیر) (CREATE TABLE , DROP TABLE , ALTER TABLE به اضافه تمام عبارات و دستورات دیگر SQL |
Password |
نکته : این آموختار MS ACCESS را برای مثال انتخاب کرده است . به خاطر آنکه Access بتواند بهتر با MyODBC کار کند ، شما بایستی مراحل زیر را دنبال نمایید :
- شما بایستی یک کلید اصلی در جدول داشته باشید .
- بایستی یک timestamp ( گاه فهرست ) در تمام جداولی که می خواهید ، قادر به بروز رسانی آنها شوید ، داشته باشید .
- فقط از فیلدهای double float استفاده نمایید . Access هنگامی که single float را مقایسه می کند، دچار مشکل می شود .
- گزینه “return matching rows “ را هنگامی که با MySQL ارتباط برقرار می کنید ، انتخاب نمایید.
- Access بر روی NT ، ستونهای BLOB را به عنوان OBJECTS OLE گزارش می دهد . اگر شما می خواهید ستونهای Memo داشته باشید ، بایستی ستون را به TEXT بوسیله دستور ALTER TABLE ، تغییر دهید .
- Access همیشه نمی تواند ستونهای DATE را به خوبی استفاده کند . اگر شما با این مساله مشکلی پیدا کردید ، این ستونها را به DATE TIME تغییر دهید.
- در برخی حالات ، ممکن است Access پرس وجوهای SQL نادرستی ایجاد کند که MySQL از درک آن ناتوان باشد ، شما می توانید این مشکل را با انتخاب “Query | SQL Specific | Pass-Through “ از منوی Access حل نمایید .
اولین باری که منبع داده (data source) ایجاد شد ، به پنجره محاوره Select Data Source بر می گردید . منبع داده ای را که ایجاد کرده اید از لیست انتخاب نمایید . بر OK کلیک نمایید . بایستی یک نسخه از جدول در پایگاه داده راه دور با تمام داده های شما ایجاد شده باشد . هیچ چیزی مبنی بر تایید ارسال داده، نخواهید دید . شما نیاز داری تا جدول را به پایگاه داده راه دور متصل (link) نمایید .
IV .دریافت وارسال جداول
دریافت یک جدول از یک پایگاه داده راه دور
پایگاه داده Access را باز نمایید . در پنجره پایگاه داده ، قطعه جداول (Tables) را انتخاب نمایید . به منوی File بروید و سپس از Get External Data ، “Import” را انتخاب نمایید .
در محاوره ، گزینه “To an External File or Database” را انتخاب نموده ، پنجره محاوره “Save As” نمایش داده می شود . در بخش Save As Type ، گزینه ODBC Database را انتــخاب نمایید .
بر Import کلیک نمایید .پنجره “Import Object” پدیدار می شود . اگر جدولی که می خواستید دریافت نمایید در لیست باشد ، آنرا انتخاب کرده و بر Ok کلیک کنید .
Access جدول را بوسیله پرس و جو با پایگاه داده راه دور از طریق اتصال ODBC دریافت می کند . این اتصال برای یک جدول بزرگ می تواند کند باشد . بنابراین یک فنجان قهوه صرف نمایید تا Access کار خود را انجام دهد !
ارسال یک جدول به پایگاه داده راه دور
پایگاه داده Access را باز کنید . در پنجره Database بخش جداول را انتخاب کنید . جدولی را برای ارسال انتخاب کرده به منوی فایل و سپس به Get External Data بروید ، پنجره Export مشاهده می شود . اگر نام جدول همانی است که شما می خواهید ، بر Ok کلیک نمایید . پنجره انتخاب منبع داده پدیدار می شود . بخش (tab) ، Machine Data Source را انتخاب نمایید .ما یک منبع داده جدید صرفا برای این پایگاه داده ایجاد می کنیم . این امر تماس مجدد با پایگاه داده را آسان می کند . بر New کلیک نمایید . پنجره Create New Data Source باز می شود . User Data Source را انتخاب نمایید. بر Next کلیک کرده و راه انداز MySQL را از لیست برگزینید . بر Next کلیک کنید . پانل ، اطلاعات راه انداز شما را نشان می دهد . بر روی Finish کلیک نمایید .
پس از آنکه منبع داده ایجاد شد . شما به محاوره Select Data source بر می گردید . منبع داده ای را که ایجاد کرده اید از لیست انتخاب نمایید . و بر Ok کلیک کنید . این امر بایستی یک نسخه مشابه از جدول بر روی پایگاه داده راه دور با تمام داده های شما ایجاد کند .شما بایستی جدول را به پایگاه داده راه دور منتقل نمایید. برای اتصال جدول ، از بخش جداول ، جدول مورد نظر را انتخاب کرده به File|Get External Data | link Tables ، در پنجره link ، فایلهایی از نوع ODBC Database () ، را انتخاب نمایید . پنجره محاوره Data Source ، ظاهر می شود . از بخش Machine Data Source ، نام منبع داده پایگاه داده خود را مجددا انتخاب نمایید . چندین پنجره خواهند آمد اولی شاید از شما بپرسد کدام جدول را می خواهید پیوند دهید ؟ جدول مورد نظر را انتخاب کنید . دیگر ی ممکن است از شما بپرسد کدام ستون بایستی دارای مقادیر یکتا باشد .( کلید اصلی ).اکنون جدول دوم با همان نام ظاهر می شود . اما یک آیکن ” کره “ نشان می دهد که این جدول راه دور است . شما می توانید با این جدول مانند دیگر جداول کار کنید . ایجاد یک گزارش بر پایه آن یا ایجاد یک فرم که شما می توانید برای بروز رسانی جدول راه دور استفاده کنید .
اخطار : ممکن است تغییر نام برخی ستونها در جدولی که می خواهید ارسال کنید ضروری باشد . MySQL
برخی کلمات را برای خود ذخیره ( رزرو ) کرده است . اکثر عبارات SQL ، رزرو شده اند . به عنوان مثال UPDATE یک کلمه رزرو شده است . بنابراین شما نمی توانید از آن به عنوان نام یک ستون استفاده کنید . جز آن ، نام توابع نباید با نام جداول و یا ستونها یکسان باشد .
یک پایگاه داده تهی Access را باز کنید . به File | Get External Data | Link Table بروید . و فایلهایی با نوع ODBC را انتخاب نمایید. بخش Machine Data Source را انتخاب و نام پایگاه داده خود را از لیست برگزینید . بر Ok کلیک نمایید .
محاوره Link Table پدیدار می شود . شما بایستی یک فهرست از نام جداول ببینید . جدولی را که می خواهید به آن متصل شوید انتخاب و بر Ok کلیک کنید .
محاوره Select Unique Identifier خواهد آمد . شما فهرستی را می بینید . از آن میان ستون یا ستونهایی را که می خواهید به عنوان کلید اصلی باشند ، مشخص نمایید .
شما بایستی یک جدول راه دور در بخش جداول خود ببینید . نشانه ” کره “ مشخص می کند که یک جدول به منبع داده راه دور متصل شده است . جدول را باز کنید بایستی داده های خود را در آن ببینید .
اخطار : MS Access 2000 مشکلی دارد که بر ارسال جداول به پایگاه داده راه دور اثر می گذارد . نام جدول هنگام صدور پایگاه داده ارسال نمی شوند . اگر شما فقط به File | Export | Select ODBC رفته و MyODBC را انتخاب کنید یک خطا ODBC ظاهر خواهد شد. این مشکل توسط مایکرو سافت حل شده ودر ویرایش جدید Access وجود ندارد . البته اتصال به جداولی که در پایگاه داده راه دور وجود دارند مشکل ایجا نمی کند . در صورتی که Access شما مشکل داشت می توانید از XP/Access 95/ 97 برای ارسال جداول استفاده نمایید .
انتخاب ها و سازگاری با MyODBC
سازگاری با ODBC
چند نکته برای سازگارکردن داده های شما با ODBC وجود دارد . این نکات از راهنمای MySQL گرفته شده است . مقادیر (“Zero”) مقادیری ویژه اند . اما با استفاده از مقادیر نشان داده شده در جدول می توانید آنها را نگهداری کرده و یا به طور صریح به آنها ارجاع دهید . همچنین می توانید به جای آن از ‘0’ یا
0 استفاده کنید که برای نوشتن نیز آسانتر است . مقادیر زمان وتاریخ “zero” که در MyODBC به کار رفته باشند به طور اتوماتیک به NULL در MyODBC 2.50.12 و بالاتر تبدیل می شوند. چون ODBC نمی تواند چنین مقادیری را بکار برد.
MyODBC مقادیر BLOB را به عنوان LONGVARBINARY و مقادیر TEXT را به عنوان LONGVARCHAR تعریف می کند .
تاریخ بخصوص ‘0000-00-00’ در MyODBC می تواند ذخیره شود . هنگامی که تاریخ ‘0000-00-00’ ، در MyODBC استفاده می شود . به طور خودکار به NULL در MYODBC 2.50 و بالاتر تبدیل می گردد چون ODBC نمی تواند این نوع تاریخ را بکار برد.
توابع رشته ای ، اکنون VARCHAR را بجای CHAR بر می گردانند و نوع ستونهایی که به عنوان CHAR ذخیره شده اند به صورت VARCHAR تبدیل می شوند. این عمل باعث بهتر شدن عملکرد راه انداز MyODBC می گردد. ولی ممکن است برخی از کلاینت های قدیمی MySQL را دچار مشکل نمایند.آنهایی که نمی توانند از نوع فیلد VARCHAR بجای نوع فیلد CHAR استفاده کنند .
آموختن انتخابهای MyODBC
MyODBC به کاربر اجازه می دهد تا چندین انتخاب را که بر رفتار اتصال ODBC موثراند انتخاب نماید. برخی از گزینه ها را شرح می دهیم .
Trace MyODBC
این گزینه واقعه نگاری (LOGGING) از دستورات SQL که به کارگزار MyODBC ارسال شده اند را فعال می سازد. انتخاب فوق زمانی که شما با اتصالی دشوار به پایگاه داده ، روبرو هستید مفید است . گزارش در فایل “myodbc.log” و در درایو C:\ نوشته می شود . ( توجه کنید که شما بایستی MySQL.dll را برای این انتخاب استفاده نمایید و از بکارگیری mysql2.dll خودداری کنید .) اولین باری که شما یک فایل گزارش ایجاد کردید پرس وجو هایی که MyODBC به کارگزار MySQL فرستاده اسـت را بررســـی کنـــید . بایســتی بتـــوانید پــرس و جــوها را به وسیــله جستـــجوی رشــته ">mysql_real_query" در فایل MyODBC.log بیابید .
ALLOW BIG results
SQL_BIG_ Result می تواند با GROUP BY و DISTINICT به کار رود تا به بهینه ساز گفته شود مجموعه پاسخ می تواند سطرهای بسیاری داشته باشد . در این حالت ، MySQL مسقیما جداول موقت
را در صورت نیاز بکار برد . MySQL در این حالت ، ترجیح می دهد تا یک مرتب سازی انجام دهد به جای آنکه یک جدول موقت بر روی عناصر GROUP BY انجام دهد .
Don’t Prompt on Connect
هنگامی که یک اتصال ODBC ایجاد می شود از کاربر نخواهد خواست تا به صورت دستی ، نام کاربری و رمز عبور را وارد نماید ( واحتمالا سایر اطلاعات مورد نیاز )
سایر گزینه ها از این قرارند :
Ignore # in #.table.
Use manager cursors (experimental).
Don't use setlocale.
Pad CHAR to full length.
Return table names in SQLDescribeCol.
Use compressed protocol.
Ignore space after function names.
Don't optimize column width.
Force use of named pipes.
Change BIGINT columns to INT.
No catalog (experimental).
Read options from C:\my.cnf.
اجرای ایمن اسکریپت های PHP
استفاده از مخفی کننده اسکریپت
برای اتصال به یک پایگاه داده نیاز است که رمز های عبور آن در برخی قسمتهای اسکریپت وجود داشته باشد . اسکریپت های دیگر شما ممکن است اطلاعات حساس خود را داشته باشند . این اطلاعات اگر شما اسکریپت های PHP خود را پنهان نکنید ، ممکن است افشا شوند . حفاظت کردن اسکریپتهایتان از چشمهای کنجکاو “wrapping” گفته می شود . هنگامی که شما یک اسکریپت را می پوشانید توسط اسکریپت دیگری که برنامه اصلی شما را پنهان کرده و آزمایشهای ایمنی را برای حصول اطمینان از دستیابی مجاز انجام می دهد ، فراخوانی می گردد .
دیگر کاربران رمز عبورها را چگونه می بینند ؟
دو راه وجود دارد :
1 )اگر شما به اندازه کافی دقت به خرج ندهید و رمز عبورهای خود را در ریشه اصلی وب تان و در درون فایلی که توسط مفسرPHP تجزیه و تحلیل نمی شود، قرار دهید (مانند http://www.mysite.com/pass.txt ) هر کسی می تواند آنرا دریافت کند و محتویاتش را بدست آورد . این امر به شدت نادرست است .
2 ) اگر شما رمز عبورهای خود را در فایلی قرار دهید که می تواند توسط وب سرور به طور مستقیم یا بوسیله دیگر کاربرانی که در گروه شما و در همان سرور هستند ، خوانده شود .بکار گیری این روش بجز توسط افرادی که می توانند یک وب سرور اختصاصی داشته باشند توصیه نمی شود .
اگر شما رمز عبور ها را در یک فایل که توسط دیگر کاربران قابل خواندن است ، قرار دهید آنها می توانند بوسیله FTP ویا Telnet به شاخه شما رفته و فایلها را مسقیما بخوانند . برخی میزبانهای وب از این رفتار توسط “chrooting” جلوگیری می کنند .(“usr/home/username” را هنگامی که شما وارد می شوید برابر با “/” می کند . Chroot دستور UNIX برای تغییر ریشه است .) اما بسیاری از میزبانها در مورد فایلهایی که صرفا اجازه خواندن آن به وب سرور داده شده است ، اجازه دسترسی را به دیگر کاربران نمی دهند. در این حالت نیز دیگران می توانند اسکریپتی بنویسند که با مشخه کاربری “nobody” کار کند . و این اسکریپت می تواند به تمام فایلهایی که در سرور وجود دارد و صرفا توسط آن خوانده می شود ، دسترسی پیدا کند.
Wrapping چگونه از این امر جلوگیری می کند ؟
Wrapping نام کاربری کسی که به فایل می تواند دسترسی داشته باشد را برابر نام کاربری شما قرار می دهد . یک مخفی کننده ایمن ، چندین بررسی و آزمون امنیتی بر روی درخواستها ، قیل از اجرای آنها انجام می دهد .
Php-cgiwrap چیست ؟
یک اسکریپت مخفی کننده برای PHP است . cgiwrap یک اسکریپت مخفی کننده برای برنامه های Perl است و php-cgiwrap نسخه مربوط به PHP آنست که توسط PairNetworks تهیه شده و صرفا بر روی سرورهای آنان کار می کند . اگر از میزبان دیگری استفاده می کنید روشهای دیگری برای مخفی کردن وجود دارد که می توانید از آنها استفاده کنید .
پوشش شفاف
آخرین بحث ما درباره PHP مربوط به پوشش شفاف برای ایمنی صفحات است . برخی میزبانان وب پوشش شفاف لاینفکی برای صفحات PHP ارایه کرده اند . اگر صفحات از پسوند .php3 استفاده نمایند و در این صورت شما اصلا متوجه نخواهید شد که صفحات شما از پوشش استفاده می کنند اما نکته مهم آنست که از فراهم کننده خدمات میزبانی وب خود در این باره پرسش نمایید .
راههای مختلفی برای اجرای این کار وجود دارد . شما می توانید از mod-rewrite استفاده کنید تا به طور خودکار تمام درخواستهای PHP از طریق اسکریپت مخفی کننده ارسال شود . یا از خدمات سرور Apache suExec استفاده نمایید . برای اطلاعات بیشتر از نشانی http://www.apache.org/docs/suexec.htm استفاده کنید .
اخطار : اگر میزبان وب شما راهی برای اجرای ایمن اسکریپت هایتان پیش بینی نکرده ، و راهی برای مخفی کردن رمز عبور ها از دید کاربران کنجکاو ندارید. بایستی به میزبانی مراجعه کنید که بیشتر نسبت به امنیت کاربران اهمیت قایل است .
مهدی علیدوست . زمستان 1380
مراجع :
http://www.php.net/docs.php
http://www.phphelp.com
اخبار
اخبار دنیای رایانه در ایران اخبار دنیای رایانه در جهان اخبار اینترنت در جهان اخبار اینترنت در ایران اخبار امنیت و هک وب سایت های ایرانیآخرین محصولات
|
|
آنتی ویروس + فایروال Emsisoft تک کاربره
قیمت: 312000 ﷼ |
|
|
آنتی ویروس emsisoft سه کاربره
قیمت: 312000 ﷼ |
|
|
آنتی ویروس emsisoft یک کاربره
قیمت: 232000 ﷼ |
|
|
E7520
قیمت: 1 ﷼ |
|
|
E7530
قیمت: 1 ﷼ |
| محصولات جدید | |
ورود كاربر
رأی گیری
دیگر وب سایت های ما
تبادل لینک فقط با پیج رنک 4 و 5:
ایران تجارت |
موبایل |
دانلود |
ایران سیتی |
دانلود |
سایت تخصصی اندروید |
آگهی رایگان شیراز تجارت |
پرتال آی تی مگ |
دانلود رایگان کلیپ |
فروشگاه اینترنتی |
آرشیو فیلم های آموزش کامپیوتر |
قالب وبلاگ |
دانلود پروژه و نرم افزار |
سایت فرهنگی سیناکو |
سایت تفریحی دیف دیفی |
پرشین رکس |
مقالات دانشجویی |
دانلود رایگان |
عکس |
سایت درج آگهی و تبلیغات |
بهترین سایت تفریحی دنیا |
منتظر برای تایید:
آپلود عکس رایگان |
عکس |


2 نظر