当前位置:  编程技术>php
本页文章导读:
    ▪php 检测图片木马(多进制编程)的代码      本php检测图片木马的程序,从制作原理来分析木马程序。 有些木马程序是十六进制编码写的,因此需要花些心思做检测,于是实现了这个php木马检测类。 代码: <?php /** * Upload 文件上.........
    ▪php mysqli和mysql区别详解      一,PHP-MySQL 是 PHP 操作 MySQL 资料库最原始的 Extension ,PHP-MySQLi 的 i 代表 Improvement ,提更了相对进阶的功能。 PDO (PHP Data Object) 则是提供了一个 Abstraction Layer 来操作资料库。 例子: <?php .........
    ▪php mysqli类的演示例子      php调用mysqli类的例子,代码如下: <? set_time_limit(0); $mysql_cfg["host"]="localhost"; //主机 $mysql_cfg["port"] = 6033; //端口 $mysql_cfg["user"] = "root"; //用户名 $mysql_cfg["pass"]= "pass11";//密码 $mysql_cfg["db".........

[1]php 检测图片木马(多进制编程)的代码
    来源: 互联网  发布时间: 2013-12-24

本php检测图片木马的程序,从制作原理来分析木马程序。
有些木马程序是十六进制编码写的,因此需要花些心思做检测,于是实现了这个php木马检测类。

代码:

<?php 
/** 
* Upload 文件上传类
* 用于检测木马文件
*/ 
class Upload { 
private static $image = null; 
private static $status = 0; 
private static $suffix = null; 
private static $imageType = array('.jpg', '.bmp','.gif','.png'); 
private static $message = array( 
'0' => '没有错误发生,文件上传成功。', 
'1' => '上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。', 
'2' => '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。', 
'3' => '文件只有部分被上传。', 
'4' => '没有文件上传。', 
'5' => '未能通过安全检查的文件。', 
'6' => '找不到临时文件夹。', 
'7' => '文件写入失败。', 
'8' => '文件类型不支持', 
'9' => '上传的临时文件丢失。', 
); 
//@ 开始执行文件上传 
public static function start($feild = 'file') { 
if (!empty($_FILES)) { 
self::$status = $_FILES[$feild]['error']; 
if (self::$status > 0) 
return array('status' => self::$status, 'msg' => self::$message[self::$status]); 
self::$image = $_FILES[$feild]['tmp_name']; 
self::$suffix = strtolower(strrchr($_FILES[$feild]['name'], '.')); 
return array('status' => self::_upload(), 'path' => self::$image, 'msg' => self::$message[self::$status]); 
} else { 
return array('status' => self::$status, 'msg' => self::$message[self::$status]); 
} 
} 
//@ 私有 上传开始 
private static function _upload($path = './upload/') { 
date_default_timezone_set('PRC'); 
$newFile = $path . date('Y/m/d/His') . rand(100, 999) . self::$suffix; 
self::umkdir(dirname($newFile)); 
if (is_uploaded_file(self::$image) && move_uploaded_file(self::$image, $newFile)) { 
self::$image = $newFile; 
if (in_array(self::$suffix, self::$imageType)) 
return self::checkHex(); 
else 
return self::$status = 0; 
} else { 
return self::$status = 9; 
} 
} 
//@ 私有 16进制检测 
private static function checkHex() { 
if (file_exists(self::$image)) { 
$resource = fopen(self::$image, 'rb'); 
$fileSize = filesize(self::$image); 
fseek($resource, 0); 
if ($fileSize > 512) { // 取头和尾 
$hexCode = bin2hex(fread($resource, 512)); 
fseek($resource, $fileSize - 512); 
$hexCode .= bin2hex(fread($resource, 512)); 
} else { // 取全部 
$hexCode = bin2hex(fread($resource, $fileSize)); 
} 
fclose($resource); 
/* 匹配16进制中的 <% ( ) %> */ 
/* 匹配16进制中的 <? ( ) ?> */ 
/* 匹配16进制中的 <script | /script> 大小写亦可*/ 
if (preg_match("/(3c25.*?28.*?29.*?253e)|(3c3f.*?28.*?29.*?3f3e)|(3C534352495054)|(2F5343524950543E)|(3C736372697074)|
(2F7363726970743E)/is", $hexCode)) 
self::$status = 5; 
else 
self::$status = 0; 
return self::$status; 
} else { 
return self::$status = 9; 
} 
} 
//@ 私有 创建目录 
private static function umkdir($dir) { 
if (!file_exists($dir) && !is_dir($dir)) { 
self::umkdir(dirname($dir)); 
@mkdir($dir); 
} 
} 
} 

    
[2]php mysqli和mysql区别详解
    来源: 互联网  发布时间: 2013-12-24

一,PHP-MySQL 是 PHP 操作 MySQL 资料库最原始的 Extension ,PHP-MySQLi 的 i 代表 Improvement ,提更了相对进阶的功能。
PDO (PHP Data Object) 则是提供了一个 Abstraction Layer 来操作资料库。
例子:

<?php 
mysql_connect($db_host, $db_user, $db_password); 
mysql_select_db($dn_name); 
$result = mysql_query("SELECT `name` FROM `users` WHERE `location` = '$location'"); 
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
{ 
echo $row['name']; 
} 
mysql_free_result($result); 
?> 

这种方式不能 Bind Column ,以前例的 SQL 叙述来说,$location 的地方容易被 SQL Injection。后来于是发展出了 mysql_escape_string() (备注:5.3.0之后弃用) 以及
mysql_real_escape_string()解决此问题。

例子:

<?php 
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'", 
mysql_real_escape_string($user), 
mysql_real_escape_string($password)); 
mysql_query($query); 
?> 

在 PHP-MySQLi 中有了不少进步,除了透过 Bind Column 来解决上述问题,而且也多援 Transaction, Multi Query ,并且同时提供了 Object oriented style (下面这段 PHP-MySQLi 范
例的写法) 和 Procedural style (上面 PHP-MySQL 范例的写法)两种写法等。

例子:

<?php 
$mysqli = new mysqli($db_host, $db_user, $db_password, $db_name); 
$sql = "INSERT INTO `users` (id, name, gender, location) VALUES (?, ?, ?, ?)"; 
$stmt = $mysqli->prepare($sql); 
$stmt->bind_param('dsss', $source_id, $source_name, $source_gender, $source_location); 
$stmt->execute(); 
$stmt->bind_result($id, $name, $gender, $location); 
while ($stmt->fetch()) 
{ 
echo $id . $name . $gender . $location; 
} 
$stmt->close(); 
$mysqli->close(); 
?> 

缺点,例如得 Bind Result,这个就有点多馀,不过这其实无关紧要,因为最大的问题还是在于这不是一个抽象(Abstraction)的方法。
于是 PDO 就出现了(备注:目前 Ubuntu 和 Debian 来说,PDO 并没有直接的套件可以安装,而是必须透过 PECL 安装)。

例子:

roga@carlisten-lx:~$ pecl search pdo
Package Stable/(Latest) Local
PDO 1.0.3 (stable) PHP Data Objects Interface.
PDO_4D 0.3 (beta) PDO driver for 4D-SQL database
PDO_DBLIB 1.0 (stable) FreeTDS/Sybase/MSSQL driver for PDO
PDO_FIREBIRD 0.2 (beta) Firebird/InterBase 6 driver for PDO
PDO_IBM 1.3.2 (stable) PDO driver for IBM databases
PDO_INFORMIX 1.2.6 (stable) PDO driver for IBM Informix INFORMIX databases
PDO_MYSQL 1.0.2 (stable) MySQL driver for PDO
PDO_OCI 1.0 (stable) Oracle Call Interface driver for PDO
PDO_ODBC 1.0.1 (stable) ODBC v3 Interface driver for PDO
PDO_PGSQL 1.0.2 (stable) PostgreSQL driver for PDO
PDO_SQLITE 1.0.1 (stable) SQLite v3 Interface driver for PDO
pdo_user 0.3.0 (beta) Userspace driver for PDO

当透过 PECL 安装装好后,就可以透过以下方式来操作资料库:

<?php 
$dsn = "mysql:host=$db_host;dbname=$db_name"; 
$dbh = new PDO($dsn, $db_user, $db_password); 
$sql = "SELECT `name`, `location` FROM `users` WHERE `location` = ? , `name` = ?"; 
$sth = $dbh->prepare($sql); 
$sth->execute(array($location, $name)); 
$result = $sth->fetch(PDO::FETCH_OBJ); 
echo $result->name . $result->location; 
$dbh = NULL; 
?> 

pdo的好处:
1,PDO 连接资料库时透过 Connection String 来决定连接何种资料库。
2,PDO 可以透过 PDO::setAttribute 来决定连线时的设定,像是 Persistent Connection, 回传错误的方式(Exception, E_WARNING, NULL)。甚至是回传栏位名称的大小写…等等。
2,PDO 支援 Bind Column 的功能,除了基本的 Prepare, Execute 以外,也可以 Bind 单一栏位,并且指定栏位型态。
4,PDO 是 Abstraction Layer 所以就算更换储存媒介,需要花的功夫比起来是最少的。

个人比较喜欢使用DBI 来连接资料库,像是 ActiveRecord 以及 Propel ORM(Object-Relational Mapping)。
例如,以 ActiveRecord 为例,如果要实现这样的 SQL 叙述…
INSERT INTO `users` (id, name, gender, location) VALUES(1, 'roga', 'male', 'tpe')
pdo的操作方式:

<?php 
$sql = "INSERT INTO `users` (id, name, gender, location) VALUES(?, ?, ?, ?)"; 
$sth = $dbh->prepare($sql); 
$sth->execute(array(1, 'roga', 'male', 'tpe')); 
?> 

以ActiveRecord 来说的话,则是:
 

<?php 
$user = new User(); 
$user->id = 1; 
$user->name = 'roga'; 
$user->gender = 'male'; 
$user->location = 'tpe'; 
$user->save(); 
?> 

mysql是非持继连接函数而mysqli是永远连接函数。也就是说
mysql每次链接都会打开一个连接的进程而mysqli多次运行mysqli将使用同一连接进程,从而减少了服务器的开销。
有些朋友在编程的时候,使用new mysqli('localhost', usenamer', 'password', 'databasename');总是报
错,Fatal error: Class 'mysqli' not found in d:\...
mysqli类不是php自带的吗?
不是默认开启的,win下要改php.ini,去掉php_mysqli.dll前的;,linux下要把mysqli编译进去。

一:Mysqli.dll是一个允许以对象的方式或者过程操作数据库的,它的使用方式也很容易。

几个常见的操作和 mysql.dll做一个对比。
1,

<?php
mysql.dll(可以理解为函数式的方式): 
$conn = mysql_connect('localhost', 'user', 'password'); //连接mysql数据库 
mysql_select_db('data_base'); //选择数据库 
   
$result = mysql_query('select * from data_base');//这里有第二个可选参数,指定打开的连接
$row = mysql_fetch_row( $result ) ) //为了简单,这里只取一行数据 
echo $row[0]; //输出第一个字段的值 

