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); } } ?>