Tolong pilih kategori sesuai, jenis posting (pertanyaan atau bukan) dan sertakan tag/topik yang sesuai misal komputer, php, mysql, dll.
Promosi atau posting tidak pada tempatnya akan kami hapus.
Mencantumkan kode program di posting Anda, tolong ikuti aturan yang sesuai, baca http://diskusiweb.com/discussion/39204/aturan-cara-menyisipkan-kode-program-di-diskusiweb

Baca cara posting gambar/image di post Anda: http://www.diskusiweb.com/discussion/47345/cara-menyisipkan-menyertakan-image-pada-posting/p1

Headers Already Sent

edited November 2012 in Share
<h2>
APA?</h2>
<p>
Baru-baru ini, banyak yang mengirimkan paket yang berisi sebuah buku didalamnya dan ternyata itu adalah <strong>BOM</strong>. Buku tersebut dikirimkan kepada beberapa orang yang sudah dialamatkan kepada mereka.</p>
<p>
<strong>Apa hubungannya dengan buku?</strong><br>
Hampir sama logikanya dengan <em>headers</em>. Anggap saja kita mempunyai data (buku) yang harus ditampilkan pada <em>browser </em>(penerima).<br>
Secara disengaja ataupun tidak disengaja, bisa saja si pengirim mengirimkan paket tersebut melalui orang yang salah, yang isinya bisa diganti menjadi <strong>BOM</strong>. </p>
<p>
Jika data tersebut dikirim dengan cara yang salah (dengan mengirimkan ataupun memodifikasi <em>header </em>HTTP) sebelum <em>output </em>dibuat, maka akan menampilkan pesan seperti ini :</p>
<pre>Warning: Cannot modify header information - headers already sent</pre>
<hr>
<h2>
SIAPA?</h2>
<p>
Yang paling berperan dalam hal ini adalah : </p>
<ul>
<li>
Fungsi <a href="http://php.net/manual/en/function.header.php">header </a></li>;
<li>
Fungsi <a href="http://php.net/manual/en/function.header-remove.php">header_remove</a></li>;
<li>
Fungsi <a href="http://php.net/manual/en/function.session-start.php">session_start</a></li>;
<li>
Fungsi <a href="http://php.net/manual/en/function.session-regenerate-id.php">session_regenerate_id</a></li>;
<li>
Fungsi <a href="http://php.net/manual/en/function.setcookie.php">setcookie</a></li>;
<li>
Fungsi <a href="http://php.net/manual/en/function.setrawcookie.php">setrawcookie</a></li>;
<li>
<em>Editor </em>yang dipakai</li>
<li>
<em>Programmer</em></li>
</ul>
<hr>
<h2>
KAPAN?</h2>
<p>
<strong>Headers already sent</strong> dapat terjadi ketika melakukan hal seperti ini :</p>
<h4>
Kasus 1</h4>
<pre><?php
echo "Sesuatu..";
header("location: google.com");
?></pre>
<h4>
Kasus 2</h4>
<pre><html>
<head></head>
<body>
<?php
session_start();
echo "Sesuatu..";
?>
</body>
</html></pre>
<h4>
Kasus 3</h4>
<pre>



<?php

session_start();
echo "Sesuatu..";
?>


</pre>
<h4>
Kasus 4</h4>
<pre>hex : EF BB BF
dec : 239 187 191
ISO : </pre>
<hr>
<h2>
DIMANA?</h2>
<h4>
Kasus 1</h4>
<p>
Pada kasus 1, kita melihat adanya <tt>echo </tt>untuk memproses <em>ouput </em>dan header yang me-<em>redirect</em>. <br>
Dalam kasus ini, hal tersebut tidak dapat dilakukan, karena sebelumnya <tt>echo </tt>sudah membuat data, lalu <tt>header </tt>dikirimkan sebelum <em>output </em>dibuat (selesai diakhir script). </p>
<h4>
Kasus 2 </h4>
<p>
Pada kasus 2, tag <tt><html></tt> sudah lebih dulu memproses <em>output</em>, lalu ada fungsi <tt>session_start </tt>yang membuat sesi sebelum proses <em>output </em>selesai.</p>
<h4>
Kasus 3</h4>
<p>
Pada kasus 3, terdapat banyak sekali <em>whitespace</em>, <em>new line</em>, <em>tab </em>dan <em>NULL-byte</em>. Mereka adalah <a href="http://en.wikipedia.org/wiki/ASCII"><strong>ASCII Code</strong></a> yang dapat dijadikan karakter HTML.<br>
Lagi-lagi, output sudah diproses dan <tt>session_start </tt>dibuat sebelum akhirnya <em>output</em> benar-benar dihasilkan. </p>
<h4>
Kasus 4</h4>
<p>
Pada kasus 4, inilah yang benar-benar disebut <strong>BOM </strong>alias <a href="http://en.wikipedia.org/wiki/Byte_order_mark"><strong>Byte Order Mark</strong></a>.<br>
Pada kasus ini, terjadi dan diakibatkan pada <em>editor </em>yang digunakan. Ketika menyimpan <em>file </em>PHP, di-<em>encode </em>dengan <strong>UTF-8</strong> dengan BOM. </p>
<hr>
<h2>
BAGAIMANA?</h2>
<h4>
Kasus 1 </h4>
<p>
Pada kasus ini, tidak ada yang dapat dilakukan kecuali memilih salah satu antara <tt>echo </tt>yang ingin dibuat atau <tt>header </tt>yang ingin melakukan <em>redirect</em>.</p>
<h4>
Kasus 2</h4>
<p>
Pindahkan <tt>session_start </tt>sebelum tag <tt><html> </tt>dibuat.</p>
<pre><?php session_start(); ?>
<html>
<head></head>
<body>
<?php echo "Sesuatu.."; ?>
</body>
</html></pre>
<h4>
Kasus 3</h4>
<p>
Hindari <em>whitespace</em>, <em>new line</em>, <em>tab </em>dan <em>NULL-byte</em> sebelum <em>tag </em><tt><?php </tt>dan setelah <em>tag</em> penutupnya.</p>
<pre><?php
session_start();
echo "Sesuatu..";
?></pre>
<h4>
Kasus 4</h4>
<p>
Simpan <em>file </em>PHP dengan menggunakan <strong>UTF-8</strong> tanpa di-<em>encode</em> dengan BOM.<br>
<br>
<img alt="" src="https://dl.dropbox.com/u/83581209/etc/bom.png"></p>;
<hr>
<h3>
Note</h3>
<p>
Kasus "<strong>Headers Already Sent</strong>" sebenarnya cukup mudah untuk ditangani.<br>
<strong>Tempatkan fungsi yang mengirimkan atau memodifikasi header HTTP sebelum ada fungsi yang mem-proses output</strong>.<br>
<br>
Jika tidak ada waktu untuk melakukan perubahan pada hal-hal tersebut, gunakan <a href="http://www.php.net/manual/en/outcontrol.examples.basic.php"><strong>Output Control</strong></a>. untuk menangani hal tersebut.</p>
Sign In or Register to comment.