وبلاگ فيکسل برای گرافيست ها
SharpLife وبلاگ شخصی مهدی تقی زاده
بازگشت شاهو طوفانی
اين صداگذاری و ميکس آخرشه!
نکته جالبی در مورد تابع output_add_rewrite_var
کاراکتر های فارسی در عکس توسط PHP
مصاحبه من با مجله وزین IranAMP
واژه های فناوری اطلاعات و برابر های پیشنهادی فرهنگستان
دوره های آموزش IT
استانداردهای کدنويسی PHP
| صفحه قبل


IranPHP
نماينده رسمي سايت PHP.net

webilix
منبعي براي برنامه نويسان PHP

phprun
وبلاگي خواندني براي تمام PHP كارها

ם تعداد بازديدكنندگان
كل: 924721
ديروز: 915
امروز: 771
ם تعداد كاربران آنلاين
7 نفر
ם پنج مراجعه آخر
liyxdrzko.is.com
djdgjkfbf.chez.com
sobesednikjm.hannnari.com
djdgjkfbf.chez.com
serx.wml.in
 
 
هفت نکته جهت سفارشی کردن htaccess.(نکته ۱ از ۷)
Error Documents
وقتی خطايی رخ ميده، آپاچی به فايل htaccess. مراجعه می کنه تا پاسخ مناسب رو اتخاذ کنه. اگه در اين فايل هيچ پاسخی پيدا نکنه يا اين فايل اصلا وجود نداشته باشه، به صفحه Error Document پیش فرض مرورگر رجوع ميشه.
رایج ترین کدهای وضعيت خطا در زير ليست شده است:

