网上下载的IP地址数据库中的IP地址并非是我们常见的格式(61.175.232.30),而是这种(1034938398)类型的数据,看起来这两个数据好像没有关连,很复杂,其实并不复杂
,以“61.175.232.30”这个IP地址为例,IP地址转换成数字串方法如下:先将“61.175.232.30”转换为十六进制“3d.af.e8.1e”,然后去掉小数点后,变为“3dafe81e”,最后将这个十六进制数转换为十进制“1034938398”,那么“61.175.232.30”就变为“1034938398”了。
方法一:
代码如下 |
复制代码 |
public function ipToLong(){
$ip = $_SERVER['REMOTE_ADDR'];
$ip = explode('.', $ip);
$ip = array_reverse($ip);//数组反转
$r = 0;
for($i=0,$j=count($ip); $i<$j; $i++){
$r += $ip[$i] * pow(256, $i);
}
$r = sprintf("%u", $r);
echo $r;
}
|
方法二:
代码如下 |
复制代码 |
public function ipToLong(){
$ip = $_SERVER['REMOTE_ADDR'];
$ip = explode('.',$ip);
$r = ($ip[0] << 24) | ($ip[1] << 16) | ($ip[2] << 8) | $ip[3];
if($r < 0) $r += 4294967296;
echo $r ;
}
|
经测试本地的ip是:192.168.1.101,两个方法转换结果是3232235877
ping 192.168.1.101 和 ping 3232235877是一样的。
下面提供用C#实现IP地址转换的代码:
代码
代码如下 |
复制代码 |
//IP地址
string Ip = "61.175.232.30";
//取出IP地址去掉‘.’后的string数组
string [] Ip_List = Ip.Split (".".ToCharArray ());
string X_Ip = "";
//循环数组,把数据转换成十六进制数,并合并数组(3dafe81e)
foreach(string ip in Ip_List)
{
X_Ip += Convert.ToInt16 (ip).ToString ("x");
}
//将十六进制数转换成十进制数(1034938398)
long N_Ip = long.Parse (X_Ip, System.Globalization.NumberStyles.HexNumber);
|
OK,就这样转换成功了,不信,你可以用windows的命令行工具测试一下,ping 61.175.232.30 和 ping 1034938398 的效果是一样的,都是指向 61.175.232.30 的。
本文章介绍了一段关于不用递归实现php树程序代码,有需要的朋友可参考一下。
代码如下 |
复制代码 |
/**
* 创建父节点树形数组
* 参数
* $ar 数组,邻接列表方式组织的数据
* $id 数组中作为主键的下标或关联键名
* $pid 数组中作为父键的下标或关联键名
* 返回 多维数组
**/
function find_parent($ar, $id='id', $pid='pid') {
foreach($ar as $v) $t[$v[$id]] = $v;
foreach ($t as $k => $item){
if( $item[$pid] ){
if( ! isset($t[$item[$pid]]['parent'][$item[$pid]]) )
$t[$item[$id]]['parent'][$item[$pid]] =& $t[$item[$pid]];
}
}
return $t;
}
/**
* 创建子节点树形数组
* 参数
* $ar 数组,邻接列表方式组织的数据
* $id 数组中作为主键的下标或关联键名
* $pid 数组中作为父键的下标或关联键名
* 返回 多维数组
**/
function find_child($ar, $id='id', $pid='pid') {
foreach($ar as $v) $t[$v[$id]] = $v;
foreach ($t as $k => $item){
if( $item[$pid] ) {
$t[$item[$pid]]['child'][$item[$id]] =& $t[$k];
}
}
return $t;
}
$data = array(
array('ID'=>1, 'PARENT'=>0, 'NAME'=>'祖父'),
array('ID'=>2, 'PARENT'=>1, 'NAME'=>'父亲'),
array('ID'=>3, 'PARENT'=>1, 'NAME'=>'叔伯'),
array('ID'=>4, 'PARENT'=>2, 'NAME'=>'自己'),
array('ID'=>5, 'PARENT'=>4, 'NAME'=>'儿子'),
);
$p = find_parent($data, 'ID', 'PARENT');
$c = find_child($data, 'ID', 'PARENT');
Print_r ($c);
|
结果
代码如下 |
复制代码 |
Array
(
[1] => Array
(
[ID] => 1
[PARENT] => 0
[NAME] => 祖父
[child] => Array
(
[2] => Array
(
[ID] => 2
[PARENT] => 1
[NAME] => 父亲
[child] => Array
(
[4] => Array
(
[ID] => 4
[PARENT] => 2
[NAME] => 自己
[child] => Array
(
[5] => Array
(
[ID] => 5
[PARENT] => 4
[NAME] => 儿子
)
)
)
)
)
[3] => Array
(
[ID] => 3
[PARENT] => 1
[NAME] => 叔伯
)
)
)
[2] => Array
(
[ID] => 2
[PARENT] => 1
[NAME] => 父亲
[child] => Array
(
[4] => Array
(
[ID] => 4
[PARENT] => 2
[NAME] => 自己
[child] => Array
(
[5] => Array
(
[ID] => 5
[PARENT] => 4
[NAME] => 儿子
)
)
)
)
)
[3] => Array
(
[ID] => 3
[PARENT] => 1
[NAME] => 叔伯
)
[4] => Array
(
[ID] => 4
[PARENT] => 2
[NAME] => 自己
[child] => Array
(
[5] => Array
(
[ID] => 5
[PARENT] => 4
[NAME] => 儿子
)
)
)
[5] => Array
(
[ID] => 5
[PARENT] => 4
[NAME] => 儿子
)
)
|
phpmyadmin出错:缺少 mcrypt 扩展。请检查 PHP 配置。phpmyadmin无法加载解决方案:
今天配置phpMyAdmin出现了这个错: 无法载入 mcrypt 扩展,请检查 PHP 配置
出现以下几种情况后可能会造成运行phpmyadmin程序提示“无法载入 mcrypt 扩展,请检查 PHP 配置”的 错误提示
1、没有正确安装Mysql数据库,在系统服务中Mysql相关的服务没有启动 (请查看正确安装Mysql的方法)
2、在系统的 system32(C:windowssystem32) 目录下缺少 libmcrypt.dll文件,解决方法是找到php目录下的libmcrypt.dll,并将libmcrypt.dll复制到C:windows system32目录中,然后重新启动Web服务。
3、在C:windows目录下的php.ini文件中,没有将“;extension=php_mcrypt.dll”中的前面一个“;”去掉,所以不能使用相应功能,解决方法是打开php.ini文件
找到
;extension=php_mcrypt.dll
改成
extension=php_mcrypt.dll //去掉前面的;使之生效
4、Mysql目录没有读取权限,正确的目录权限如下:
administrator 完全控制
system 完全控制
user 读取加运行
其他的用户权限全部删除(也可保留,但安全性不高,建议删除),然后重启MYsql服务和Web服务(建议修改此项后重启一下服务器)
当你试过所有办法之后还是不行,其实还有一步,网上很少有说,解决办法,我的是WINXP+IIS+PHP5+MYSQL5
棹面>我的电脑>右键属性>高级>环境变量>系统变量>新建
名:phprc值:d:php (你的PHP在什么目录就是什么)
本文章总结了目前常用的几种分页代码,比如说上一页,下一页之类的,还有一种数字分页,像1,2,3...之类的等
![](/upload/news/201611/20120921023748375.gif)
分页代码
代码如下 |
复制代码 |
<?php
//page当前页,num每页的页数
$page=isset($_GET['page'])?intval($_GET['page']):1;
$num=5;
$conn = mysql_connect('127.0.0.1','root','');
if (!$conn) {
die('Could not connect:'.mysql_error());
}
mysql_select_db('shop');
//获取记录总数
$total=mysql_num_rows(mysql_query("select * from user"));
//计算页数
$pagenum=ceil($total/$num);
//限制页数不能超出范围
If($page>$pagenum || $page == 0){
Echo 'Error : Can Not Found The page.';
Exit;
}
//语句“Select * from table limit 0,10”从table表提取十条信息,0为起点,10为提取的数目
//$offset为起点值,如当前页为第一页,每页5条,起点即为0,同理当前为第二页,起点将为5
$offset=($page-1)*$num;
$result=mysql_query("select * from user limit $offset,$num");
while($it=mysql_fetch_array($result)){
echo 'id:'.$it['id'].' name:'.$it['name'].'<br />';
}
//显示链接页面切换链接,当前页无链接
for($i=1;$i<=$pagenum;$i++){
$show=($i!=$page)?"<a href='index.php?page=".$i."'>$i</a>":"<b>$i</b>";
echo $show." ";
}
echo $total.'条记录,每页5条,共'.$pagenum.'页';
mysql_free_result($result);
mysql_close($conn);
?> |
实例2
代码如下 |
复制代码 |
<?
//function.php 这里是主函数
function php_page($page_dbname,$page_size,$page)
{
if ($page=="")
{$page=1;};
if ($ljjl=="")
{$ljjl=0;};
if($page)
{
//$page_dbname="tb_insert";
//$page_size=4; //每页显示4条记录
$query="select count(*) as total from ".$page_dbname; //从数据库中读取数据
$result=mysql_query($query);
$message_count=mysql_result($result,0,"total"); //获取总的记录数
$page_count=ceil($message_count/$page_size); //获取总的页数
$offset=($page-1)*$page_size;
$query="select * from ".$page_dbname." order by id desc limit $offset, $page_size";
$result=mysql_query($query);
//内容显示 这里只是简单的作个示范,可以按你的要求随便改动。
while ($myrow=@mysql_fetch_array($result))
{
echo $myrow[name]." | ".$myrow[number]." | ".$myrow[tel]." | ".$myrow[address]."<br><br>";
}
}
echo "页次:".$page."/";
echo $page_count."页 记录:";
echo $message_count."条"."<br>";
if($page!=1)
{
echo "<a href=index.php?page=1>首页</a> ";
echo "<a href=index.php?page=".($page-1).">上一页</a> ";
}
else
{
echo "首页 ";
echo "上一页 ";
}
for($i=1; $i<=$page_count; $i++)
{
if ($page==$i)
{echo $i." ";}
else
{echo "<a href=index.php?page=$i>$i</a> ";}
}
if($page<$page_count)
{
echo "<a href=index.php?page=".($page+1).">下一页</a> ";
echo "<a href=index.php?page=".$page_count.">尾页</a>";
}
else
{
echo "下一页 ";
echo "尾页";
}
}
?>
|
//conn.php 连接数据库
代码如下 |
复制代码 |
<?php
$id=mysql_connect("localhost","root","root")or dir('连接失败:' . mysql_error());
//mysql_connect("IP","用户名","密码")
if(mysql_select_db("db_database06",$id))
echo "";
else
echo ('连接失败:' . mysql_error());
mysql_query("set names gb2312");
?>
|
//主程序,将上面俩个文件包含进来,再调用一个php_page()就可完成分页。:)
代码如下 |
复制代码 |
<?php
require_once("conn.php");
require_once("function.php");
php_page("tb_insert",3,$_GET[page]); // "tb_insert"是表名,3是在每页要显示的记录数,$_GET[page]是page的id,直接用就可以了。
?>
|
上在的一种是文字分页,比如说上一页,下一页之类的,还有一种数字分页,像1,2,3...之类的,这个比较简单,前者稍微复杂些.最后一种是他们2者结合
代码如下 |
复制代码 |
--> 1 //获取当前页数
if(isset($_GET['page'])){
$page = intval($_GET['page']);
}
else {
$page=1;
}
$PageSize = 1; //每页的记录数量
// 获取总数量
$sql = "select count(*) from blog";
$result = mysql_query($sql);
$row = mysql_fetch_row($result);
$amount = $row[0];
/*计算总页数
if($amount){
if($amount<$PageSize) { //如果总数量小于每页的记录数量$PageSize,那么只有一页.
$PageCount = 1;
}
if($amount%$PageSize) { //总数量除以每页的记录数量取于
$PageCount =& amp;nbsp;(int)($amount/$PageSize)+1;//如果有于,则页数等于总数量除每页的记录数加1
}
else{
$PageCount =& amp;nbsp;$amount/$PageSize;//没有,则结果是页数
}
}
else{
$PageCount = 0;
}*/
$PageCount = ceil($amount/$PageSize);//总页数=总数量除以每页数量 如果有小树,则进位< span style="color: #008000;">
if($Page>$PageCount|$page==0){// 如果当前页数大于总页数
echo "不能发现此页!";
exit();
}
//翻页链接
$PageOut = '';
if($page==1){//如果页数只有一页
$PageOut .= '第一页|上一页';
}
else{
$PageOut .= '<a href="index.php?page=1">第一页& lt;/a>|<a href="index.php?page='.($page-1).'">上一页</a>|';
}
if($page==$PageCount||$PageCount==0){//如果当前页等于总也数
$PageOut .= '下一页|尾页';
}
else{
$PageOut .= '<a href="index.php?page='.($page+1).'">下一页</a>|<a href="index.php?page='.$PageCount.'">尾页</a>';
}
//获取数据
if($amount){
$sql="select * from blog limit ".($page-1)*($PageSize).",$PageSize";
$result=mysql_query($sql);
while($row=mysql_fetch_array($result)){//此段代码只是示例
$blogs[] = array('bid'=>$row['bid'],'title'=>$row['title']);
foreach ($blogs as $blog){
$title=$blog['title'];
}
$output = "<a href=index.php?action=blog_del&bid=$blog[bid]>删除</a>".
"<a href=index.php?action=blog_edit&bid=$blog[bid]>编辑</a>".
"<a href=index.php?action=blog_view&bid=$blog[bid]>查看</a>";
include("template/default/blog.tpl.php");
echo $PageOut;
}
for($i=1;$i<=$PageCount;$i++){//数字分页
$Pageshow = ($i!=$page)?"<a href='index.php?page=".$i."'>$i</a>":"<b>$i</b>";
echo $PageShow;
}
echo $amount.'条记录,每页'.$PageSize.'条,共'.$PageCount.'页';
}
|
文章总结了一种比较好的UTF8中文字符截断程序实例分享给大家参考。
最简单的字符截取函数是用php自带的substr()
其实,PHP原生就有多charset下字符截取方案,额,所以就是这个样子...??.
Multibyte String Functions函数族中,
string mb_substr ( string $str , int $start [, int $length [, string $encoding ]] ) 用来字符串截取
int mb_strlen ( string $str [, string $encoding ] ) 返回字符串长度
但它只支持数字与字母不支持中文
实例
UTF8中文字符截断
代码如下 |
复制代码 |
<?php
/* UTF-8中文字符截断程序 */
$str = "123这是测试字符串";
$str1 = "()()";
echo subUTF8str($str,0,3)."<br>";
echo subUTF8str($str,0,4)."<br>";
echo subUTF8str($str1,0,4)."<br>";
echo subUTF8str($str1,0,10)."<br>";
function subUTF8str($str,$start=0,$length=80){
$cur_len = 0; //人理解的字符串长度
$all_len = strlen($str); //机器理解字符串长度
if($length > $all_len)
{
return $str;
}
for($i = 0;$i < $all_len;)
{
if($cur_len == $start)
{
break;
}
if (ord($str[$i]) > 127)
{
$i += 3;
}else{
$i += 1;
}
$cur_len ++;
}
$start_pos = $i;
$temp_pos = $cur_len;
for(;$cur_len - $temp_pos < $length;)
{
if($i >= $all_len)
break;
if (ord($str[$i]) > 127)
{
$i += 3;
}else{
$i += 1;
}
$cur_len ++;
}
$end_pos = $i;
return substr($str,$start_pos,$end_pos);
}
?> |
改进后我们把它分页,这样可支持ut8与gbk等中文字符截取
代码如下 |
复制代码 |
function substrs($content, $length){
if($length && strlen($content)>$length){
if($db_charset!='utf-8'){
$retstr='';
for($i = 0; $i < $length - 2; $i++) {
$retstr .= ord($content[$i]) > 127 ? $content[$i].$content[++$i] : $content[$i];
}
return $retstr;
}else{
return utf8_trim(substr($content,0,$length*3));
}
}
return $content;
}
function utf8_trim($str) {
$len = strlen($str);
for($i=strlen($str)-1;$i>=0;$i-=1){
$hex .= ' '.ord($str[$i]);
$ch = ord($str[$i]);
if(($ch & 128)==0) return substr($str,0,$i);
if(($ch & 192)==192)return substr($str,0,$i);
}
return($str.$hex);
}
|
标签:[!--infotagslink--]