টপিকঃ পি.এইচ.পি. আউটপুট বাফারীং এর একটি ব্যবহার।
গত কয়েকদিন ধরে পি.এইচ.পি. শিখছি। আমি এর আগে কখনই পি.এইচ.পি. পছন্দ করতাম না। এমনকি
কোড করার ইচ্ছাও জাগেনাই কোনদিন। কিন্তু কি আর করা, আমার পছন্দের জেএসপি সাপোর্টেড সার্ভার পাওয়াই যায়
না....আর যা আছে তা দামের তুলনায় পোষায় না। পরের পছন্দ পার্ল। কিন্তু সাধারন পার্ল এমবেডেড নয়। আর
emb-perl সাপোর্টকরে এমন একটি সার্ভারও খুজে পেলাম না ।
শেষে বাধ্য হয়ে পি.এইচ.পি. এবং অবাক হয়ে এর গুনমুগ্ধ।
যাহোক, প্রথমে ভেবেছিলাম এজাক্স ব্যবহার করে একটা রীচ সাইট বানাবো। খুব ভালো লাগে এজাক্স নিয়ে কাজ করতে।
কিন্তু কোডারের সাথে কথা বলে 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 সমসময় ১ রিটার্ন করে, আর লেখে ব্রাউজারে
এহেন অবস্থায় আমি একটি ট্রিক ব্যবহার করতে চাইলাম, তা হলো .....
<? 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;
?>
ব্যাস ! তৈরী হয়ে গেল আমার স্টাটিক প্রোডাক্ট পেইজ!
http://www.amanpages.com/