200 - OK (don't do this)
401 - Authorization Required
403 - Forbidden
404 - Page Not Found
405 - Method Not Allowed
500 - Internal Server Error

نکته: هرگز کد وضعيت خطای ۲۰۰ رو در فايل htaccess. به کار نبريد.
خوب حالا وقت يک نمونه عملی رسيده، ميخواهيم يک سند خطا برای کد وضعيت خطای ۴۰۴ که يکی از متداولترين خطاها در اينترنت است تنظيم کنيم. اين خطا زمانی رخ ميده که يک صفحه وب پيدا نشه.

ErrorDocument 404 /errorpages/404.html
با نگاهی به کد بالا، می بينيم که:
ErrorDocument: به سرويس دهنده ميگه که اين خط دارای يک گرداننده صفحه خطا هست و کد وضعيت خطا هم به دنبال آن می آيد.
errorpages/404.html/: صفحه ای که سرويس دهنده در هنگام مواجه شدن با اين شماره خطا بايد برای سرويس گيرنده ارسال کند.
در مثال بالا وقتی سرويس دهنده، صفحه مورد نظر رو پيدا نکند، فايل htaccess. به سرويس دهنده فرمان ميدهد که صفحه جايگزينی که در مسير errorpages/404.html/ قرار دارد را نمايش دهد. دقت کنيد که من لينک نسبی را از روت شروع کرده ام، از آنجايی که فايل htaccess. در ساب دايرکتوری ها هم تفسير ميشود، بنابراين همواره بايد لينکها را از روت شروع کنيم وگرنه سرويس دهنده قادر به يافتن صفحه موردنظر نخواهد بود.
برای ساير کدهای خطا هم ميتوان به طريق مشابه عمل کرد:

ErrorDocument 403 /errorpages/403.html 
ErrorDocument 500 /errorpages/500.html

 
نظرات شما(222)  
هفت نکته جهت سفارشی کردن htaccess.(مقدمه)
Apache اگه چند ماهی ميشه که تو اينترنت وبگردی ميکنيد و شاید هم يه سايت شخصی روی پلت فرم لينوکس برپا کرديد، حتما نام عجيب و غريب فايل htaccess. رو شنيديد. اين فايل کاربردهای عمومی زيادی داره مثلا ايجاد دايرکتوری های حفاظت شده توسط رمز عبور، ساختن صفحات خطای شخصی، ليست گرفتن از فايلهای يک دايرکتوری و ...
همچنين ميشه برخی از دستورالعملهای(Directive) فايل php.ini رو تنظيم کرد که تنها در مورد اسکریپتهای موجود در یک دايرکتوری خاص اعمال بشه.
من در اين سلسه مطالب با عنوان «هفت نکته جهت سفارشی کردن htaccess.» ميخوام پا رو از ذکر کاربردهای رايج اون فراتر بگذارم و بيشتر در مورد ويژگی هايی که کمتر مورد توجه وب مسترها قرار داره بپردازم. اما برای کسانيکه با اين فايل و کاربردهای اون آشنا نيستند، مقدمه ای ارائه ميکنم.
اول از همه اون داتی که قبل از htaccess هست شما رو نترسونه! htaccess. مثل gif. يه پسوند فايل بيشتر نيست. تنها تفاوتی که وجود داره اينه که اين فايل اسم نداره! هر کسی که سرويس دهنده وب آپاچی استفاده ميکنه ميتونه اين فايل رو تولید و استفاده کنه. برای ايجاد اون هم درست مثل ساختن فايلهای با پسوند txt کافيه که اديتور متنی مورد علاقه خودتون مثل Notepad ويندوز يا Emacs لينوکس رو باز کنيد و اون رو با عنوان htaccess. ذخيره کنيد.(تو نت پد داخل دابل کوتیشن قرار بدید) بعد فايل رو به دايرکتوری مورد نظرتون در مد اسکی آپلود کنيد. مجوز دسترسی رو هم ۶۴۴ ست کنيد تا دست بقيه ازش کوتاه بشه. اگه اين فايل توسط کسی تحت کنترل گرفته بشه، وب مستر اون سايت تو دردسر بزرگی ميفته!
نکته ديگه که بايد مدنظر داشته باشيد اينه که اين فايل تنها تو دايرکتوری که آپلود کرديد تفسير نميشه بلکه روی تمام ساب دايرکتوری ها هم اعمال ميشه. يعنی اگه اين فايل رو تو روت سايت درست کنيد، تمام دايرکتوريها و ساب دايرکتوريها تحت تاثير اون هستند. برای اينکه تو يک ساب دايرکتوری خاصی فايل htaccess. روت اعمال نشه، کافيه که يه فايل htaccess. خالی درست کنيد و تو اون ساب دايرکتوری کپی کنيد.
برای اينکه درک بهتری از فايل htaccess. و کاربردهای اون داشته باشيد، اجازه بديد که در مورد فايل اصلی پيکربندی آپاچی يعنی httpd.conf بحث کنيم. فایل httpd.conf صرفا یک فايل پيکربندی هست که جزئيات مربوط به پيکربندی آپاچی نظير ماجولهايی که بايد بارگذاری بشن، دستورالعملها و شماره پورتها و ... رو نگهداری ميکنه. هر موقع، يک وب سايت که سرويس دهنده اش آپاچی هست بارگذاری ميشه، آپاچی به فايل httpd.conf مراجعه کرده و اون رو تفسير ميکنه. اگه ادمين تغييراتی تو اين فايل بده بايد سرويس دهنده رو از نو راه اندازی کنه تا تغييرات اعمال بشه. اين فايل روی ماشين ادمين سايتتون قرار داره و معمولا شما نمی تونید به اون دسترسی داشته باشيد مخصوصا روی سرورهای اشتراکی. چون نمی تونيد به اين فايل دسترسی مستقيم داشته باشيد بنابراين پيکربندی ها رو هم نمی تونيد عوض کنيد. بدين منظور htaccess. در خدمت شما قرار داده شده که اين محدوديت رو يه جوری از بين ببريم. بنابراين محدوديتهايی تو اين فايل وجود داره که باعث ميشه که وب مسترها عمدا يا سهوا پيکربندی های پيش فرض سرويس دهنده رو تغيير ندن. با تغيير تو اين فايل سرويس دهنده نياز به Restart شدن نداره چون هر دفعه که يک وب سايت درخواست ميشه، سرويس دهنده نزديکترين فايل htaccess. رو ميخونه و تفسير ميکنه. بدين ترتيب شما ميتونيد کنترل بيشتری رو وب سايتتون داشته باشيد.
تو قسمتهای بعدی در مورد کاربردهای اون صحبت خواهم کرد...
 
نظرات شما(1)  
EasyRSS هديه بنده به شما
EasyRSS پریشب که سرم خلوت شد، گفتم یه نگاهی به اسکریپتهای سایت بندازم و یک سری Benchmark در مورد سرعت اجرای اسکریپتها، انجام بدم. برای این منظور IDE محبوبم razz یعنی Zend Studio 3.0 رو اجرا کردم و تحت IE روی Localhost یه Profile از Home Page سایت گرفتم. عجب نتایجی! shockedزمان اجرای اسکریپتهای صفحه اصلی سایت حدود ۱۳۳۹ میلی ثانیه شد! تعجب کردم و Functions Statistics رو بررسی کردم دیدم بعله! این News Feed سایت که با SAX API نوشته بودم، چیزی حدود ۷۹۰ میلی ثانیه از زمان اجرای کل رو بخودش اختصاص داده. کلاسی که برای این منظور نوشته بودم بررسی کردم دیدم راه بهینه تری نمی تونم پیدا کنم و باید یه فکر تازه تری بکنم تا این SimpleXML نسخه ۵ بیاد و ما رو نجات بده! یه جا خونده بودم که Tim Bray از کمک نویسندگان مشخصات XML گفته بود که از Perl Regex ها برای تفسیر اسناد XML استفاده میکنه. coolخوب فکر جالبیه. با اینکه اگه بخوایم مفسرهایی تمام و کمال بنویسیم با این روش یکم سخت هست اما برای مواردی که فقط قسمتهای خاصی از سند XML مورد نیاز باشه و این وسط DTD ها رو هم نادیده بگیریم، روشی هست که از نظر پرفورمنس و سرعت بسیار بسیار سریعتر از SAX و XPath هست و نسبت به DOM هم تفاوت فابل توجهی داره. بدین منظور، دیشب اومدم و یک کلاس نوشتم که خیلی راحت با دو خط کد! بتونید یک RSS Reader ساده و سریع به سایتتون اضافه کنید. از قابلیتهایی که این کلاس داره اینه که کاملا Template Base هست و می تونید کاملا به صورت جداگانه هر طرح و فرمی که میخواهید با HTML بسازید و با قراردادن یک سری نشانه ها، محل قرارگرفتن نام سایت، URL سایت، عناوین و لینک های مربوطه رو مشخص کنید. قابلیت دیگه اون، کش کردن فایل روی Server هست که با تعیین یک زمان انقضا News Feed شما بروزرسانی میشه. من تو این کلاس علاوه بر اینکه مفاهیم ابتدایی یک Template Engine رو از دید خودم پیاده سازی کردم، شما رو با یکسری توابعی که شاید کمتر باهاشون کار کرده باشید، آشنا میکنم. باز هم می گم که این کلاس خیلی خیلی ساده هست و تنها کاری که میکنه محتوای تگ title و link ها رو تفسیر میکنه. از اونجایی که من می بینم اکثرا از همین دو المنت در سایتها استفاده میکنند و معمولا XSL رو هم نادیده میگیرند، همین امکان رو بهش اضافه کردم(که ۱۰۰ درصد قابل تعمیم دادنه) بدین ترتیب سرعت اجرای اون کمتر از یک دهم زمان تفسیر RSS توسط SAX هست.
بعد از دریافت فایل فشرده از اينجا، محتویات اون رو عینا روی Serverتون آپلود کنید، یه دایرکتوری هست به نام rss_reader که می تونید نام دیگه ای براش انتخاب کنید، اگه نامش رو عوض کردید خط دوم کد زیر رو هم اصلاح کنید. در ضمن این دایرکتوری باید قابل نوشتن توسط کاربری باشه که وب سرور تحت اون اسکریپتها رو تفسیر میکنه(nobody) بنابراین CHMOD رو ۷۷۷ تنظیم کنید.

<?php
require('easyrss.class.php');
define('CACHEDIR''./rss_reader');
$rssSample = new EasyRSS('http://www.phpmystery/rss/'60'template.htm'CACHEDIR);
echo 
$rssSample->parseFeed();
?>

خط اول، کلاس EasyRSS رو اينکلود ميکنيم، خط دوم دايرکتوری کش رو مشخص ميکنيم. خط سوم از کلاسمون يک نمونه ميگيريم و تابع سازنده رو با آدرس کامل فايل RSS يا آدرس کامل مولد اون، زمان انقضا بر حسب دقيقه، نام و مسير سند HTML ای که بعنوان تمپليت استفاده خواهيم کرد و نهايتا مسير دايرکتوری کش، صدا میکنیم. در خط آخر هم با اجرای يک متد از کلاس خيلی قشنگ News Feed امون رو تحويل ميگيرم.
فعلا یکم عجله دارم توضیح بیشتر برای بعد، اگه کسی مشکلی داشت کامنت بگذاره.
نمونه اش هم اينجاست.
کد خود کلاس هم اینه:

<?php
class EasyRSS {
    var 
$rssUrl;
    var 
$xmlFile;
    var 
$expireTime;
    var 
$template;
    var 
$cachDir;
    var 
$xmlDocument;
    var 
$lastUpdate;
    function 
EasyRSS($rssUrl_in$expireTime_in$templateFileName_in$cacheDir_in) {
        
$this->rssUrl $rssUrl_in;
        
$this->xmlFile $cacheDir_in.'/'.$this->url2File();
        
$this->expireTime = (int)$expireTime_in;
        
$this->cachDir $cacheDir_in;
        
$this->template file_get_contents($templateFileName_in);
    }
    function 
url2File() {
        
$url parse_url($this->rssUrl);
        return 
ereg_replace('[^[:alnum:]]','_',$url['host']).'.xml';
    }
    function 
getFeed() {
        if (
is_writable($this->cachDir)) {
            
$xmlDocument implode (''file($this->rssUrl));
            if(!empty(
$xmlDocument)) {
                
$fp = @fopen($this->xmlFile,"w");
                
fwrite($fp,$xmlDocument);
                
fclose($fp);
                @
chmod($this->xmlFile,0766);
                return 
true;
            }
        } else {
            return 
false;
        }
    }
    function 
isExpired() {
        
$this->lastUpdate filemtime($this->xmlFile);
        return (
time() > $this->lastUpdate $this->expireTime 60) ? true false;
    }
    function 
parseFeed(){
        if (!
file_exists($this->xmlFile) || $this->isExpired()) {
            
$this->getFeed();
        }
        
$this->xmlDocument file_get_contents($this->xmlFile);
        
$pattern '/<title>([^<]*)/';
        
preg_match_all($pattern$this->xmlDocument$titles);
        
$pattern '/<link>([^<]*)/';
        
preg_match_all($pattern$this->xmlDocument$links);
        
$items = array();
        if (
PHP_VERSION '5.0') {
            for (
$counter 0$counter count($titles[1]); $counter++) {
                
$items[$titles[1][$counter]] = $links[1][$counter];
            }
        } else {
            
$items array_combine($titles[1], $links[1]);
        }
        return 
$this->parseTemplate($items);
    }
    function 
parseTemplate(&$results) {
        
$loopContent $finalOutput '';
        
$template $this->template;
        
$keys array_keys($results);
        
$values array_values($results);
        
$output str_replace('#WEBSITEURL#'$values[0], $template);
        
$output str_replace('#WEBSITE#'$keys[0], $output);
        
ereg('(.*)<!-- #STARTLOOP# -->(.*)<!-- #ENDLOOP# -->(.*)'$output$matches);
        for (
$counter 1$counter count($keys); $counter++) {
            
$loopContent .= str_replace('#LINK#'$values[$counter], $matches[2]);
            
$loopContent str_replace('#TITLE#'$keys[$counter], $loopContent);
        }
        
$matches[3] = str_replace('#LASTUPDATE#'date('Y-m-d@H:i:s'$this->lastUpdate), $matches[3]);
        
$finalOutput =$matches[1].$loopContent.$matches[3];
        return 
$finalOutput;
    }
}
?>

واژه نامه:
Code profiling در اصل، به معنی سنجش مدت زمانی است که اسکريپت اجرا ميشود.
 
نظرات شما(113)  
| صفحه قبل
 
 
نام: نيما شايافر
متولد: 7/7/1362
تحصيلات: دانشجو
شغل: طراح وب و برنامه نويس
وضعيت: آفلاين

ماهيانه
مرداد 86 (2)
خرداد 86 (1)
دي 84 (4)
آذر 84 (5)
مرداد 84 (1)
تير 84 (1)
ارديبهشت 84 (2)
دي 83 (1)
آذر 83 (2)
آبان 83 (2)
مهر 83 (4)
شهريور 83 (6)
مرداد 83 (3)
تير 83 (7)
خرداد 83 (7)
ارديبهشت 83 (8)
فروردين 83 (13)
اسفند 82 (12)

موضوعي






جستجوي پيشرفته

BlogRolling is currently inaccessible.
©2004, Design & Developed by: Nima Shayafar. All rights reserved.