صفحه 1 از 2 12 آخرینآخرین
نمایش نتایج: از شماره 1 تا 10 , از مجموع 16

موضوع: Php

  1. #1
    مدیر بازنشسته
    تاریخ عضویت
    2008/10/14
    سن
    36
    نوشته ها
    3,180

    Php

    مباحث مربوط به آموزش Php

  2. #2
    مدیر بازنشسته
    تاریخ عضویت
    2008/10/14
    سن
    36
    نوشته ها
    3,180

    Post روش نصب PHP بروى Windows ها

    روش نصب PHP بروى Windows ها

    روش نصب PHP بروى windows 95/98/Me NT/2000/XP
    PHP بر روى win32 بدو صورت نصب مىشود

    1 - بصورت CGI executable
    2 - بصورت server module SAPI

    1 - نصب PHP بصورت CGI executable :
    نصب PHP بصورت CGI executable بسيار ساده مىباشد براى اين كار شما بايد بر روى PC خود يكى از web server هاى زير را داشته باشيد

    Personal Web Server 3 and 4 or newer
    Internet Information Server 3 and 4 or newer
    Apache 1.3.x
    OmniHTTPd 2.0b1 and up
    Oreilly Website Pro
    Xitami
    Netscape Enterprise Server, iPlanet
    در سايت www.php.net شما مىتوانيد php Installer را بر روى PC خود ذخيره كنيد
    اين برنامه php را بر روى PC شما بصورت CGI executable و با پشتيبانى MySQL نصب خواهد كرد و web Server شما را بصورت automatic تنظيم خواهد كرد
    --------------------------------------------------------------------------------
    2 - نصب PHP بر روى win32 بصورت server module SAPI :

    نصب PHP بصورت server module SAPI بر روى Apache توسط دوست عزيزمان آقاى على نادرى در قسمت مقالات بطور كامل توضيح داده شده است
    و اما نصب PHP بر روى IIS :
    جهت اين كار ابتدا بايد PHP را از اين آدرس Windows Binaries بر روى PC خود ذخيره كنيد
    محتويات اين فايل كه بصورت zip است را در شاخه‌اى كه مىخواهيد php را نصب كنيد قرار دهيد c:\php خوب است
    پس از اين كار فايل‌هاى php4ts.dll و sapi/php4isapi.dll و dlls/*.dll را در شاخه system ذخيره كنيد

    c:\windows\system for Windows 9x/ME
    c:\winnt\system32 for Windows NT/2000
    c:\windows\system32 for Windows XP
    فايل php.ini-recommended را به php.ini تغيير نام داده و در شاخه WINDOWS ذخيره كنيد
    در فايل php.ini تغييرات زير را ايجاد كنيد:
    شما بايد extension_dir را به شاخه extension هاى مورد نظر خود تغيير دهيد چنانچه مطابق با توضيحات پيش رفته باشيد اين مسير c:\php\extensions مىباشد
    فايل browscap.ini را در

    c:\windows\system\inetsrv\browscap.ini on Windows 9x/Me,
    c:\winnt\system32\inetsrv\browscap.ini on NT/2000,
    c:\windows\system32\inetsrv\browscap.ini on XP.
    جنانجه پس از نصب PHP فايلهاى شما در شناختن variable ها مشكل داشتيد در فايل php.ini پارامتر register_globals را از off به on تغيير دهيد
    سپس در IIS در قسمت

    Home Directory > configuration > App Mappings :

    Executable : C:\WINNT\system\php4isapi.dll
    Extension : .php
    را اضافه كنيد در قسمت ISAPI نيز

    Filter Name : php
    Executable : C:\WINNT\system\php4isapi.dll


    پس از يك بار stop / start كردن IIS شما مىتوانيد PHP را بر روى PC خود اجرا كنيد
    ویرایش توسط !MAHSA! : 2013/09/09 در ساعت 15:02

  3. #3
    مدیر بازنشسته
    تاریخ عضویت
    2008/10/14
    سن
    36
    نوشته ها
    3,180

    Post انواع متغييرها در Php

    انواع متغييرها در PHP

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

    من در اينجا سه دسته مختلف از انواع متغيير ها را توضيح مي دهم.

    1) اعداد (numbers)
    2) رشته ها (String)
    3) آرايه ها (arrays)

    دسته اول شامل دو نوع متغيير است:

    1)اعداد صحيح (integers)
    2)اعداد اعشاري (floating - point) ( همچنين اعداد اعشاري با دقت مضاعف double)

    اما از آنجايي که تفاوت چنداني در چگونگي به کار بردن اين دونوع متغيير وجود ندارد . اين دو را در يک دسته قرار مي دهيم.

    PHP همچنين داراي يک نوع متغيير به نام شيء (object) مي باشد.

    اعداد
    نکته:اعداد به صورت اعشاري ( همراه با مميز ) و يا اعدا کسري از نوع متغييرهاي اعشاري محسوب مي شوند. براي مثال (1.0) در PHP يک عدد اعشاري به حساب مي آيد. توجه کنيد که در PHP اعداد به صورت کسري ذخيره نمي شوند بلکه معادل اعشاري خود تبديل شده و سپس ذخيره مي شوند.

    مثالهايي از اعداد صحيح معتبر:

    آ 1آ و 1972آ و 1-

    مثالهاي از اعداد اعشاري :

    1.0آ و 19.72 و 1.0-

    همچنين مثالهاي که در دسته اعداد قرار نمي گيرند:

    4/11 a1972 آ 02.23.72

    رشته ها
    يک متغيير از نوع رشته اي (String) از ترکيب هر نوع کارکتري ( حروف - اعداد - علائم و جاي خالي ) مي تواند ساخته شود.اما اين کارکترها بايد در داخل يکي از علامتهاي Single(' ') Quotation و يا (" " ) Double Quotation قرار گيرند.

    مثال:
    HELLO , WORLD !""

    "hello frist name ! "

    "1 1/4"

    "how are you?"

    "02.23.72"

    "1972"
    نکته : اگر عدد نيز در داخل Quotation قرار گيرد يه عنوان يک داده رشته اي در نظر گرفته مي شود.

    مثالهاي از داده هاي رشته اي غير مجاز:

    hello world!

    how are you" " "I Said," "

    توجه!!!

    شايد اين سئوال در ذهن شما به وجود بياد که چطوري مي تونيم يک علامت " را به مرور گر ارسال کنيم؟

    ما مي تونيم اين مشکل رو در PHP به اين صورت رفع کنيم که قبل از علامت quitation از علامت () استفاده کنيم!!!

    پس وقتي ما در دستور print() اين عبارت (I Said, "How are You?" "") رو تايپ کنيم خروجي اين دستور به صورت ( I Said, "How are You?" ) خواهيد ديد.

    بنابراين هر چند که گفته شد در داده رشته اي هر ترکيبي از کاراکترها به کار مي رود. بايد توجه داشته باشيد که در مورد کاراکترهاي ويژه بايد دقت خاصي اعمال شود. کاراکترهاي ويژه ديگري نيز وجود دارند که هنگام استفاده از آنها در يک داده رشته اي بايد علامت backslash () قبل از آنها قرار دهيم.

    اين کاراکتر ها عبارت است از:

    single quotation ( ' )

    apostrophe

    backslash

    و علامت dollar

    نکات:
    -مزيت استفاده از double quotes به جاي single quotes در اين است که در حالت دوم اگر متغييري داخل داده رشته اي خود به کار ببريد نام متغيير به عنوان جزئي از داده در نظر گرفته مي شود و نه مقدار آن متغيير جايگزين نام آن نمي شود.

    - در درسهاي قبلي اشاره شد که در ترکيب براي مثال در تابع print() باعث ايجاد خط جديد مي شود. بنابراين مشاهده مي کنيد که در اين حالت خاص علامت backslash باعث در نظر گرفتن n به صورت يک کاراکتر معمولي نشد.از موارد خاص ديگر مي توان به ترکيب ( بازگشت خطي ( carriage return)) و ( براي قرار دادن يک tab) اشاره کرد.

    آرايه ها:
    از آنجايي که آرايه ها کمي پيچيده تر از داده هاي عددي و رشته اي به حساب مي آيند.در اين قسمت تنها مختصري در مورد آنها توضيح داده مي شود و در درسهاي آينده با کاربرد هاي آن بيشتر آشنا خواهيد شد.

    بر خلاف داده هاي عددي و رشته اي که تنها مي توانند داراي يک ارزش و يا مقدار باشند. آرايه ها مي توانند حاوي ليستي از مقادير باشند.بنابراين شما مي توانيد مقادير مختلف عددي و يا رشته اي را داخل يک آرايه قرار دهيد. همچنين آرايه ها خود مي توانند شامل ليستي از آرايه ها باشند.

    نکته:
    - آرايه هاي استاندارد در PHP از مقادير دادهاي و يا عددي تشکيل مي شوند ( اين آرايه ها به آرايه هاي شماره گذاري شده ( indexed ) و يا برداري ( vector ) نيز معروف هستند.)

    و اين همانآ نامي است که Perl به اين دسته از آرايه ها نسبت مي دهد. در Perl آرايه هايي که خود از آرايه هايي که خود از آرايه تشکيل شده باشد. به نامهاي آرايه هاي hash و associative و multi_dimensional شناخته مي شوند. در PHP به هر دو دسته ( يک يا چند بعدي ) لفظ آ« آرايه آ» اطلاق مي شود.

    نسبت دادن مقادير به متغييرها
    در PHP شما به اعلان ( declare ) متغييرها احتياج نداريد. همچنين نوع يک متغيير در هنگام عمل انتساب مشخص مي شود.

    در PHP براي نسبت دادن يک مقدار به يک متغيير و ذخيره آن مقدار از علامت مساوي ( = ) استفاده مي کنيد.در اين هنگام اين علامت با نام عملگر انتساب ( assignment Operater ) خوانده مي شود.

    مثال:

    $number = 1;

    $floating-number = 1.2;

    $string = "Hello,World!";

    نکته:در PHP نيز همانند Java Script نوع متغيير در طول برنامه مي تواند تغيير کند.

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

    برنامه هاي کاربردي سرويس دهنده وب ( web server applivations (مانند Apache )

    سيستم عاملهاي سرويس دهنده وب ( web server operationg system ( مانند windows nt و يا Solaris)

    و يا در خود مدل PHP .

    در دو دسته اول اين متغيير ها به متغييرهاي محيطي ( variables enviromental ) معروفند .

    متغييرهاي از پيش تعريف شده در سرويس دهنده هاي مختلف ممکن است داراي تفاوتهايي باشند . بنابراين براي مشاهده اين متغييرها بهتر است از تابع phpinfo() که در درسهاي قبلي توضيح داده ام استفاده کنيد.

    دو دليل براي آشنايي شما با مفهوم متغييرهاي از پيش تعريف شده وجود دارد.

    دليل اول اينست که اين متغييرها در برنامه نويسي شما کاربرد خواهند داشت و دليل ديگر آنکه با شناخت اين متغييرها شما ديگر به صورت تصادفي نام يک متغيير را هم نام با اين متغييرها انتخاب نمي کنيد.

    نمونه هايي از متغييرهاي محيطي سرويس دهنده عبارتند از: Hostname ( نامي که سرويس دهنده به خود نسبت داده است) و Ostype ( سيستم عاملي که بر روي سرويس دهنده در حال اجراء مي باشد.)

    نمونه هاي از متغيير هاي محيطي Apache عبارتند از: Document_Root ( مکان ذخيره فايل ها بر روي سرويس دهنده) و HTTP_USER_AGENT ( جزئياتي در مورد مرورگر و Platfrom کاربر را ارائه مي دهد).

    متغيير PHP-SELF پر کاربردترين متغيير PHP مي باشد که نام صفحه جاري را در خود ذخيره کرده است .

    نکته:اگر شما متغييرهاي خود را هم نام با متغييرهاي محيطي سيستم نامگذاري کنيد. نتايجي عجيب و منحصر به فردي حاصل مي شوند. هر چند احتمال انجام اين کار اندک مي باشد. با اين وجود بهتر است لستي از متغيير هاي محيطي سيستم را در هنگام نامگذاري متغييرها در برابر خود داشته باشيد.

  4. #4
    مدیر بازنشسته
    تاریخ عضویت
    2008/10/14
    سن
    36
    نوشته ها
    3,180

    Post درج تاريخ شمسی، ميلادی و ساعت جاری در صفحات Html

    درج تاريخ شمسی، ميلادی و ساعت جاری در صفحات HTML

    من 3 تا فايل خيلي كوچيك php درست كرده بودم براي درج تاريخ و زمان فعلي در صفحات HTML. بهتر ديدم اين فايلها رو در اختيار شما هم قرار بدم.

    اين فايلها رو از اينجا داونلود كنيد. فايل شامل سه فايل: currenttime.php، currentdate.php و currentjdate.php به صورت زيپ شده است. فايلها را در يك سرور لينوكس آپ لود كنيد و به وسيله قرار دادن دستورهاي زير در صفحات HTML اونها رو صدا بزنيد:

    براي ساعت جاري:

    <script language="javascript" src="http://yoursite.com/currenttime.php">

    براي تاريخ جاري به صورت ميلادي:

    <script language="javascript" src="http://yoursite.com/currentdate.php">

    براي تاريخ جاري به صورت شمسي:

    <script language="javascript" src="http://yoursite.com/currentjdate.php">

    تاريخ به صورت يوني كد است بنابراين بايد صفحه شما هم يوني كد باشد. در ضمن اين كد شامل تگهاي تبديل دايركشن به راست به چپ هم هست.

    به جاي yoursite.com آدرس مكاني كه فايلها در آنجا آپلود شده است را وارد كنيد. البته لازم نيست اين فايلها حتما روي سايت خودتان باشد. ميتوانيد فايلها را روي سايتهايي كه فضاي مجاني با پشتيباني از php ميدهند قرار دهيد.

  5. #5
    مدیر بازنشسته
    تاریخ عضویت
    2008/10/14
    سن
    36
    نوشته ها
    3,180

    Post Hot Linking(نقره داغ وب مسترها)

    اگه شما هم سايتی داريد که میزبان تصاوير و عکسهای منحصر به فردی هست، يکی از مشکلاتی که با اون مواجه اید، Hot Linking است. يعنی سايتهای ديگه، با لينک دادن به تصاوير در صفحات خودشون، چنان وانمود می کنند که اين عکسها، توسط اونها گرفته شده و متعلق به اونهاست و یا میزبانی تصاویر رو بر عهده دارند. علاوه بر مسائل کپی رايتی که پيش مياد، Hot Link شدن تصاوير، پهنای باند شما رو هم مصرف میکنه. راه حلهای مختلفی برای حل این مشکل پیشنهاد میشه. یک راه حل مستلزم استفاده از امکان mod_rewrite آپاچی هست که بر حسب اطلاعات رجوع دهنده(referral) که مرورگر در اختیار میگذاره(که نمیشه همیشه به اون اعتماد کرد) ببینیم که آیا رجوع دهنده، آدرس وب خودمون هست یا نه. برای مثال:

    SetEnvIfNoCase Referer "^http://www\.phpmystery\.com/" locally_linked=1
    SetEnvIfNoCase Referer "^http://phpmystery\.com/" locally_linked=1
    SetEnvIfNoCase Referer "^$" locally_linked=1

    <FilesMatch "\.(gif|png|jpe?g)$">
    Order Allow,Deny
    Allow from env=locally_linked
    </FilesMatch>


    راهکار ديگر استفاده از Session است تا معلوم کنيم، بازديد کننده ای که در حال مشاهده تصوير است، از سايت ما می باشد. اينکار بدين طريق صورت ميگيرد که ابتدا متغييری در Session رجيستر می کنيم که در صورت وجود اين متغير، ويزيتور قادر به مشاهده تصاوير است. البته اسکريپت دومی هم وجود دارد که تصاوير رو رندر ميکنه:

    <?php
    // Start a session
    session_start();

    // Register a variable in the session
    $_SESSION['viewImages'] = TRUE;
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <title> Preventing Hotlinking </title>
    <meta http-equiv="Content-Type"
    content="text/html; charset=iso-8859-1" />
    </head>
    <body>
    <p>Here is the image:</p>
    <img src="11.php?img=php-big.png" />
    </body>
    </html>


    همانطور که متوجه شديد، در اسکريپت بالا ابتدا يک Session رو آغاز می کنيم، در ادامه متغير viewImages رو در Session رجيستر می کنيم. سپس از تگ img به يک اسکرپيت PHP اشاره می شود که وظيفه واکشی تصوير رو بر عهده داره.
    کد اسکريپت دوم:

    <?php
    // Start a session
    session_start();

    // Check to see if $viewImages is registered
    if (isset($_SESSION['viewImages']) &&
    $_SESSION['viewImages'] == TRUE) {

    // An array of available images
    $images = array(
    'phpmystery_logo.jpg',
    'php-big.png'
    );

    // If $_GET['img'] is set and is available...
    if (isset($_GET['img']) && in_array($_GET['img'], $images)) {

    // Get the image information
    $dims = getimagesize('sample_images/' . $_GET['img']);

    // Send the correct HTTP headers
    header('content-disposition: inline; filename=' .
    $_GET['img']);
    header('content-type: ' . $dims['mime']); # PHP 4.3+
    header('content-length: ' .
    filesize('sample_images/' . $_GET['img']));

    // Display the image
    readfile('sample_images/' . $_GET['img']);

    } else {
    die('Invalid or no image specified');
    }

    } else {
    die('This image is protected from hotlinking');
    }
    ?>


    در اسکريپت بالا، ابتدا بررسی می شود که آيا متغير viewImage در Session رجيستر شده و مقدار آن برابر True است. اگر چنین بود، سپس نام فايل تصويری که در آرايه سراسری GET_$ رجيستر شده، بررسی می شود که در آرايه تصاوير موجود باشد. بعد از اين مرحله، اسکريپت با استفاده از تابع getimagesize نوع فايل(MIME type) را تشخيص داده و هدرهای مناسب رو فرستاده و نهایتا تصوير را نمايش ميدهد.
    با اينکار جلوی تمام Hot Linker ها رو می تونيد بگيريد.

  6. #6
    مدیر بازنشسته
    تاریخ عضویت
    2008/10/14
    سن
    36
    نوشته ها
    3,180

    Post يا بافر کردن خروجی

    يا بافر کردن خروجی

    Buffering يا بافر کردن خروجی، امکان پیشرفته ای است که از نسخه چهار PHP افزوده شده است. با فعالسازی OB، دیگر خروجی حاصل از اجرای اسکریپت شما، مستقیما به سمت کلاینت ارسال نمی شود و در عوض، این خروجی در حافظه موقتی سرویس دهنده که اصطلاحا بافر نامیده می شود، ذخیره می شود.
    خوب؛ با قرار گرفتن خروجی در بافر، می توان قبل از ارسال محتویات به مرورگر، یک سری عملیات خاص روی خروجی انجام داد. برای مثال در اين مطلب، به کاربرد بسیار سودمند آن یعنی «فشرده سازی محتوا » اشاره کردم. از دیگر عملیاتی که می توان نام برد، تبدیل اسناد XML به HTML (مثلا اطلاعات را از سند XML بخوانیم و بوسیله تگهای HTML نمایش دهیم) یا مثلا به کمک عبارات باقاعده (regex)، تمام لینکها یا اصطلاحا URLهای گنجانده شده در خروجی را تغییر داد. یا هر عملیاتی که برای دستکاری رشته کاراکتر می تونید فکرشو بکنید.
    بعد از انجام تغییرات، خروجی پردازش شده را می توان به راحتی به سمت کلاینت ارسال و بافر را خالی کرد.

    شاید پیش خودتون فکر کنید، اگه من نخوام عملیاتی روی خروجی اپلیکیشن ام انجام بدم چی؟
    حتی اگه شما نخواهید، پردازش خاصی روی خروجی اپلیکیشن اتون انجام بدید، بافر کردن خروجی، پرفورمنس و بازدهی سایتهای وب مبتنی بر PHP را بهبود می بخشد، زیرا تعداد عملیات های ورودی/خروجی(I/O) روی سرویس دهنده را کاهش می دهد. فراخوانی لایه I/O سرویس دهنده وب، معمولا عملیات پرخرجی است. گردآوری خروجی در یک بلاک بزرگ و انجام تنها یک عملیات I/O روی آن به مراتب سریعتر از زمانی است که برای هر تکه خروجی منتشر شده توسط PHP، یک عملیات I/O صورت پذیرد. منظورم زمانی است که دستورات echo و print را صدا می زنید.

    حالا اگر اسکریپتهای PHP شما، صفحات HTMLای با حجم بیش از 10K را بعنوان خروجی تولید می کنند، تخصیص و آزادسازی بافر، ممکن است زمان بیشتری را در مقایسه با کاهش دفعات عملیات های I/O مصرف کند. بنابراین مطابق سایر مواردی که در علوم کامپیوتر وجود دارد، راه حل، یافتن تعادل مناسبی بین پرهیز از بافرینگ و استفاده تمام و کمال از بافرینگ است. خوشبختانه، بافرکردن خروجی PHP به کاربران امکان رسیدن به این تعادل را می دهد. به جای اینکه تمام خروجی بافر شود، ما می توانیم به PHP بگیم که خروجی را بصورت Chunked(قطعه ای) بافر کند. با بافر کردن خروجی به صورت قطعه ای، ما می توانیم مقدار داده های بافر شده را تا مقدار معینی محدود کنیم و هر موقع که به این مقدار رسیدیم و اصطلاحا بافر پر شد، بافر را خالی کنیم. مقدار متعادلی که برای بافر کردن خروجی قطعه ای پیشنهاد می شود، 4K است.این مقدار به طرز قابل توجهی، دفعات عملیات I/O را کاهش می دهد، بدون اینکه مقدار زیادی از حافظه اشغال شود یا overhead تخصیص دهی حافظه قابل ملاحظه ای را تحمیل کند.

    برای نمونه، اگر اندازه متوسط یک صفحه HTML تولید شده توسط PHP برابر با 50K باشد، PHP معمولا بین ۵۰۰ تا ۱۰هزار عملیات I/O انجام میدهد. اما با یک بافر ۴ کیلوبایتی، این تعداد به ۱۲ تا ۱۳ عملیات کاهش می یابد که بسیار قابل توجه است.

    اگر می خواهید این بافر ۴ کیلوبایتی را برای تمام سایت خود فعال کنید، دستورالعمل output_buffering واقع در فایل پیکربندی php.ini را به مقدار ۴۰۹۶ ست کنید. اگه هم می خواهید برای اسکریپتهای خاصی از OB استفاده کنید، از تابع ob_start استفاده کنید. برای مثال با نوشتن:

    <?php
    ob_start(null, 4096);
    // rest of script
    ?>

    آماده استفاده از این بافر ۴ کیلوبایتی خواهید بود.

    *) Buffer مکانی در حافظه کامپيوتر است که می توان اطلاعاتی را به مدت کوتاهی در آن ذخیره کرد.(حافظه موقتی)

    توضیح تکمیلی:
    برمی گردیم به اون زمانی که OB نبود! برای ضبط خروجی یک اسکریپت، باید اون رو در یک رشته کاراکتر می ریختیم و وقتی کارمون تمام شد، اون رو اکو می کردیم.

    <?php
    $output = "<html><body>";
    $output .= "Today is ".strftime("%A, %B %e %Y");
    $output .= "</body></html>";

    echo $output;
    cache($output);

    اگه از اون دسته از برنامه نويسان وبی هستيد که اين رشته خطير! رو با اسکريپتهای CGI مبتنی بر Perl ياد گرفتيد، اسکريپت بالا يادآور خاطرات دردناکی است که باهاش مواجه هستید. اگه هم تجربه اين جور اسکريپتها را نداريد، تنها می تونيد دورانی رو تصور کنيد که اسکريپتهای وب اين شکلی بودند!
    با استفاده از OB، اسکريپت به حال عادی برگشت. تنها کاری که بايد انجام بديد، اينه که قبل از توليد خروجی بنويسيد:

    <?php ob_start(); ?>

    با اين کار، OB رو فعال می کنيد و از این به بعد، تمام خروجی ها، در بافر داخلی ذخيره می شود. حالا می تونيد کد صفحه را مثل يه اسکريپت معمولی، اضافه کنيد.

    <html>
    <body>
    Today is <?= strftime("%A, %B %e %Y") ?>
    </body>
    </html>

    خوب به جايی رسيديم که محتويات صفحه توليد شده؛ چه می کنيم؟! اول، محتويات بافر رو می گيريم و بعد هم اون رو خالی می کنيم.

    <?php
    $output = ob_get_contents();
    ob_end_flush();
    ?>

    ()ob_get_contents، محتويات فعلی بافر را به صورت رشته کاراکتر بر می گردونه که می تونيد هر بلايی سرش در بياريد. ()ob_end_flush هم بافرينگ رو متوقف می کنه و محتويات فعلی بافر رو به سمت کلاينت روانه می کنه. اگه بخواهيد، محتويات رو در يک متغير بصورت رشته کاراکتری ذخيره کنيد و ديگه اون رو سمت مرورگر نفرستيد، می تونيد ()ob_end_clean را صدا کنيد تا بافرينگ رو متوقف کنه و کل محتويات بافر رو هم منهدم کنه! نکته قابل توجه اين هست که هر دوی اين توابع، بعد از اتمام کارشون، بافر رو از بين می برند. بنابراين برای گرفتن محتويات بافر، تابع ()ob_get_contents رو بايد قبل از خاتمه بافرينگ فراخوانی کنيد.

  7. #7
    مدیر بازنشسته
    تاریخ عضویت
    2008/10/14
    سن
    36
    نوشته ها
    3,180

    Post چگونه Ip در Php لاگ می شود

    چگونه IP در PHP لاگ می شود

    برای ثبت IP کسانی که از سایت دیدار کرده اند باید کار های زیر را انجام دهیم:
    1 فایلی به نام log.php ایجاد کنیم.
    2 کد های زیر را در در فایل log.php قرار داده و ذخیره کنیم:

    <?php
    $ip = $SERVER['REMOTE_ADDR'];
    $fp = fopen("ip.txt", "a");
    fputs($fp, "$ip\n");
    fclose($fp);
    ?>

    3 فایلی به نام ip.txt ایجاد کنیم.
    4. فایل ها و CHMOD ip.txt را به 0666 آپلود کنیم.
    5. کد های زیر را در صفحه ی مورد نظر خود بالا تر از تگ <html> قرار دهیم:
    <? include ("log.php"); ?>
    برای دیدن نتیجه به yourwebsite.com/ip.txt مراجعه کنید.

  8. #8
    مدیر بازنشسته
    تاریخ عضویت
    2008/10/14
    سن
    36
    نوشته ها
    3,180

    Post Php و برنامه نويسی شی گرا

    PHP و برنامه نويسی شی گرا

    PHP تا چه حد شی گراست؟! آيا تمام امکاناتی که در زبانهای برنامه نويسی شی گرای کاملی همچون Java وجود داره، در PHP هم پشتيبانی ميشه؟! پاسخ به اين سوال تا حدی بر ميگرده به معيارها و شرايطی که شما برای شی گرا بودن یک زبان مدنظر داريد. در اين پست من سعی ميکنم امکاناتی که نوعا در يک زبان برنامه نويسی شی گرا وجود داره رو بررسی کنم و حرفايی که PHP در هر مورد برای گفتن داره رو تا حدی توضيح بدم. (این راهنما بیشتر برای کسانی هست که از زبانهای OO دیگری میخوان به PHP روی بیارن.)
    لازم به ذکر است که تنها به قابلیت های موجود در نسخه پایدار PHP که از Zend Engine 1 بعنوان مفسر(Parser) خود بهره می بره، پرداخته شده است.
    وراثت یگانه(Single Inheritance):
    PHP به شما اجازه میده که با استفاده از عبارت extends یک کلاس فرزند تعریف کنید که تمام مشخصه ها و رفتارهای کلاس والد رو دارا هست.(تعریف یک کلاس، از کلاس دیگه به ارث می رسه.)
    وراثت چندگانه(Multiple Inheritance):
    PHP از وراثت چندگانه پشتیبانی به عمل نمی یاره و هیچ نشانی از وراثت واسطه که در جاوا وجود داره دیده نمیشه. هر کلاس حداکثر یک کلاس والد خواهد داشت.
    سازنده ها(Constructors):
    هر کلاس می تونه یک تابع سازنده داشته باشه که در نسخه فعلی PHP که از Zend Engine 1 بهره می بره، باید همنام کلاس باشه. در نسخه بعدی PHP که مجهز به ZE2 می باشد، تابع سازنده هر کلاس ()construct__ نام خواهد گرفت. تابع سازنده کلاسهای والد به طور اتوماتیک فراخوانی نمی شن مگر اینکه صریحا احضار بشن!
    تخریب کننده ها(Destractors):
    نسخه فعلی PHP (با ZE 1) تابع تخریب کننده نداره، بیشتر به این خاطر هست که آزاد سازی حافظه و برگرداندن حافظه تخصیص یافته دست برنامه نویس نیست. اما نسخه های بعدی تابع تخریب کننده را دارا می باشد.
    کپسوله سازی و کنترل دسترسی(Encapsulation):
    هيچ پشتيبانی از کپسوله سازی در نسخه جاری PHP به عمل نيومده و تمام مشخصه ها و رفتارها Public هستند، اما تو نسخه بعدی دو نوع Private و Protected افزوده شده است.
    چند شکلی(Polymorphism):
    PHP چند شکلی رو به این صورت پشتیبانی میکنه که اجازه میده نمونه کلاس های فرزند به جای نمونه کلاسهای والد استفاده بشه.
    اتصال دیر یا زود(Early vs. late binding)
    دو پاسخ مناسب به این موضوع به قرار ذیل هست:
    ۱) از اونجایی که PHP یک زبان Loosely Type هست، این سوال پیش نمی یاد.
    ۲) تمام اتصالات Late هستند. در PHP مقادیر دارای نوع هستند ولی متغیرها بی نوع هستند، بنابراین این سوال که اگه نوع متغیر و مقدار متفات باشه کدوم متد فراخوانی بشه، به وجود نمی یاد.
    توابع ايستا(Static Functions)
    پشتيبانی صريحی از Class Functionها وجود نداره اما ميشه که با استفاده از سينتکس ()Classname::function ميشود تابع يک کلاس رو فراخوانی کرد. اين تابع تا وقتيکه به يک متغير داخلی ارجاع نکنه ، به عنوان يک Class Function در نظر گرفته ميشه.
    درون نگری(Introspection):
    در اين مورد PHP با دست پر ظاهر شده و توابع متنوعی برای کسب اطلاعات در مورد يک کلاس وجود داره، مثلا بازيابی نام کلاس، نام يک تابع، نام متغيرهای(مشخصه های) يک نمونه کلاس و ...

    در آینده بیشتر با این مفاهیم آشنا میشیم.

  9. #9
    مدیر بازنشسته
    تاریخ عضویت
    2008/10/14
    سن
    36
    نوشته ها
    3,180

    Post کوتيشن يا دابل کوتيشن؛ کی و کجا استفاده کنيم؟!

    آيا شما هم جز اون دسته از افرادی هستيد که هنگام کدنویسی PHP، همواره از دابل کوتيشن برای مشخص کردن يک رشته کاراکتر استفاده می کنيد؟!
    به نظر می رسه اکثر مثالها و نمونه هايی که حتی در راهنمای PHP وجود داره تمايل زيادی به استفاده از دابل کوت رو نشون میده. اگرچه راه دومی هم وجود داره که به مراتب بهتر از قبلی هم هست و اون استفاده از کوتيشن يا (Single Quote) به جای Double Quoteهاست. برای مثال به جای:

    <?php
    echo "Visit http://www.phpmystery.com";
    ?>

    ميتوان از:

    <?php
    echo 'Visit http://www.phpmystery.com';
    ?>

    استفاده کرد. خوب حتما اين تو ذهنتون شکل گرفته که «چه فرقی داره؟»
    پاسخ اينه که در مثال بالا هيچ تفاوتی وجود نداره اما به مثال زير توجه کنيد:
    ميخواهيم يه تکه کد HTML رو داخل يک متغير ذخيره کنيم؛ اگر از دابل کوتیشن استفاده کنیم:

    <?php
    echo "<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\">";
    ?>

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

    <?php
    echo '<table border="1" cellspacing="0" cellpadding="0">';
    ?>

    همونطور که می بينيد اگر رشته کاراکتر، حاوی کاراکتر (") باشه بايد اون رو با کاراکتر بک اسلش (\) اسکيپ کنيم تا Parse Error پيش نياد ولی در مثال دوم می بيينم که هر چه داخل (') باشه، عينا و حرف به حرف نوشته ميشه.
    دليل بعدی اينکه راه دوم پرفورمنس بالاتری داره! استفاده از کوتيشن همواره سريعتر از دابل کوتيشن هست و در برخی موارد اين تفاوت چند صد درصد ميشه!
    با نگاهی به Benchmark زیر فکر کنم همه چیز روشن بشه.

    double (") vs. single (') quotes
    Is a there a difference in using double (") and single (') quotes for strings. Call 1'000x
    + 101 % 1: single (') quotes. Just an empty string: $tmp[] = ''; Total time: 3[ms]
    + 100 % 2: double (") quotes. Just an empty string: $tmp[] = ""; Total time: 3[ms]
    + 111 % 3: single (') quotes. 20 bytes Text : $tmp[] = 'aaaaaaaaaaaaaaaaaaaa'; Total time: 3[ms]
    + 118 % 4: double (") quotes. 20 bytes Text : $tmp[] = "aaaaaaaaaaaaaaaaaaaa"; Total time: 3[ms]
    + 115 % 5: single (') quotes. 20 bytes Text and 3x a $ : $tmp[] = 'aa $ aaaa $ aaaa $ a'; Total time: 3[ms]
    + 461 % 6: double (") quotes. 20 bytes Text and 3x a $ : $tmp[] = "aa $ aaaa $ aaaa $ a"; Total time: 13[ms]
    + 113 % 7: double (") quotes. 20 bytes Text and 3x a \$ : $tmp[] = "aa \$ aaaa \$ aaaa \$ a"; Total time: 3[ms]


    نتيجه: توی رشته کاراکترهایی که در " قرار میدید، از کاراکتر $ به تنهایی استفاده نکنید، مگر اینکه بخواهید مقدار یک متغیر را جانشین کنید و اگر هم خواستید این کار رو انجام بدید بهتره اون رو با یک بک اسلش اسکیپ کنید.
    وقتی از کاراکترهای خاصی نظیر n\ یا r\ و t\ که برای فرمت بندی رشته کاراکتر بکار میره، استفاده می کنید، اگر اونها رو داخل ' قرار بدید اثر خودشون رو از دست میدن و باید حتما داخل " قرار بگیرند.

    <?php
    echo 'check out http://www.phpmystery.com' . "\n\r" . 'to discover unknowns about PHP';
    ?>

    با اين تفاسير ميشه گفت:
    ۱» اگر متغيری داخل رشته کاراکتر نيست که بخواهيد مقدارش جانشين بشه از کوتيشن استفاده کنيد.
    ۲» اگر متغيری داخل رشته کاراکتر باشه افزودن {} باعث سرعت عملکرد ميشه.(*)

    <?php
    $sql = "select * from `mytable` where `status` = '{$status}' order by name"
    ?>

    ۳» بجای دستور Print از Echo استفاده کنيد.

    (*) دو جا هست که آکولادها به کار ما ميان؛ اولا وقتی که بخواهيم يک سری کاراکتر درست چسبيده به نام متغير رو نمايش بديم و مورد بعدی وقتی عبارتی که ميخواهيم درون رشته کاراکتر جای بديم يک متغير ساده نباشه(مثلا یک آرایه دوبعدی یا خروجی متد یک آبجکت یا Property اون آبجکت باشه)
    برای مثال:

    <?php
    $sport1 = 'volley';
    $plan1 = "I will play $sport1ball in the summertime";
    $plan2 = "I will play {$sport1}ball in the summertime";
    ?>

    مشکل از اونجا ناشی ميشه که مفسر وقتی داخل یه رشته کاراکتر به $ برخورد کنه، تا رسيدن به فاصله خالی شروع به جمع آوری کاراکترها ميکنه و نام متغير رو تشخیص ميده و اگر قبلا مقدار گرفته بود، مقدارش رو جايگزين ميکنه وگرنه مقدار NULL يا هيچ رو به جای نام متغير قرار ميده. همونطور که فهميديد خروجی مثال بالا به قرار زيره:

    <?php
    // $plan1 = 'I will play in the summertime';
    // $plan2 = 'I will play volleyball in the summertime'
    ?>

  10. #10
    مدیر بازنشسته
    تاریخ عضویت
    2008/10/14
    سن
    36
    نوشته ها
    3,180

    Post نمايش متن بصورت تصويري در اينترنت

    نمايش متن بصورت تصويري در اينترنت



    < ?php
    function strimage($str){
    header ("Content-type: image/png");
    $font = 4;
    $width = ImageFontWidth($font) * strlen($str);
    $height = ImageFontHeight($font);

    $im = @ImageCreate ($width,$height);
    $background_color = ImageColorAllocate ($im, 150, 150, 150); //gray background
    $text_color = ImageColorAllocate ($im, 0, 0,0);//black text
    ImageString ($im, $font, 0, 0, $str, $text_color);
    ImagePNG ($im);
    }
    strimage("iranvig.com");
    ?>
    لازم هست بگم فقط در صورتي اين برنامه كار ميكنه كه شما اونو بعنوان يه صفحه php توي يه سايت كه php رو پشتيباني ميكنه آپلود كند چون دستورات ساختن تصوير از متن توي كلاينت اجرا نميشه.

صفحه 1 از 2 12 آخرینآخرین

کلمات کلیدی این موضوع

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •