当前位置: 编程技术>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() 函数
代码如下:
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);
}
}
?>
后面几个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;
}
}
?>
代码如下:
<?
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;
}
}
?>
最新技术文章: