当前位置:  编程技术>php
本页文章导读:
    ▪PHP5常用函数列表(分享)       如下所示: 代码如下:  usleep() 函数延迟代码执行若干微秒。  unpack() 函数从二进制字符串对数据进行解包。  uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID。  time_sleep.........
    ▪深入理解php的MySQL连接类       无意间在电脑里发现还有这么个Mysql的连接类,也不记得哪里收藏的了,贴上来吧。后面几个show_databases和show_tables....等方法都用了一堆echo,好像一直不喜欢在类的方法里直接用输出语句,.........
    ▪PHP之生成GIF动画的实现方法       代码如下所示: 代码如下:<?class GifMerge {     var $ver            = '1.1';     var $dly            = 50;     var $mod            = 'C_FILE';     var $first            = true;   .........

[1]PHP5常用函数列表(分享)
    来源: 互联网  发布时间: 2013-11-30
如下所示:
代码如下:

  usleep() 函数延迟代码执行若干微秒。
  unpack() 函数从二进制字符串对数据进行解包。
  uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID。
  time_sleep_until() 函数延迟代码执行直到指定的时间。
  PHP5常用函数之time_nanosleep() 函数延迟代码执行若干秒和纳秒。
  sleep() 函数延迟代码执行若干秒。
  show_source() 函数对文件进行语法高亮显示。
  strip_whitespace() 函数返回已删除 PHP 注释以及空白字符的源代码文件。
  pack() 函数把数据装入一个二进制字符串。
  ignore_user_abort() 函数设置与客户机断开是否会终止脚本的执行。
  highlight_string() 函数对字符串进行语法高亮显示。
  highlight_file() 函数对文件进行语法高亮显示。
  PHP5常用函数之get_browser() 函数返回用户浏览器的性能。
  exit() 函数输出一条消息,并退出当前脚本。
  eval() 函数把字符串按照 PHP 代码来计算。
  die() 函数输出一条消息,并退出当前脚本。
  defined() 函数检查某常量是否存在。
  define() 函数定义一个常量。
  constant() 函数返回常量的值。
  PHP5常用函数之connection_status() 函数返回当前的连接状态。
  connection_aborted() 函数检查是否断开客户机。
  zip_read() 函数读取打开的 zip 档案中的下一个文件。
  zip_open() 函数打开 ZIP 文件以供读取。
  zip_entry_read() 函数从打开的 zip 档案项目中获取内容。
  zip_entry_open() 函数打开一个 ZIP 档案项目以供读取。
  PHP5常用函数之zip_entry_name() 函数返回 zip 档案项目的名称。
  zip_entry_filesize() 函数返回 zip 档案项目的原始大小(在压缩之前)。
  zip_entry_compressionmethod() 函数返回 zip 档案项目的压缩方法。
  zip_entry_compressedsize() 函数返回 zip 档案项目的压缩文件尺寸。
  zip_entry_close() 函数关闭由 zip_entry_open() 函数打开的 zip 档案文件。
  zip_close() 函数关闭由 zip_open() 函数打开的 zip 档案文件。
  xml_set_unparsed_entity_decl_handler() 函数规定在遇到无法解析的实体名称(NDATA)声明时被调用的函数。
  xml_set_processing_instruction_handler() 函数规定当解析器在 XML 文档中找到处理指令时所调用的函数。
  xml_set_object() 函数允许在对象中使用 XML 解析器。
  PHP5常用函数之xml_set_notation_decl_handler() 函数规定当解析器在 XML 文档中找到符号声明时被调用的函数。
  xml_set_external_entity_ref_handler() 函数规定当解析器在 XML 文档中找到外部实体时被调用的函数。
  xml_set_element_handler() 函数建立起始和终止元素处理器。
  xml_set_default_handler() 函数为 XML 解析器建立默认的数据处理器。
  xml_set_character_data_handler() 函数建立字符数据处理器。
  xml_parser_set_option() 函数为 XML 解析器进行选项设置。
  xml_parser_get_option() 函数从 XML 解析器获取选项设置信息。
  xml_parser_free() 函数释放 XML 解析器。
  PHP5常用函数之xml_parser_create() 函数创建 XML 解析器。
  xml_parser_create_ns() 函数创建带有命名空间支持的 XML 解析器。
  xml_parse_into_struct() 函数把 XML 数据解析到数组中。
  xml_parse() 函数解析 XML 文档。
  xml_get_error_code() 函数获取 XML 解析器错误代码。
  xml_get_current_line_number() 函数获取 XML 解析器的当前行号。
  xml_get_current_column_number() 函数获取 XML 解析器的当前列号。
  PHP5常用函数之xml_get_current_byte_index() 函数获取 XML 解析器的当前字节索引。
  xml_error_string() 函数获取 XML 解析器的错误描述。
  utf8_encode() 函数把 ISO-8859-1 字符串编码为 UTF-8。
  utf8_decode() 函数把 UTF-8 字符串解码为 ISO-8859-1。
  wordwrap() 函数按照指定长度对字符串进行折行处理。
  vsprintf() 函数把格式化字符串写入变量中。
  vprintf() 函数输出格式化的字符串。
  vfprintf() 函数把格式化的字符串写到指定的输出流。
  PHP5常用函数之ucwords() 函数把字符串中每个单词的首字符转换为大写。
  ucfirst() 函数把字符串中的首字符转换为大写。
  trim() 函数从字符串的两端删除空白字符和其他预定义字符。
  substr_replace() 函数把字符串的一部分替换为另一个字符串。
  substr_count() 函数计算子串在字符串中出现的次数。
  substr_compare() 函数从指定的开始长度比较两个字符串。
  substr() 函数返回字符串的一部分。
  strtr() 函数转换字符串中特定的字符。
  strtoupper() 函数把字符串转换为大写。
  strtolower() 函数把字符串转换为小写。
  PHP5常用函数之strtok() 函数把字符串分割为更小的字符串。
  strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。
  strspn() 函数返回在字符串中包含的特定字符的数目。
  strrpos() 函数查找字符串在另一个字符串中最后一次出现的位置。
  strripos() 函数查找字符串在另一个字符串中最后一次出现的位置。
  strrev() 函数反转字符串。
  strrchr() 函数查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符。
  strpos() 函数返回字符串在另一个字符串中第一次出现的位置。
  PHP5常用函数之strpbrk() 函数在字符串中搜索指定字符中的任意一个。
  strncmp() 函数比较两个字符串。
  strncasecmp() 函数比较两个字符串。
  strnatcmp() 函数使用一种“自然”算法来比较两个字符串。
  strnatcasecmp() 函数使用一种“自然”算法来比较两个字符串。
  strlen() 函数返回字符串的长度。
  stristr() 函数查找字符串在另一个字符串中第一次出现的位置。
  stripos() 函数返回字符串在另一个字符串中第一次出现的位置。
  stripslashes() 函数删除由 addslashes() 函数添加的反斜杠。
  stripcslashes() 函数删除由 addcslashes() 函数添加的反斜杠。
  strip_tags() 函数剥去 HTML、XML 以及 PHP 的标签。
  strcspn() 函数返回在找到任何指定的字符之前,在字符串查找的字符数。
  PHP5常用函数之strcoll() 函数比较两个字符串。
  strcmp() 函数比较两个字符串。
  strchr() 函数搜索一个字符串在另一个字符串中的第一次出现。
  strcasecmp() 函数比较两个字符串。
  str_word_count() 函数计算字符串中的单词数。
  str_split() 函数把字符串分割到数组中。
  str_shuffle() 函数随机地打乱字符串中的所有字符。
  str_rot13() 函数对字符串执行 ROT13 编码。
  str_replace() 函数使用一个字符串替换字符串中的另一些字符。
  str_repeat() 函数把字符串重复指定的次数。
  str_pad() 函数把字符串填充为指定的长度。
  str_ireplace() 函数使用一个字符串替换字符串中的另一些字符。
  PHP5常用函数之sscanf() 函数根据指定的格式解析来自一个字符串的输入。
  sprintf() 函数把格式化的字符串写写入一个变量中。
  soundex() 函数计算字符串的 soundex 键。
  similar_text() 函数计算两个字符串的匹配字符的数目。
  sha1_file() 函数计算文件的 SHA-1 散列。
  sha1() 函数计算字符串的 SHA-1 散列。
  setlocale() 函数设置地区信息(地域信息)。
  PHP5常用函数之rtrim() P rtrim() 函数

    
[2]深入理解php的MySQL连接类
    来源: 互联网  发布时间: 2013-11-30
无意间在电脑里发现还有这么个Mysql的连接类,也不记得哪里收藏的了,贴上来吧。
后面几个show_databases和show_tables....等方法都用了一堆echo,好像一直不喜欢在类的方法里直接用输出语句,不过这也只是列举数据库和表名,构造函数的参数也可以给个默认值吧。
代码如下:

<?php
/*
* filename:mysql数据库连接类
*/
class mysql{
 private $db_host;  //数据库主机
 private $db_user;  //数据库用户名
 private $db_pwd;   //数据库用户名密码
 private $db_database;    //数据库名
 private $conn;           //数据库连接标识;
 private $result;         //执行query命令的结果资源标识
 private $sql;   //sql执行语句
 private $row;     //返回的条目数
 private $coding;  //数据库编码,GBK,UTF8,gb2312
 private $bulletin = true;    //是否开启错误记录
 private $show_error = true;  //测试阶段,显示所有错误,具有安全隐患,默认关闭
 private $is_error = false;   //发现错误是否立即终止,默认true,建议不启用,因为当有问题时用户什么也看不到是很苦恼的
 /*构造函数*/
 public function __construct($db_host,$db_user,$db_pwd,$db_database,$conn,$coding){
      $this->db_host=$db_host;
      $this->db_user=$db_user;
      $this->db_pwd = $db_pwd;
      $this->db_database=$db_database;
      $this->conn=$conn;
      $this->coding=$coding;
      $this->connect();
    }
 /*数据库连接*/
 public function connect()
 {
  if($this->conn=="pconn"){
   //永久链接
      $this->conn=mysql_pconnect($this->db_host,$this->db_user,$this->db_pwd);
  }else{
   //即时链接
   $this->conn=mysql_connect($this->db_host,$this->db_user,$this->db_pwd);
  }
  if(!mysql_select_db($this->db_database,$this->conn)){
   if($this->show_error){
    $this->show_error("数据库不可用:",$this->db_database);
   }
  }
  mysql_query("SET NAMES $this->coding");
 }
 /*数据库执行语句,可执行查询添加修改删除等任何sql语句*/
 public function query($sql)
 {
  if($sql == ""){
  $this->show_error("sql语句错误:","sql查询语句为空");}
     $this->sql = $sql;
     $result = mysql_query($this->sql,$this->conn);
  if(!$result){
   //调试中使用,sql语句出错时会自动打印出来
   if($this->show_error){
    $this->show_error("错误sql语句:",$this->sql);
   }
  }else{
   $this->result = $result;
  }
     return $this->result;
 }
 /*创建添加新的数据库*/
 public function create_database($database_name){
  $database=$database_name;
  $sqlDatabase = 'create database '.$database;
  $this->query($sqlDatabase);
 }
 /*查询服务器所有数据库*/
 //将系统数据库与用户数据库分开,更直观的显示?
 public function show_databases(){
  $rs=$this->query("show databases");
  echo "现有数据库:".$amount =$this->db_num_rows($rs);
  echo "<br />";
  $i=1;
  while($row = $this->fetch_array($rs)){
   echo "$i $row[Database]";
   echo "<br />";
   $i++;
  }
 }
 //以数组形式返回主机中所有数据库名
 public function databases()
 {
  $rsPtr=mysql_list_dbs($this->conn);
  $i=0;
  $cnt=mysql_num_rows($rsPtr);
  while($i<$cnt)
  {
    $rs[]=mysql_db_name($rsPtr,$i);
    $i++;
  }
  return $rs;
 }
 /*查询数据库下所有的表*/
 function show_tables($database_name){
  $this->query("show tables");
  echo "现有数据库:".$amount = $this->db_num_rows($rs);
  echo "<br />";
  $i=1;
  while($row = $this->fetch_array($rs)){
   $columnName="Tables_in_".$database_name;
   echo "$i $row[$columnName]";
   echo "<br />";
   $i++;
  }
 }
 /*
 mysql_fetch_row()    array  $row[0],$row[1],$row[2]
 mysql_fetch_array()  array  $row[0] 或 $row[id]
 mysql_fetch_assoc()  array  用$row->content 字段大小写敏感
 mysql_fetch_object() object 用$row[id],$row[content] 字段大小写敏感
 */
 /*取得结果数据*/
 public function mysql_result_li()
 {
  return mysql_result($str);
 }
 /*取得记录集,获取数组-索引和关联,使用$row['content'] */
 public function fetch_array()
 {
  return mysql_fetch_array($this->result);
 }
 //获取关联数组,使用$row['字段名']
 public function fetch_assoc()
 {
  return mysql_fetch_assoc($this->result);
 }
 //获取数字索引数组,使用$row[0],$row[1],$row[2]
 public function fetch_row()
 {
  return mysql_fetch_row($this->result);
 }
 //获取对象数组,使用$row->content
 public function fetch_Object()
 {
  return mysql_fetch_object($this->result);
 }
 //简化查询select
 public function findall($table)
 {
  $this->query("SELECT * FROM $table");
 }
 //简化查询select
 public function select($table,$columnName,$condition)
 {
  if($columnName==""){
   $columnName="*";
  }
  $this->query("SELECT $columnName FROM $table $condition");
 }
 //简化删除del
 public function delete($table,$condition){
  $this->query("DELETE FROM $table WHERE $condition");
 }
 //简化插入insert
 public function insert($table,$columnName,$value){
  $this->query("INSERT INTO $table ($columnName) VALUES ($value)");
 }
 //简化修改update
 public function update($table,$mod_content,$condition){
  $this->query("UPDATE $table SET $mod_content WHERE $condition");
 }
 /*取得上一步 INSERT 操作产生的 ID*/
 public function insert_id(){
  return mysql_insert_id();
    }
 //指向确定的一条数据记录
 public function db_data_seek($id){
  if($id>0){
   $id=$id-1;
  }
  if(!@mysql_data_seek($this->result,$id)){
   $this->show_error("sql语句有误:", "指定的数据为空");
  }
  return $this->result;
 }
 // 根据select查询结果计算结果集条数
 public function db_num_rows(){
   if($this->result==null){
    if($this->show_error){
     $this->show_error("sql语句错误","暂时为空,没有任何内容!");
   }
   }else{
    return  mysql_num_rows($this->result);
   }
 }
 // 根据insert,update,delete执行结果取得影响行数
 public function db_affected_rows(){
   return mysql_affected_rows();
 }
 //输出显示sql语句
 public function show_error($message="",$sql=""){
  if(!$sql){
   echo "<font color='red'>".$message."</font>";
   echo "<br />";
  }else{
   echo "<fieldset>";
   echo "<legend>错误信息提示:</legend><br />";
   echo "<div mce_>";
   echo "<div >";
   echo "<font color='white'>错误号:12142</font>";
   echo "</div><br />";
   echo "错误原因:".mysql_error()."<br /><br />";
   echo "<div >";
   echo "<font color='white'>".$message."</font>";
   echo "</div>";
   echo "<font color='red'><pre>".$sql."</pre></font>";
    $ip=$this->getip();
    if($this->bulletin){
     $time = date("Y-m-d H:i:s");
     $message=$message."/r/n$this->sql"."/r/n客户IP:$ip"."/r/n时间 :$time"."/r/n/r/n";
     $server_date=date("Y-m-d");
     $filename=$server_date.".txt";
     $file_path="error/".$filename;
     $error_content=$message;
     //$error_content="错误的数据库,不可以链接";
     $file = "error"; //设置文件保存目录
     //建立文件夹
     if(!file_exists($file)){
      if(!mkdir($file,0777)){
      //默认的 mode 是 0777,意味着最大可能的访问权
       die("upload files directory does not exist and creation failed");
      }
     }
     //建立txt日期文件
     if(!file_exists($file_path)){
      //echo "建立日期文件";
      fopen($file_path,"w+");
      //首先要确定文件存在并且可写
      if (is_writable($file_path))
      {
       //使用添加模式打开$filename,文件指针将会在文件的开头
       if (!$handle = fopen($file_path, 'a'))
       {
        echo "不能打开文件 $filename";
        exit;
       }
        //将$somecontent写入到我们打开的文件中。
       if (!fwrite($handle, $error_content))
       {
        echo "不能写入到文件 $filename";
        exit;
       }
       //echo "文件 $filename 写入成功";
       echo "——错误记录被保存!";
       //关闭文件
       fclose($handle);
      } else {
       echo "文件 $filename 不可写";
      }
     }else{
      //首先要确定文件存在并且可写
      if (is_writable($file_path))
      {
       //使用添加模式打开$filename,文件指针将会在文件的开头
       if (!$handle = fopen($file_path, 'a'))
       {
        echo "不能打开文件 $filename";
        exit;
       }
        //将$somecontent写入到我们打开的文件中。
       if (!fwrite($handle, $error_content))
       {
        echo "不能写入到文件 $filename";
        exit;
       }
       //echo "文件 $filename 写入成功";
       echo "——错误记录被保存!";
       //关闭文件
       fclose($handle);
      } else {
       echo "文件 $filename 不可写";
      }
     }
    }
    echo "<br />";
    if($this->is_error){
     exit;
    }
   }
   echo "</div>";
   echo "</fieldset>";
  echo "<br />";
 }
 //释放结果集
 public function free(){
  @mysql_free_result($this->result);
 }
 //数据库选择
 public function select_db($db_database){
  return mysql_select_db($db_database);
 }
 //查询字段数量
 public function num_fields($table_name){
  //return mysql_num_fields($this->result);
  $this->query("select * from $table_name");
  echo "<br />";
  echo "字段数:".$total = mysql_num_fields($this->result);
  echo "<pre>";
  for ($i=0; $i<$total; $i++){
   print_r(mysql_fetch_field($this->result,$i) );
  }
  echo "</pre>";
  echo "<br />";
 }
 //取得 MySQL 服务器信息
 public function mysql_server($num=''){
  switch ($num){
   case 1 :
   return mysql_get_server_info(); //MySQL 服务器信息
   break;
   case 2 :
   return mysql_get_host_info();   //取得 MySQL 主机信息
   break;
   case 3 :
   return mysql_get_client_info(); //取得 MySQL 客户端信息
   break;
   case 4 :
   return mysql_get_proto_info();  //取得 MySQL 协议信息
   break;
   default:
   return mysql_get_client_info(); //默认取得mysql版本信息
  }
 }
 //析构函数,自动关闭数据库,垃圾回收机制
 public function __destruct()
 {
  if(!empty($this->result)){
   $this->free();
  }
  mysql_close($this->conn);
 }//function __destruct();
 /*获得客户端真实的IP地址*/
 function getip(){
  if(getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
  {
   $ip = getenv("HTTP_CLIENT_IP");
  }
  else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")){
   $ip = getenv("HTTP_X_FORWARDED_FOR");
  }
  else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
  {
   $ip = getenv("REMOTE_ADDR");
  }
  else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")){
  $ip = $_SERVER['REMOTE_ADDR'];
  }
  else{
   $ip = "unknown";
  }
  return($ip);
 }
}
?>


    
[3]PHP之生成GIF动画的实现方法
    来源: 互联网  发布时间: 2013-11-30
