সর্বশেষ সম্পাদনা করেছেন আমান (২৯-০৮-২০০৭ ১৫:১৩)

টপিকঃ পি.এইচ.পি. আউটপুট বাফারীং এর একটি ব্যবহার।

গত কয়েকদিন ধরে পি.এইচ.পি. শিখছি। আমি এর আগে কখনই পি.এইচ.পি.  পছন্দ করতাম না। এমনকি
কোড করার ইচ্ছাও জাগেনাই কোনদিন। কিন্তু কি আর করা, আমার পছন্দের জেএসপি সাপোর্টেড সার্ভার পাওয়াই যায়
না....আর যা আছে তা দামের তুলনায় পোষায় না। পরের পছন্দ পার্ল। কিন্তু সাধারন পার্ল এমবেডেড নয়। আর
emb-perl সাপোর্টকরে এমন একটি সার্ভারও খুজে পেলাম না sad
শেষে বাধ্য হয়ে পি.এইচ.পি.  এবং অবাক হয়ে এর গুনমুগ্ধ।

যাহোক, প্রথমে ভেবেছিলাম এজাক্স ব্যবহার করে একটা রীচ সাইট বানাবো। খুব ভালো লাগে এজাক্স নিয়ে কাজ করতে।
কিন্তু কোডারের সাথে কথা বলে SEO সম্পর্কে জানতে পারি। তারপরে এর ওপর যা যা পেলাম পড়ে শিখলাম SEO এর
জন্য এজাক্স ভালো না, তেমনি অনেকসময় ভলো নয় ডাইনামিক কনটেন্ট। স্পাইডার বা বট রা এগুলো ঠিকমত এখনও
পড়তে পারে না।

সার্চ ইন্জিনের জন্য সবচাইতে ভালো হল নন‌-ডাইনামিক পেজ। ধরুন, আপনার সাইটে আপনি
বিভিন্ন প্রোডাক্টের তথ্য রাখেন। একটি প্রোডাক্ট শো করার জন্য আপনার একটি পেজ আছে, showproduct.php.
যদি showproduct.php?product_id=123 রীকোয়েস্ট করা হয় তাহলে ১২৩ আইডি বিশিষ্ট প্রোডাক্টটা শো করে।
এই পেজটি হতে পারে এমন:

<?php
include($_SERVER['DOCUMENT_ROOT']."/_inc/util_functions.inc");
$pid = _GET['product_id'];
$desc = getProductDescription($pid);
$name = getProductName($pid);
$cat = getProductCat($pid);
?>
<html>
    <head>
        <title>Product $name,$cat</title>                
    </head>
    <body>
        ID = <?= $pid ?> <br/>
        Cat = <?= $cat ?> <br/>
        Description <?= $desc ?>
        
    </body>
<!--GOOGLE ADSENSE CODE -->
<script>
</script>
.....
<!-- END -->
</html>

এখন, এই পেইজ এ আসলে যে কি কনটেন্ট আছে তা কিন্তু ধরতে কষ্ট হবে (যদিও গুগল তাও পারে অধিকাংশ সময়, সিমান্টিক ওয়েব সার্চ, তাই না?)।
সবচেয়ে বড় ইফেক্ট পড়বে সার্চ করার সময়,ইনডেক্সিংএর সময়। তারচাইতে এটা যদি স্টাটিক হত গুগল একটু ভালো পারত,
আপনি আরও ইফেক্টিভলী টারগেটেড চ্যানেল ব্যবহার করতে পারতেন।


যাহোক, এখন যে কারনেই হোক না কেন, আমার (বা আমার কাস্টমার ) রিকয়ারমেন্ট হল প্রতিটি পেজের জন্য স্টাটিক পেজ বানাতে হবে।
(ইনফ্যাক্ট, www.gajdo.se তাই করিয়েছিল আমাদের দিয়ে। আমরা ফেরাইট ল্যান্গুয়েজ দিয়ে করেছিলাম ডাইনামিকালী স্টাটিক পেজ বানানো)

সেক্ষত্রে আপনি কি করতে পারেন? নিচের মত?:

$content = "<?php include($_SERVER['DOCUMENT_ROOT'].\"/_inc/util_functions.inc\")";
$content .= ....

উফফ মহা ভেজাল তো ! আচ্ছা print ব্যবহার করি না কেন!?

$content = print<<<END
include($_SERVER['DOCUMENT_ROOT']."/_inc/util_functions.inc");
... 
...
END;

ধ্যাৎ, হচ্ছে না, কারন print সমসময় ১ রিটার্ন করে, আর লেখে ব্রাউজারে sad

এহেন অবস্থায় আমি একটি ট্রিক ব্যবহার করতে চাইলাম, তা হলো .....

