gif89aファイルにコメントをつけるスクリプト

 
2時間くらいかけて作ってたんですが
根本から書き直さなければならなくなりました。
 
時間つかっちゃったのが悔しいので、バグりますが晒します。
 
ファイルポインタとか、これなんてC?ってスクリプトです。
ファイルポインタをバカ正直に使うんじゃなくて、
一度配列にファイルをおとしこめば、いいみたい。
 
次の機会に書き直します。

<?php
// mana 20081025-

require_once("../../conf/conf.php");

class addCommentToGif{
	
	var $fp_r;
	var $fp_w;
	
	var $comment;
	
	function __construct(){	
	}

	function addComment($comment){
		$path = TMP_DIR;
		$file_name = "img0.gif";
		$file_name_after = $file_name.".tmp.gif";
		
		
		$file_name_path  = $path."/".$file_name;
		$file_name_after_path = $path."/".$file_name_after;
		if(is_file($file_name_after_path))unlink($file_name_after_path);
		$this->fp_r = fopen($file_name_path,"rb");
		$this->fp_w = fopen($file_name_after_path,"wb");
		
		$this->comment = $comment;
		$comment_flag = 0;

		while(1){
			$c = fread($this->fp_r,1);
			if(ord($c) === 0x21){
				$c2 = fread($this->fp_r,1);
				if(ord($c2) === 0xfe){
					$this->addComment($this->comment);
					do{
						$c5 = fread($this->fp_r,1);
					}while($c5 === NULL);
					$comment_flag = 1;
				} else {
					fwrite($this->fp_r, $c,1);
					fwrite($this->fp_r, $c2,1);
				}
			} elseif($c === NULL){
echo "i am null";
				$c3 = fread($this->fp_r,1);
				if(ord($c3) === 0x3c){
					if($comment_flag === 1){
						fwrite($this->fp_w,$c,1);
						fwrite($this->fp_w,$c3,1);
					} else {
						$this->addComment($this->comment);
						$comment_flag = 1;
						fwrite($this->fp_w,$c3,1);
					}
					break;
				} else {
					fwrite($this->fp_w,$c3,1);
				}
			} else {
				fwrite($this->fp_w,$c,1);
			}
			
			
			if(feof($this->fp_r)){
				break;
			}
		}
		fclose($this->fp_r);
		fclose($this->fp_w);
		copy($file_name_after_path,$file_name_path);
		unlink($file_name_after_path);
	}
	function addCommnet($comment){
echo "comment start!!";
		$len = strlen($comment);
		fwrite($this->fp_w,(int)0x21);
		fwrite($this->fp_w,(int)0xfe);
		fwrite($this->fp_w,(int)$len);
		fwrite($this->fp_w,$comment);
		fwrite($this->fp_w,NULL);
		
	}
}
?>