代码如下所示:
代码如下:

<?
class GifMerge {
    var $ver            = '1.1';
    var $dly            = 50;
    var $mod            = 'C_FILE';
    var $first            = true;
    var $use_loop            = false;
    var $transparent        = false;
    var $use_global_in        = false;
    var $x                = 0;
    var $y                = 0;
    var $ch                = 0;
    var $fin            = 0;
    var $fout            = '';
    var $loop            = 0;
    var $delay            = 0;
    var $width            = 0;
    var $height            = 0;
    var $trans1             = 255;
    var $trans2             = 255;
    var $trans3             = 255;
    var $disposal            = 2;
    var $out_color_table_size    = 0;
    var $local_color_table_flag    = 0;
    var $global_color_table_size    = 0;
    var $out_color_table_sizecode    = 0;
    var $global_color_table_sizecode= 0;
    var $gif            = array(0x47, 0x49, 0x46);
    var $buffer            = array();
    var $local_in            = array();
    var $global_in            = array();
    var $global_out            = array();
    var $logical_screen_descriptor    = array();
    function GifMerge($images, $t1, $t2, $t3, $loop, $dl, $xpos, $ypos, $model) {
        if($model) {
            $this->mod = $model;
        }
        if($loop > -1) {
            $this->loop = floor($loop - 1);
            $this->use_loop = true;
        }
        if($t1 > -1 && $t2 > -1 && $t3 > -1) {
            $this->trans1 = $t1;
            $this->trans2 = $t2;
            $this->trans3 = $t3;
            $this->transparent = true;
        }
        for($i = 0; $i < count($images); $i++) {
            $dl[$i]    ? $this->delay = $dl[$i] : $this->delay = $this->dly;
            $xpos[$i] ? $this->x = $xpos[$i] : $this->x = 0;
            $ypos[$i] ? $this->y = $ypos[$i] : $this->y = 0;
            $this->start_gifmerge_process($images[$i]);
        }
        $this->fout .= "/x3b";
    }
    function start_gifmerge_process($fp) {
        if($this->mod == 'C_FILE') {
            if(!$this->fin = fopen($fp, 'rb')) {
                return;
            }
        } elseif($this->mod == 'C_MEMORY') {
            $this->ch = 0;
            $this->fin = $fp;
        }
        $this->getbytes(6);
        if(!$this->arrcmp($this->buffer, $this->gif, 3)) {
            return;
        }
        $this->getbytes(7);
        if($this->first) $this->logical_screen_descriptor = $this->buffer;
        $this->global_color_table_sizecode = $this->buffer[4] & 0x07;
        $this->global_color_table_size = 2 << $this->global_color_table_sizecode;
        if($this->buffer[4] & 0x80) {
            $this->getbytes((3 * $this->global_color_table_size));
            for($i = 0; $i < ((3 * $this->global_color_table_size)); $i++) {
                $this->global_in[$i] = $this->buffer[$i];
            }
            if($this->out_color_table_size == 0) {
                $this->out_color_table_size = $this->global_color_table_size;
                $out_color_table_sizecode = $this->global_color_table_sizecode;
                $this->global_out = $this->global_in;
            }
            if($this->global_color_table_size != $this->out_color_table_size || $this->arrcmp($this->global_out, $this->global_in, (3 * $this->global_color_table_size))) {
                $this->use_global_in = true;
            }
        }
        for($loop = true; $loop;) {
            $this->getbytes(1);
            switch($this->buffer[0]) {
                case 0x21:
                    $this->read_extension();
                    break;
                case 0x2c:
                    $this->read_image_descriptor();
                    break;
                case 0x3b:
                    $loop = false;
                break;
                default:
                    $loop = false;
            }
        }
        if($this->mod == 'C_FILE') {
            fclose($this->fin);
        }
    }
    function read_image_descriptor() {
        $this->getbytes(9);
        $head = $this->buffer;
            $this->local_color_table_flag = ($this->buffer[8] & 0x80) ? true : false;
            if($this->local_color_table_flag) {
            $sizecode = $this->buffer[8] & 0x07;
            $size = 2 << $sizecode;
            $this->getbytes(3 * $size);
            for($i = 0; $i < (3 * $size); $i++) {
                    $this->local_in[$i] = $this->buffer[$i];
                }
                if($this->out_color_table_size == 0) {
                    $this->out_color_table_size = $size;
                    $out_color_table_sizecode = $sizecode;
                for($i = 0; $i < (3 * $size); $i++)
                {
                    $this->global_out[$i] = $this->local_in[$i];
                }
                }
            }
            if($this->first) {
            $this->first = false;
            $this->fout .= "/x47/x49/x46/x38/x39/x61";
            if($this->width && $this->height) {
                $this->logical_screen_descriptor[0] = $this->width & 0xFF;
                $this->logical_screen_descriptor[1] = ($this->width & 0xFF00) >> 8;
                $this->logical_screen_descriptor[2] = $this->height & 0xFF;
                $this->logical_screen_descriptor[3] = ($this->height & 0xFF00) >> 8;
            }
            $this->logical_screen_descriptor[4] |= 0x80;
            $this->logical_screen_descriptor[5] &= 0xF0;
            $this->logical_screen_descriptor[6] |= $this->out_color_table_sizecode;
            $this->putbytes($this->logical_screen_descriptor, 7);
                $this->putbytes($this->global_out, ($this->out_color_table_size * 3));
            if($this->use_loop) {
                $ns[0] = 0x21;
                $ns[1] = 0xFF;
                $ns[2] = 0x0B;
                $ns[3] = 0x4e;
                $ns[4] = 0x45;
                $ns[5] = 0x54;
                $ns[6] = 0x53;
                $ns[7] = 0x43;
                $ns[8] = 0x41;
                $ns[9] = 0x50;
                $ns[10] = 0x45;
                $ns[11] = 0x32;
                $ns[12] = 0x2e;
                $ns[13] = 0x30;
                $ns[14] = 0x03;
                $ns[15] = 0x01;
                $ns[16] = $this->loop & 255;
                    $ns[17] = $this->loop >> 8;
                $ns[18] = 0x00;
                $this->putbytes($ns, 19);
            }
            }
          if($this->use_global_in) {
            $outtable = $this->global_in;
            $outsize = $this->global_color_table_size;
            $outsizecode = $this->global_color_table_sizecode;
        } else {
            $outtable = $this->global_out;
            $outsize = $this->out_color_table_size;
        }
        if($this->local_color_table_flag) {
            if($size == $this->out_color_table_size && !$this->arrcmp($this->local_in, $this->global_out, $size)) {
                $outtable = $global_out;
                $outsize = $this->out_color_table_size;
            } else {
                $outtable = $this->local_in;
                $outsize = $size;
                $outsizecode = $sizecode;
            }
        }
        $use_trans = false;
        if($this->transparent) {
            for($i = 0; $i < $outsize; $i++) {
                if($outtable[3 * $i] == $this->trans1 && $outtable [3 * $i + 1] == $this->trans2 && $outtable [3 * $i + 2] == $this->trans3) {
                    break;
                }
            }
            if($i < $outsize) {
                $transindex = $i;
                $use_trans = true;
            }
        }
        if($this->delay || $use_trans) {
            $this->buffer[0] = 0x21;
            $this->buffer[1] = 0xf9;
            $this->buffer[2] = 0x04;
            $this->buffer[3] = ($this->disposal << 2) + ($use_trans ? 1 : 0);
            $this->buffer[4] = $this->delay & 0xff;
            $this->buffer[5] = ($this->delay & 0xff00) >> 8;
            $this->buffer[6] = $use_trans ? $transindex : 0;
            $this->buffer[7] = 0x00;
            $this->putbytes($this->buffer,8);
        }
        $this->buffer[0] = 0x2c;
        $this->putbytes($this->buffer,1);
        $head[0] = $this->x & 0xff;
        $head[1] = ($this->x & 0xff00) >> 8;
        $head[2] = $this->y & 0xff;
        $head[3] = ($this->y & 0xff00) >> 8;
        $head[8] &= 0x40;
        if($outtable != $this->global_out) {
            $head[8] |= 0x80;
            $head[8] |= $outsizecode;
        }
        $this->putbytes($head,9);
        if($outtable != $this->global_out) {
            $this->putbytes($outtable, (3 * $outsize));
        }
        $this->getbytes(1);
        $this->putbytes($this->buffer,1);
        for(;;) {
            $this->getbytes(1);
            $this->putbytes($this->buffer,1);
            if(($u = $this->buffer[0]) == 0) {
                break;
            }
            $this->getbytes($u);
            $this->putbytes($this->buffer, $u);
            }
    }
    function read_extension() {
        $this->getbytes(1);
        switch($this->buffer[0]) {
            case 0xf9:
                    $this->getbytes(6);
                   break;
            case 0xfe:
                    for(;;) {
                    $this->getbytes(1);
                            if(($u = $this->buffer[0]) == 0) {
                            break;
                        }
                    $this->getbytes($u);
                    }
                break;
            case 0x01:
                    $this->getbytes(13);
                    for(;;) {
                    $this->getbytes(0);
                            if(($u = $this->buffer[0]) == 0) {
                            break;
                        }
                    $this->getbytes($u);
                    }
                break;
                   case 0xff:
                    $this->getbytes(9);
                    $this->getbytes(3);
                    for(;;) {
                    $this->getbytes(1);
                            if(!$this->buffer[0]) {
                                break;
                            }
                            $this->getbytes($this->buffer[0]);
                        }
                break;
            default:
                    for(;;) {
                    $this->getbytes(1);
                        if(!$this->buffer[0]) {
                            break;
                        }
                    $this->getbytes($this->buffer[0]);
                }
            }
    }
    function arrcmp($b, $s, $l) {
        for($i = 0; $i < $l; $i++) {
            if($s{$i} != $b{$i}) {
                return false;
            }
        }
        return true;
    }
    function getbytes($l) {
        for($i = 0; $i < $l; $i++) {
            if($this->mod == 'C_FILE') {
                    $bin = unpack('C*', fread($this->fin, 1));
                    $this->buffer[$i] = $bin[1];
                } elseif($this->mod == 'C_MEMORY') {
                        $bin = unpack('C*', substr($this->fin, $this->ch, 1));
                        $this->buffer[$i] = $bin[1];
                        $this->ch++;
                }
        }
        return $this->buffer;
    }
    function putbytes($s, $l) {
        for($i = 0; $i < $l; $i++) {
            $this->fout .= pack('C*', $s[$i]);
        }
    }
    function getAnimation() {
        return $this->fout;
    }
}
?>

    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3