<? ob_start(); ?>
<?php
include($_SERVER['DOCUMENT_ROOT']."/_inc/util_functions.inc");
$pid = _GET['product_id'];
$desc = getProductDescription($pid);
$name = getProductName($pid);
$cat = getProductCat($pid);
?>
<html>
    <head>    
        <title>Product: $name,$cat</title>                
    </head>
    <body>
        ID = <?= $pid ?> <br/>
        Cat = <?= $cat ?> <br/>
        Description <?= $desc ?><hr/>        

<!--GOOGLE ADSENSE CODE -->
<script>
</script>
.....
<!-- END -->

</body>
</html>
<?
$out = ob_get_contents();
ob_end_clean();

$productpage= "/products/$name.html" ;

  if (!$fp = fopen($productpage, 'w+')) {
    echo "Cannot open file ($productpage)";
    exit;
  }
 if (fwrite($fp, $out) == FALSE) {
    echo "Cannot write to file ($productpage)";
    exit;
  }
print <<<EOF
Product page usccessfully created: <a href="$productpage">$name</a>
EOF;

?>

ব্যাস ! তৈরী হয়ে গেল আমার স্টাটিক প্রোডাক্ট পেইজ! smile

“All our dreams can come true if we have the courage to pursue them.” - Walt Disney
http://www.amanpages.com/

Re: পি.এইচ.পি. আউটপুট বাফারীং এর একটি ব্যবহার।

কি করলেন বুঝলাম না। ob_start() এর কাজ এইরকম কি? ওটা তো পার্সিং এর সময় আউটপুরকে বাফারে রাখা পর্যন্তই কাজ। এটা ব্যবহৃত হয় সাধারণত কোন আউটপুটের পর যদি আবারও ব্রাউজারে কোন হেডার (কুকিও হতে পারে) পাঠানোর দরকার হয় তখন। কারণ একবার ব্রাউজারে কোন আউটপুট পাঠানোর পর হেডার পাঠাতে চাইলে এরর দেখায়। সেজন্যই সাধারণত আউটপুট বাফারিংটা ব্যবহৃত হয়।

কিন্তু .htaccess (মোড রিরাইট) এর সাহায্যে আপনি সহজেই স্ট্যাটিক পেজ বানাতে পারেন। এই যে ফোরামের এই টপিকটার আসল এড্রেস হল http://forum.projanmo.com/viewtopic.php?id=2557
কিন্তু এটাকে .htaccess  এর সাহায্যে http://forum.projanmo.com/t2557.html এই এড্রেস তৈরি করার হয়েছে যা গুগল একটা স্ট্যাটিক সাইট হিসেবেই চিনবে।

[img]http://twitstamp.com/thehungrycoder/standard.png[/img]
what to do?

সর্বশেষ সম্পাদনা করেছেন আমান (২৯-০৮-২০০৭ ১৭:৫৪)

Re: পি.এইচ.পি. আউটপুট বাফারীং এর একটি ব্যবহার।

আমি আসলে ইনিশিয়াল কনটেন্ট বাফারটিকে ব্রাউজারে না পাঠিয়ে আরেকটি ফাইলে সেভ করেছি। তারপর ব্রাউজারে অন্য একটি মেসেজ শো করেছি।
আপনি ঠিকই বলেছেন, সাধারন কোন সার্চ স্ট্রীং হাইলাইট করার জন্যই এটি ব্যবহৃত হয়।

আর, আমি যদি মড রিরাইট জানতাম তাহলে তো এত কষ্টই করতে যেতাম ন crying

একটু বলবেন কিভাবে করতে হয় ?

আপডেট:
শিখলাম... ওয়াও..সিম্পলী গ্রেট !!

মনে হচ্ছে নিজেই লিখে ফেলি একটা টিউটোরিয়াল ....

“All our dreams can come true if we have the courage to pursue them.” - Walt Disney
http://www.amanpages.com/

Re: পি.এইচ.পি. আউটপুট বাফারীং এর একটি ব্যবহার।

আমান লিখেছেন:

আপডেট:
শিখলাম... ওয়াও..সিম্পলী গ্রেট !!

মনে হচ্ছে নিজেই লিখে ফেলি একটা টিউটোরিয়াল ....

ভাইরে লিখে ফেলেননা জলদি।

Re: পি.এইচ.পি. আউটপুট বাফারীং এর একটি ব্যবহার।

আমি কিন্তু মোড রিরাইট জানি না। যখন দরকার হয় ইন্টারনেটে ঘেঁটে বের করি:Pb-(। অতএব টিউটোরিয়াল দিলে মন্দ হয় না smile

[img]http://twitstamp.com/thehungrycoder/standard.png[/img]
what to do?

Re: পি.এইচ.পি. আউটপুট বাফারীং এর একটি ব্যবহার।

আসলেই টিউটোরিয়ালের দরকার নাই, নেট আছে না!!
তবু নেট ঘেটে একটি চিট-শীট পেলাম। লিঙ্ক দিলাম এখানে।
http://www.ilovejackdaniels.com/mod_rewrite_cheat_sheet.png

“All our dreams can come true if we have the courage to pursue them.” - Walt Disney
http://www.amanpages.com/