<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog Sahat Tambunan &#187; PHP</title>
	<atom:link href="http://blog.sahat-tambunan.com/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.sahat-tambunan.com</link>
	<description>my personal blog, a personal view of the global world</description>
	<lastBuildDate>Thu, 03 Nov 2011 02:57:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>Smart PHP Thumbnailer</title>
		<link>http://blog.sahat-tambunan.com/2008/05/30/smart-php-thumbnailer/</link>
		<comments>http://blog.sahat-tambunan.com/2008/05/30/smart-php-thumbnailer/#comments</comments>
		<pubDate>Fri, 30 May 2008 15:20:12 +0000</pubDate>
		<dc:creator>kocu</dc:creator>
				<category><![CDATA[Share Knowledge]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.sahat-tambunan.com/?p=265</guid>
		<description><![CDATA[Dulu sempat bikin code untuk update function thumbnailer supaya hasilnya bisa square (bujur sangkar) dan proporsional di posisi tengah gambar (tidak gepeng secara horizontal/vertical walaupun bentuk image asli tidak square). Karena kebutuhan lain, akhirnya saya update lagi fungsi tersebut supaya bisa lebih pintar. Intinya thumbnailer akan mengecek rasio image source dan membandingkannya dengan rasio image [...]]]></description>
			<content:encoded><![CDATA[<p>Dulu sempat bikin code untuk update function thumbnailer supaya hasilnya bisa <em>square</em> (bujur sangkar) dan proporsional di posisi tengah gambar (tidak gepeng secara horizontal/vertical walaupun bentuk image asli tidak square).</p>
<p>Karena kebutuhan lain, akhirnya saya update lagi fungsi tersebut supaya bisa lebih pintar. Intinya thumbnailer akan mengecek rasio image source dan membandingkannya dengan rasio image destination, memutuskan rasio terbaik untuk membuat thumbnail, dan melakukan crop pada image untuk membentuk thumbnail sesuai dengan ukuran destination yang diinginkan. Berikut keunggulan fungsi thumbnailer ini:</p>
<ol>
<li><strong>Free style</strong>, ukuran thumbnail bebas dan tidak harus sesuai dengan rasio image</li>
<li><strong>Adjust to Width</strong>, ukuran thumbnail bisa disesuaikan dengan rasio image cukup dengan menentukan lebar dari thumbnail</li>
<li><strong>Adjust to Height</strong>, penyesuaian dengan rasio image cukup dengan menentukan tinggi dari thumbnail</li>
<li><strong>Caching</strong>, thumbnail hanya di generate 1 kali, dan setiap permintaan thumbnail akan tetap menggunakan file yang sama, kecuali bila image source lebih baru dari file cache.</li>
<li><strong>Preview Image</strong>, selain berguna untuk membuat thumbnail, fungsi ini juga bisa menampilkan image source.</li>
<li><strong>Various Image Format</strong>, bisa mengenali image dari beragam format (diuji dengan format jpg, gif dan png), tapi tidak mengenal transparansi karena thumbnail yang dihasilkan dalam format jpg.</li>
</ol>
<p><span id="more-265"></span></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'IMAGES_DIR'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'images/'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'IMAGES_CACHE_DIR'</span><span style="color: #339933;">,</span> IMAGES_DIR<span style="color: #339933;">.</span><span style="color: #0000ff;">'cache/'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'IMAGES_CACHE_QUALITY'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'85'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">function</span> draw_image<span style="color: #009900;">&#40;</span><span style="color: #000088;">$path</span><span style="color: #339933;">,</span> <span style="color: #000088;">$filename</span><span style="color: #339933;">,</span> <span style="color: #000088;">$alt</span><span style="color: #339933;">,</span> <span style="color: #000088;">$width</span><span style="color: #339933;">=</span><span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #000088;">$height</span><span style="color: #339933;">=</span><span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #000088;">$params</span><span style="color: #339933;">=</span><span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
 <span style="color: #000088;">$src</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$path</span><span style="color: #339933;">.</span><span style="color: #000088;">$filename</span><span style="color: #339933;">;</span>
 <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$src</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000088;">$info</span><span style="color: #339933;">=</span><span style="color: #990000;">getimagesize</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$src</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$w</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$info</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$h</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$info</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$width</span><span style="color: #339933;">==</span><span style="color: #0000ff;">''</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$height</span><span style="color: #339933;">==</span><span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   <span style="color: #000088;">$width</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$w</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$height</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$h</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elseif</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$width</span><span style="color: #339933;">==</span><span style="color: #0000ff;">''</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$height</span><span style="color: #339933;">==</span><span style="color: #000088;">$h</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   <span style="color: #000088;">$width</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$w</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elseif</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$width</span><span style="color: #339933;">==</span><span style="color: #000088;">$w</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$height</span><span style="color: #339933;">==</span><span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   <span style="color: #000088;">$height</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$h</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elseif</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$width</span><span style="color: #339933;">!=</span><span style="color: #000088;">$w</span> <span style="color: #339933;">||</span> <span style="color: #000088;">$height</span><span style="color: #339933;">!=</span><span style="color: #000088;">$h</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   <span style="color: #666666; font-style: italic;">//CONTROL RATIO IF ONLY ONE VALUE IS USED</span>
   <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$width</span><span style="color: #339933;">==</span><span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span> <span style="color: #000088;">$width</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$w</span><span style="color: #339933;">/</span><span style="color: #000088;">$h</span><span style="color: #339933;">*</span><span style="color: #000088;">$height</span><span style="color: #339933;">;</span>
   <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$height</span><span style="color: #339933;">==</span><span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span> <span style="color: #000088;">$height</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$h</span><span style="color: #339933;">/</span><span style="color: #000088;">$w</span><span style="color: #339933;">*</span><span style="color: #000088;">$width</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$cachefile</span> <span style="color: #339933;">=</span> IMAGES_CACHE_DIR<span style="color: #339933;">.</span><span style="color: #000088;">$width</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'x'</span><span style="color: #339933;">.</span><span style="color: #000088;">$height</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'_'</span><span style="color: #339933;">.</span><span style="color: #000088;">$filename</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$createcachefile</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span>
   <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cachefile</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">filemtime</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cachefile</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&gt;</span>filemtime<span style="color: #009900;">&#40;</span><span style="color: #000088;">$src</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
     <span style="color: #000088;">$createcachefile</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
   <span style="color: #009900;">&#125;</span>
   <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$createcachefile</span><span style="color: #339933;">===</span><span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$wratio</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$w</span><span style="color: #339933;">/</span><span style="color: #000088;">$width</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$hratio</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$h</span><span style="color: #339933;">/</span><span style="color: #000088;">$height</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$wratio</span><span style="color: #339933;">&lt;</span><span style="color: #000088;">$hratio</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
     <span style="color: #000088;">$wtoget</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$w</span><span style="color: #339933;">;</span>
     <span style="color: #000088;">$htoget</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$height</span><span style="color: #339933;">/</span><span style="color: #000088;">$width</span><span style="color: #339933;">*</span><span style="color: #000088;">$w</span><span style="color: #339933;">;</span>
     <span style="color: #000088;">$hdiff</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$h</span><span style="color: #339933;">-</span><span style="color: #000088;">$htoget</span><span style="color: #339933;">;</span>
     <span style="color: #000088;">$xpos</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
     <span style="color: #000088;">$ypos</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$hdiff</span><span style="color: #339933;">/</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
     <span style="color: #000088;">$wtoget</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$width</span><span style="color: #339933;">/</span><span style="color: #000088;">$height</span><span style="color: #339933;">*</span><span style="color: #000088;">$h</span><span style="color: #339933;">;</span>
     <span style="color: #000088;">$htoget</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$h</span><span style="color: #339933;">;</span>
     <span style="color: #000088;">$wdiff</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$w</span><span style="color: #339933;">-</span><span style="color: #000088;">$wtoget</span><span style="color: #339933;">;</span>
     <span style="color: #000088;">$xpos</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$wdiff</span><span style="color: #339933;">/</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span>
     <span style="color: #000088;">$ypos</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000088;">$imagesource</span> <span style="color: #339933;">=</span> <span style="color: #990000;">file_get_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$src</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$image</span> <span style="color: #339933;">=</span> <span style="color: #339933;">@</span><span style="color: #990000;">imagecreatefromstring</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$imagesource</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$image_new</span> <span style="color: #339933;">=</span> <span style="color: #990000;">imagecreatetruecolor</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$width</span><span style="color: #339933;">,</span> <span style="color: #000088;">$height</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">imagecopyresampled</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$image_new</span><span style="color: #339933;">,</span> <span style="color: #000088;">$image</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #000088;">$xpos</span><span style="color: #339933;">,</span> <span style="color: #000088;">$ypos</span><span style="color: #339933;">,</span> <span style="color: #000088;">$width</span><span style="color: #339933;">,</span> <span style="color: #000088;">$height</span><span style="color: #339933;">,</span> <span style="color: #000088;">$wtoget</span><span style="color: #339933;">,</span> <span style="color: #000088;">$htoget</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">imagejpeg</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$image_new</span><span style="color: #339933;">,</span> <span style="color: #000088;">$cachefile</span><span style="color: #339933;">,</span> IMAGES_CACHE_QUALITY<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
   <span style="color: #000088;">$src</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$cachefile</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
 <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000088;">$src</span>  <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$width</span>  <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$height</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
 <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$width</span><span style="color: #339933;">!=</span><span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span> <span style="color: #000088;">$width</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;width='<span style="color: #006699; font-weight: bold;">$width</span>'&quot;</span><span style="color: #339933;">;</span>
 <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$height</span><span style="color: #339933;">!=</span><span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span> <span style="color: #000088;">$height</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;height='<span style="color: #006699; font-weight: bold;">$height</span>'&quot;</span><span style="color: #339933;">;</span>
 <span style="color: #000088;">$image</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&lt;image src='<span style="color: #006699; font-weight: bold;">$src</span>' alt='<span style="color: #006699; font-weight: bold;">$alt</span>' <span style="color: #006699; font-weight: bold;">$width</span> <span style="color: #006699; font-weight: bold;">$height</span> <span style="color: #006699; font-weight: bold;">$params</span> /&gt;&quot;</span><span style="color: #339933;">;</span>
 <span style="color: #b1b100;">return</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">str_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;'&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'&quot;'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$image</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">echo</span> draw_image<span style="color: #009900;">&#40;</span>IMAGES_DIR<span style="color: #339933;">,</span> <span style="color: #0000ff;">'foto-1.jpg'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Foto 1'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">100</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">100</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;br /&gt;&lt;br /&gt;'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> draw_image<span style="color: #009900;">&#40;</span>IMAGES_DIR<span style="color: #339933;">,</span> <span style="color: #0000ff;">'foto-1.jpg'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Foto 1'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">100</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;br /&gt;&lt;br /&gt;'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> draw_image<span style="color: #009900;">&#40;</span>IMAGES_DIR<span style="color: #339933;">,</span> <span style="color: #0000ff;">'foto-1.jpg'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Foto 1'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">100</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;br /&gt;&lt;br /&gt;'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> draw_image<span style="color: #009900;">&#40;</span>IMAGES_DIR<span style="color: #339933;">,</span> <span style="color: #0000ff;">'foto-1.jpg'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Foto 1'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<ol>
<li>Buat file php baru</li>
<li>kopi seluruh code di atas pada file tersebut</li>
<li>Pada lokasi yang sama, buatlah folder &#8216;images/&#8217; dan &#8216;images/cache/&#8217;</li>
<li>Kopi sebuah file image ke folder images dan rename menjadi &#8216;foto-1.jpg&#8217;</li>
<li>Jalankan file php tersebut, selamat mencoba (^_^)</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://blog.sahat-tambunan.com/2008/05/30/smart-php-thumbnailer/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Apache, PHP and Windows File Security</title>
		<link>http://blog.sahat-tambunan.com/2007/06/29/apache-php-and-windows-file-security/</link>
		<comments>http://blog.sahat-tambunan.com/2007/06/29/apache-php-and-windows-file-security/#comments</comments>
		<pubDate>Fri, 29 Jun 2007 14:50:08 +0000</pubDate>
		<dc:creator>kocu</dc:creator>
				<category><![CDATA[Share Knowledge]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.sahat-tambunan.com/2007/06/29/apache-php-and-windows-file-security/</guid>
		<description><![CDATA[Not again! masa dalam 1 hari gw posting 2 topik yang kagak beda2 jauh nih. Tapi daripada keburu lupa gapapalah. Intinya gini, masih seputar osc juga. Setelah beres instalasi osc di wamp dia terus2an ngasih warning bahwa dia masih bisa nulis ke file konfigurasinya, dan dia bilang itu berbahaya untuk keamanan. Jadi dengan semangat 45 [...]]]></description>
			<content:encoded><![CDATA[<p>Not again! <img src='http://blog.sahat-tambunan.com/wp-includes/images/smilies/icon_neutral.gif' alt=':-|' class='wp-smiley' />  masa dalam 1 hari gw posting 2 topik yang kagak beda2 jauh nih. Tapi daripada keburu lupa gapapalah. Intinya gini, masih seputar <a href="http://www.oscommerce.com">osc</a> juga. Setelah beres instalasi osc di wamp dia terus2an ngasih warning bahwa dia masih bisa nulis ke file konfigurasinya, dan dia bilang itu berbahaya untuk keamanan. Jadi dengan semangat 45 gw berjuang bagaimana set security file tersebut supaya tidak bisa ditulis ama si apache. Sebenernya sih ga perlu2 banget, karena toh itu warning cuma keluar di development server yang ga bisa diakses orang. Tapi ga enak aja liatnya nongol2 terus. Udah gw utak atik ga bisa2 juga. Gw sampe bikin user windows yg khusus cuma buat jalanin service apache doang, masih ga bisa juga. Sementara kalo di linux kan tinggal maenin chown atau chmod-nya aja <img src='http://blog.sahat-tambunan.com/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' />  hiks.</p>
<p><span id="more-174"></span></p>
<p>Akhirnya, hari ini gw kembali memutuskan untuk lihat2 ke codenya (kayanya semua masalah jadi lama gara2 gw ga langsung liat ke codenya deh <img src='http://blog.sahat-tambunan.com/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' />  hehe). Alhasil, gw menemukan bahwa fungsi PHP yang dipakai untuk ngecek itu ialah <a href="http://www.php.net/is_writable"><strong>is_writable</strong></a>. Mulai keliling2 lagi naek bus google, ketemu juga masalahnya. Ternyata eh ternyata, is_writable di windows HANYA memeriksa STATUS <strong>Read Only</strong> dari file tersebut. Please deh, bisa2nya gw lupa selama ini kalau ada status begituan di windows. Yah, paling gak sekarang masalahnya sudah beres.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sahat-tambunan.com/2007/06/29/apache-php-and-windows-file-security/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP, Apache and Cookie</title>
		<link>http://blog.sahat-tambunan.com/2007/06/29/php-apache-and-cookie/</link>
		<comments>http://blog.sahat-tambunan.com/2007/06/29/php-apache-and-cookie/#comments</comments>
		<pubDate>Thu, 28 Jun 2007 19:45:23 +0000</pubDate>
		<dc:creator>kocu</dc:creator>
				<category><![CDATA[Share Knowledge]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.sahat-tambunan.com/2007/06/29/php-apache-and-cookie/</guid>
		<description><![CDATA[What about it? Ada masalah apakah dengan PHP, Apache dan Cookie? Seharusnya sih gak ada, tapi saat lagi kerja di development server yang di akses dengan http://localhost, entah kenapa fungsi setcookie() ga berhasil2 menyimpan data yg gw mau. Gw cobain di firefox dan ie, tapi tetep aja ga bisa2. Padahal kalo udah di deploy ke [...]]]></description>
			<content:encoded><![CDATA[<p>What about it? Ada masalah apakah dengan PHP, Apache dan Cookie? Seharusnya sih gak ada, tapi saat lagi kerja di development server yang di akses dengan <strong>http://localhost</strong>, entah kenapa fungsi <a href="http://www.php.net/setcookie">setcookie()</a> ga berhasil2 menyimpan data yg gw mau. Gw cobain di firefox dan ie, tapi tetep aja ga bisa2. Padahal kalo udah di deploy ke server dengan real domain name kagak ada masalah, fine2 aja semua.</p>
<p>Sedikit flashback, awal mulanya gw cari solusi biar <a href="http://www.oscommerce.com">osc</a> selalu ga nampilin <a href="http://www.php.net/session">session id</a> di url. Cara tercepat pastinya dengan <strong>aktifin force cookie di admin</strong>. Dengan sedikit efek samping yaitu meningkatnya probabilitas kehilangan calon customer yang settingan browsernya nge-disabled cookie. Syukurlah kata bos gw nilainya sangat tidak signifikan, sehingga masih bisa diabaikan. Tapi entah kenapa, browser gw selalu dianggep mendisabled cookie, padahal gw yakin banget kagak gw disabled, wong melanglang buana di web2 yang butuh cookie di internet selalu bisa ko.</p>
<p><span id="more-173"></span></p>
<p>Akhirnya gw cuekin aja dulu bbrp hari, kerja2in yang laen dulu, sampai kemaren bos telepon dan masalah ini harus di solve secepatnya (.,) hiks &#8211; Mulailah gw oprek2 codingnya. Ternyata gw menemukan bahwa <strong>setcookie() yang dijalankan tidak pernah berhasil menyimpan data</strong>. hm&#8230; that&#8217;s strange. Setelah gw keliling2 naek bus google, gw turun di <a href="http://www.aeonity.com/frost/php-setcookie-localhost-apache">halte ini</a> dan gw menemukan secercah <a href="http://www.sinarharapan.co.id/">sinar harapan</a> yang kayanya cocok banget ama kondisi gw. Ehem, link sinar harapan cuma bercanda ya (gubrak!)</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// set the cookie domain</span>
<span style="color: #000088;">$cookie_domain</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$request_type</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'NONSSL'</span><span style="color: #009900;">&#41;</span> ? HTTP_COOKIE_DOMAIN <span style="color: #339933;">:</span> HTTPS_COOKIE_DOMAIN<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$cookie_path</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$request_type</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'NONSSL'</span><span style="color: #009900;">&#41;</span> ? HTTP_COOKIE_PATH <span style="color: #339933;">:</span> HTTPS_COOKIE_PATH<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//FOR PHP APACHE DEVELOPMENT (localhost)</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cookie_domain</span><span style="color: #339933;">==</span><span style="color: #0000ff;">&quot;localhost&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #000088;">$cookie_domain</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #990000;">setcookie</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'cookie_test'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'please_accept_for_session'</span><span style="color: #339933;">,</span> <span style="color: #990000;">time</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #cc66cc;">60</span><span style="color: #339933;">*</span><span style="color: #cc66cc;">60</span><span style="color: #339933;">*</span><span style="color: #cc66cc;">24</span><span style="color: #339933;">*</span><span style="color: #cc66cc;">30</span><span style="color: #339933;">,</span> <span style="color: #000088;">$cookie_path</span><span style="color: #339933;">,</span> <span style="color: #000088;">$cookie_domain</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Intinya! Ternyata eh ternyata, beliau share bahwa untuk menjalankan setcookie() di localhost mesti pake format tertentu. Pasti sudah pada tahu, ada beberapa argumen yang harus disertakan saat memanggil fungsi ini, tapi gw ga akan bahas itu karena bukan bagian dari share ini (^_^) Intinya, dari semua argumen tersebut, ada argumen <strong>domain</strong> (berisi nama domain) yang bernilai <strong>localhost</strong> dalam kasus gw. Ternyata eh ternyata, sesuai anjuran akang FrosT di <a href="http://www.aeonity.com/frost/php-setcookie-localhost-apache">halte tadi</a>, setelah gw ganti nilainya dari <strong>string:localhost</strong> jadi <strong>boolean:false</strong>, CRING! Tiba2 aja jadi bisa. Ga tahu deh kenapa, akhirnya di scriptnya gw selipin untuk cek kalo nama cookie domain nya localhost, ganti jadi false. Jadi ga bakal error juga kalo di deploy nanti. Kutipan codenya liat di atas ya, good luck!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sahat-tambunan.com/2007/06/29/php-apache-and-cookie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simple Form Security</title>
		<link>http://blog.sahat-tambunan.com/2007/04/19/simple-form-security/</link>
		<comments>http://blog.sahat-tambunan.com/2007/04/19/simple-form-security/#comments</comments>
		<pubDate>Thu, 19 Apr 2007 15:03:01 +0000</pubDate>
		<dc:creator>kocu</dc:creator>
				<category><![CDATA[Share Knowledge]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.sahat-tambunan.com/2007/04/19/simple-form-security/</guid>
		<description><![CDATA[Gw udah published Personal Web gw bbrp tahun. Gw punya guestbook disitu, dan selama beberapa tahun ini tidak pernah ada masalah. Tapi ga tau kenapa, per awal tahun ini mulai terjadi hal yang sangat mengesalkan. Bersamaan dengan gw ganti web gw ke versi 2, guestbook gw kena serang ama yg namanya spam bot. very annoying. [...]]]></description>
			<content:encoded><![CDATA[<p>Gw udah published <a href="http://kocu.christian.net">Personal Web gw</a> bbrp tahun. Gw punya guestbook disitu, dan selama beberapa tahun ini tidak pernah ada masalah. Tapi ga tau kenapa, per awal tahun ini mulai terjadi hal yang sangat mengesalkan. Bersamaan dengan gw ganti web gw ke versi 2, guestbook gw kena serang ama yg namanya spam bot. very annoying. Padahal gw masih pake modul guestbook yg sama. Jadi gw mulai mikir gimana caranya lolos dari bot itu.</p>
<p>Setelah gw coba beberapa hal dan gagal, akhirnya gw coba pake cara yg biasa dipakai ama banyak situs untuk menghindari bot, <strong>verification number</strong>. Situs-situs tersebut menggunakan apa yg biasa disebut CAPCTHA (bener ga ya tulisannya?), yaitu memberikan verification number yang bisa dikenali oleh manusia, tapi tidak oleh robot (walau ada yang bisa crack jg sih katanya). Yang paling banyak digunakan ialah media image, tapi sudah ada juga yg menggunakan suara.<br />
<img src='http://blog.sahat-tambunan.com/wp-content/uploads/2007/04/scrabble.jpg' alt='Scrabble' /></p>
<p><span id="more-41"></span></p>
<p>INTINYA, salah satu cara ialah meminta verfikasi yang tidak bisa dilakukan oleh bot. Menggunakan CAPCTHA jelas salah satu cara, tapi gw pikir, terlalu berat rasanya cuma buat guestbook gw pake begituan. Jadi gw pikir ga perlu pake image-lah, yang penting ada angka yang harus dimasukkan sebagai verifikasi. Memang pasti bisa tembus oleh bot2 yg pinter, tapi untuk nangani bot iseng2an cukuplah (paling tidak sampai saat ini :p hehe).</p>
<p>Caranya gampang nih:</p>
<ol>
<li>Buat random number (bisa 4 digit atau lebih), lalu di simpan ke session.</li>
<li>Tampilkan angka tersebut di Form dan minta User mengisi angka yang sama pada sebuat textbox.</li>
<li>Berikutnya, pada script yang akan menerima hasil submit dari form tersebut, periksalah apakah isi textbox tersebut sama dengan angka yang kita buat</li>
</ol>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">//bikin verification number</span>
<span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'vernum'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">rand</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1000</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">9999</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//tampilin </span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Type This Number (<span style="color: #006699; font-weight: bold;">$_SESSION[vernum]</span>) &amp;lt;input type='text' name='vernum' /&amp;gt;&quot;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//cek verifikasi</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'vernum'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">==</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'vernum'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   <span style="color: #666666; font-style: italic;">//do what you want here...</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Gampang kan? tapi ini cuma buat verifikasi ringan, kalau butuh tingkat sekuritas yg tinggi pake CAPCTHA aja (^_^) Atu lagi, contoh code di atas jangan dikopi mentah-mentah ya, soalnya itu cuma cuplikan.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sahat-tambunan.com/2007/04/19/simple-form-security/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