  mysqli也有过程式的方式,只不过开始贯以mysqli的前缀,其他都差不多。如果mysqli以过程式的方式操作的话, 有些函数必须指定资源,比如说 mysqli_query(资源标识,SQL语句),
并且资源标识的参数是放在前面的,而 mysql_query(SQL语句,'可选')的资源标识是放在后面的,并且可以不指定,它默认是上一个打开的连接或资源。

2,mysqli.dll(对象方式):

<?php
$conn = new mysqli('localhost', 'user', 'password','data_base'); 
//这里的连接是new出来的,最后一个参数是直接指定数据库,不用mysql_select_db()了 
//也可以构造时候不指定,然后 $conn -> select_db('data_base') 
$result = $conn -> query( 'select * from data_base' ); 
$row = $result -> fetch_row(); //取一行数据 
echo row[0]; //输出第一个字段的值 

二,mysql_fetch_row(),mysql_fetch_array()
这两个函数,返回的都是一个数组,区别就是第一个函数返回的数组是只包含值,只能$row[0], $row[1],这样以数组下标来读取数据,而mysql_fetch_array()返回的数组既包含第一种,也包含键值对的形式,可以这样读取数据,(假如数据库的字段是 username,passwd):
$row['username'], $row['passwd']
而且,如果用($row as $kay => $value)来操作的话,还以直接取得数据库的字段名称。
更主要的是mysqli是php5提供的新函数库,(i)表示改进,其执行速度更快。

以上就是php编程中mysql与mysqli的区别了,希望对大家有一定的帮助。


    
[3]php mysqli类的演示例子
    来源: 互联网  发布时间: 2013-12-24

php调用mysqli类的例子,代码如下:

<?
set_time_limit(0);

$mysql_cfg["host"]="localhost"; //主机
$mysql_cfg["port"] = 6033; //端口
$mysql_cfg["user"] = "root"; //用户名
$mysql_cfg["pass"]= "pass11";//密码
$mysql_cfg["db"]='test'; //数据库

$db = new mysqli($mysql_cfg["host"], $mysql_cfg["user"], $mysql_cfg["pass"],$mysql_cfg["db"],$mysql_cfg["port"]);
$db->set_charset("utf8");
$query = "SELECT * from part";
if ($result = $db->query($query)) {
    while ($row = $result->fetch_assoc()) {
        printf ("%s (%s)\n", $row['id'], $row['cn_name']);
    }
    $result->close();
}
$db->close();

//mysqli类的实例
?>

mysqli类中的方法,说明:
 

mysqli_affected_rows -返回一个MySQL操作受影响的行数
mysqli_autocommit -开启或关闭 autocommit 数据库修改
mysqli_bind_param -别名mysqli_stmt_bind_param ( )
mysqli_bind_result -别名mysqli_stmt_bind_result ( )
mysqli_change_user -更改指定数据库连接的用户
mysqli_character_set_name -返回数据库连接的默认字符集
mysqli_client_encoding -别名mysqli_character_set_name ( )
mysqli_close -关闭当前打开数据库连接
mysqli_commit -当前事物
mysqli_connect_errno -返回最后一次操作的错误代码
mysqli_connect_error -返回最后一次操作的错误字符串描述
mysqli_connect -打开一个新的连接到MySQL服务器
mysqli_data_seek -在当前记录结果集中任意移动行指针
mysqli_debug -调试
mysqli_disable_reads_from_master -禁用读取主对像
mysqli_disable_rpl_parse -禁用RPL解析
mysqli_dump_debug_info -转储调试信息的日志
mysqli_embedded_connect -打开一个连接到嵌入式MySQL服务器
mysqli_enable_reads_from_master -启用内容由主
mysqli_enable_rpl_parse -启用RPL解析
mysqli_errno -返回错误代码最近函数调用
mysqli_error -返回一个字符串描述过去的错误
mysqli_escape_string -别名mysqli_real_escape_string ( )
mysqli_execute -别名mysqli_stmt_execute ( )
mysqli_fetch_array -从结果集中取得一行作为关联,数字数组,或两者兼施
mysqli_fetch_assoc -从结果集中取得一行作为关联数组
mysqli_fetch_field_direct -获取元数据的一个单一的领域
mysqli_fetch_field -返回明年领域中的结果集
mysqli_fetch_fields -返回一个数组对象代表领域的结果集
mysqli_fetch_lengths -返回长度列的当前行的结果集
mysqli_fetch_object -返回当前行的结果集作为一个对象
mysqli_fetch_row -取得结果集中取得一行作为枚举数组
mysqli_fetch -别名mysqli_stmt_fetch ( )
mysqli_field_count -返回的列数最近查询
mysqli_field_seek -设为结果指针到指定的外地抵消
mysqli_field_tell -获取当前外地抵消的结果指针
mysqli_free_result -释放内存与结果
mysqli_get_client_info -返回MySQL客户端版本作为一个字符串
mysqli_get_client_version -取得MySQL客户端信息
mysqli_get_host_info -返回一个字符串代表的连接类型使用
mysqli_get_metadata -别名mysqli_stmt_result_metadata ( )
mysqli_get_proto_info -返回版本的MySQL使用协议
mysqli_get_server_info -返回版本的MySQL服务器
mysqli_get_server_version -返回版本的MySQL服务器作为一个整数
mysqli_info -检索信息,最近执行的查询
mysqli_init -初始化MySQLi并返回一个资源使用mysqli_real_connect ( )
mysqli_insert_id -返回自动生成的编号使用最后查询
mysqli_kill -要求服务器要杀死一个MySQL线程
mysqli_master_query -强制执行查询总在主/从设置
mysqli_more_results -检查是否有任何更多的查询结果来自一个多查询
mysqli_multi_query -执行查询数据库
mysqli_next_result -准备明年的结果multi_query
mysqli_num_fields -获取的若干领域中的结果
mysqli_num_rows -获取的行数的结果
mysqli_options -设置选项
mysqli_param_count -别名mysqli_stmt_param_count ( )
mysqli_ping -的Ping一个服务器连接,或尝试重新连接,如果已下降
mysqli_prepare -准备一个SQL语句的执行
mysqli_query -执行查询数据库
mysqli_real_connect -打开一个连接到MySQL服务器
mysqli_real_escape_string -转义特殊字符的字符串,用于SQL语句,并考虑到当前的字符集的连接
mysqli_real_query -执行一个SQL查询
mysqli_report -启用或禁用内部报告功能
mysqli_rollback -回滚当前事务
mysqli_rpl_parse_enabled -检查是否启用RPL解析
mysqli_rpl_probe - RPL探针
mysqli_rpl_query_type -返回RPL查询类型
mysqli_select_db -选择的默认数据库数据库查询
mysqli_send_long_data -别名mysqli_stmt_send_long_data ( )
mysqli_send_query -发送查询并返回
mysqli_server_end -关机嵌入式服务器
mysqli_server_init -初始化嵌入式服务器
mysqli_set_charset -集的默认客户端字符集
mysqli_set_opt -别名mysqli_options ( )
mysqli_sqlstate -返回SQLSTATE错误从一个MySQL操作
mysqli_ssl_set -用于建立安全连接使用SSL
mysqli_stat -获取当前的系统状态
mysqli_stmt_affected_rows -返回总数列改变,删除或插入的最后执行的声明
mysqli_stmt_bind_param -绑定变量一份声明作为参数
mysqli_stmt_bind_result -绑定变量的一份声明中存储的结果
mysqli_stmt_close -关闭一份声明
mysqli_stmt_data_seek -寻找一个任意行声明的结果集
mysqli_stmt_errno -返回错误代码的最新声明呼吁
mysqli_stmt_error -返回一个字符串描述最后声明错误
mysqli_stmt_execute -执行一个准备查询
mysqli_stmt_fetch -获取结果一份准备好的声明中纳入约束变量
mysqli_stmt_free_result -免储存记忆的结果给予处理的声明
mysqli_stmt_init -初始化了言,并返回一个对象,用于mysqli_stmt_prepare
mysqli_stmt_num_rows -返回的行数报表结果集
mysqli_stmt_param_count -返回一些参数给定的声明
mysqli_stmt_prepare -准备一个SQL语句的执行
mysqli_stmt_reset -重置一份声明
mysqli_stmt_result_metadata -返回结果集元数据的一份书面声明
mysqli_stmt_send_long_data -发送数据块
mysqli_stmt_sqlstate -返回SQLSTATE错误行动从以往的声明
mysqli_stmt_store_result -转让的结果集由一份声明
mysqli_store_result -转让的结果集的最后查询
mysqli_thread_id -返回线程ID为当前连接
mysqli_thread_safe -返回是否线程安全考虑或不
mysqli_use_result -开创检索结果集
mysqli_warning_count -返回一些警告过去查询提供链接

    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php获取数组长度的方法举例 iis7站长之家
▪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