利用php调用discuz登录框方法有很多种,最常用的就是直接使用iframe方式调用了,还有就是直接在php页面中调用了,下面小编来给大家总结一些常用的方法。
方法一,直接使用iframe调用一个加了discuz登录功能的页面
代码如下 |
复制代码 |
<iframe" width=100% src="/login.html" style="width:100%; height:32px" scrolling="no" frameborder="0" ></iframe>
|
login.html代码
代码如下 |
复制代码 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title> c-gd.com-登录</title>
<style type="text/css">
<!--
* {
margin:0;
padding:0;
}
body {
font: normal 12px Arial, Helvetica, Sans-Serif, "宋体";
line-height: 160%;
text-align:left;
color: #3a3a3a;
margin:0;
padding:0;
}
img {
border:0;
}
ul, li {
padding:0;
margin:0;
list-style:none;
}
a {
text-decoration: none;
color:#3a3a3a;
}
a:hover {
color: #C00;
}
.banner {
margin-bottom:1px;
height:59px;
}
.denglu {
height:31px;
border-bottom:1px solid #FFF;
background:#e7e3e4;
color:#7b797a;
}
.denglu a {
color:#7b797a;
text-decoration:none;
}
.denglu a:hover {
color:#C00;
text-decoration:underline;
}
.denglu .box01 {
margin-left:30px;
float:left;
width:224px;
line-height:30px;
height:31px;
}
.denglu .box02 {
width:433px;
float:left;
color:#000;
text-align:right;
}
.denglu .box02 input {
border:1px #c5c3c3 solid;
height:20px;
width:88px;
background:#FFF;
line-height:20px;
margin-top:5px;
}
.denglu .box02 .button {
background:url(/static/image/common/img01.gif) no-repeat;
width:50px;
height:21px;
border:0;
color:#4b4b4b;
margin:0 5px;
font-size:12px;
line-height:20px;
}
.denglu .box03 {
float:right;
line-height:30px;
height:31px;
margin-right:15px;
}
.denglu .box03 .font1 {
margin-left:20px;
}
.denglu .box03 .font2 {
margin-left:10px;
background:url(/static/image/common/icon03.jpg) left center no-repeat;
padding-left:8px;
margin-left:40px;
}
-->
</style>
<script type="text/javascript">
function checkform(){
if(document.getElementById('username').value==''){
alert('请输入用户名');
return false;
}
if(document.getElementById('password').value==''){
alert('请输入密码');
return false;
}
return true;
}
function showDate()
{
var d = new Date();
document.write("<div class='date_div'>"+d.getYear()+"年"+(d.getMonth()+1)+"月"+d.getDate()+"日");
switch(d.getDay())
{
case 0:
document.write(" 星期日");
break;
case 1:
document.write(" 星期一");
break;
case 2:
document.write(" 星期二");
break;
case 3:
document.write(" 星期三");
break;
case 4:
document.write(" 星期四");
break;
case 5:
document.write(" 星期五");
break;
case 6:
document.write(" 星期六");
break;
}
document.write("</div>");
}
</script>
</head>
<body>
<div id="header">
<!--登录-->
<div class="denglu">
<div class="box01">
<script language="JavaScript" type="text/JavaScript">
showDate();
</script> </div>
<form method="post" action="/bbs/member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes" onsubmit="return checkform();">
<div class="box02">
用户名:<input type="text" name="username" id="username" />
密码:<input type="password" name="password" id="password" />
<input type="hidden" name="quickforward" value="yes" />
<input type="hidden" name="handlekey" value="ls" />
<input type="hidden" name="iflogin" value="plus.php?mod=iframelogin" />
<span>
<input name="input" type="submit" class="button" value="登录" style="cursor:pointer" />
</span>
<span>
<input name="input" type="button" class="button" value="注册" style="cursor:pointer" onclick="window.open('/bbs/member.php?mod=register')"/>
</span>
</div>
</form>
<div class="box03">
<span class="font2"><a onclick="this.style.behavior='url(#default#homepage)';this.setHomePage('http://www.111cn.net');" href="javascript:;">设为首页</a></span>
<span class="font1"><a href="/" target="_parent">中文</a> | <a href="#" target="_parent">English</a></span>
</div>
</div>
</div>
</body>
</html>
|
方法二,利用php方式调用了
在自定义的PHP页面里加入discuz登陆框。PHP如何调用discuz登陆框。
代码如下 |
复制代码 |
<?php
error_reporting(0);
require 'source/class/class_core.php';
$discuz = & discuz_core::instance();
$discuz->init();
if (empty($_G['uid'])) {
?>
<form target="_blank" action="member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes" method="post" name="form2" onSubmit="return check()">
<span>用户名:<input name="username" type="text" id="textfield2" size="13" tabindex="1" value="请输入用户名" onFocus="this.value='';" onBlur="if(this.value==''){this.value='请输入用户名';}">
密码:<input name="password" type="password" id="password" size="12">
<input type="submit" name="button2" id="button2" value="登录" onClick="setTimeout('window.location.reload()', 2000)">
<a href="member.php?mod=register" target="_blank">注册</a>
<a href="member.php?mod=logging&action=login&viewlostpw" target="_blank">找回密码</a>
<input type="hidden" name="referer" value="/" /></span>
</form>
<?php } else { ?>
<div>
尊敬的<a href="home.php?mod=space&uid=<?php echo $_G['uid']; ?>&do=profile" target="_blank"><? echo $_G['username']; ?></a>,欢迎您光临!  | <a href="home.php?mod=space&do=thread&view=me" target="_blank">我的帖子</a> |  <a href="home.php" target="_blank">个人中心</a> |  <a href="member.php?mod=logging&action=logout&formhash=<? echo FORMHASH;?>" target="_blank" onClick="setTimeout('window.location.reload()', 2000)">退出登陆</a>
</div>
<?php }?> |
方法三:discuz登陆框是ajax调用的,一开始在firebug下看到了调用了接口:
代码如下 |
复制代码 |
/member.php ?mod=logging&action=login&infloat=yes&handlekey=login&inajax=1&ajaxtarget=fwin_content_login |
这返回的是一个xml的内容,其中就一个结点root,里面会根据本地的cookies判断是否登录了论坛,如果没有登陆
里面的内容就是一段form登陆表单。如果登陆了里面就是一段登陆后的信息。然后将ajax请求中的css保存到本
地。能够实现登陆框调用。登陆框中有一个hidden的input name=‘reffer’ 这里面的value值是来路链接.不过要是
论坛程序里的。比如将这个连接换成h/home.php?mod=spacecp&ac=blog这样登陆完后会
自动跳转到发博客的页面。可以实现一键发帖功能。
代码如下:
代码如下 |
复制代码 |
<?php
$login = file_get_contents("/member.php?
mod=logging&action=login&infloat=yes&handlekey=login&inajax=1&ajaxtarget=fwin_content_login");
require_once('SofeeXmlParser.php');//xml解析类 博客里搜索xml有相关介绍
$xml = new SofeeXmlParser();
$xml->parseString($login);
$tree = $xml->getTree();
$login = str_replace("member.php","h/member.php",$tree["root"]["value"]);
$login = str_replace("h/./","h/home.php?
mod=spacecp&ac=blog",$login);//跳转到发帖页面
$login = preg_replace('/<h3 class="flb">(.*)</h3>/i','',$login);
var_dump($login);
exit();
$login = iconv('utf-8','gbk',$login);
echo $login;
?>
|
如果我们是一维数据去重复项就不要说了有直接的函数了,但二维数据php未提供函数了,下面小编来给大家推荐两个不错的二维数组去重复项自定义函数吧。
例1
代码如下 |
复制代码 |
<?php
function unique_array_2d($array2D,$stkeep=false,$ndformat=true)
{
// 判断是否保留一级数组键 (一级数组键可以为非数字)
if($stkeep) $stArr = array_keys($array2D);
// 判断是否保留二级数组键 (所有二级数组键必须相同)
if($ndformat) $ndArr = array_keys(end($array2D));
//降维,也可以用implode,将一维数组转换为用逗号连接的字符串
foreach ($array2D as $v){
$v = join(",",$v);
$temp[] = $v;
}
//去掉重复的字符串,也就是重复的一维数组
$temp = array_unique($temp);
//再将拆开的数组重新组装
foreach ($temp as $k => $v)
{
if($stkeep) $k = $stArr[$k];
if($ndformat)
{
$tempArr = explode(",",$v);
foreach($tempArr as $ndkey => $ndval) $output[$k][$ndArr[$ndkey]] = $ndval;
}
else $output[$k] = explode(",",$v);
}
return $output;
}
$array2D = array(
'first'=>array('title'=>'1111','date'=>'2222'),
'second'=>array('title'=>'1111','date'=>'2222'),
'third'=>array('title'=>'2222','date'=>'3333')
);
echo "<pre>";
print_r(unique_array_2d($array2D,true));
/**
* 将二维数组通过指定的 key 去重
*
* @param array $arr 要去重的数组
* @param array $by 指定key去重,该参数不指定将返回 array()
* @return array
*/
function array_multunique($arr,$by = array()) {
$temp = array();
foreach($arr as $key => $val) {
foreach($by as $v) {
$temp[$key] .= isset($val[$v]) ? $val[$v] : '';
}
}
return array_intersect_key($arr,array_unique($temp));
}
/*$aa = array (
array ('id' => 123, 'name' => '张三' ),
array ('id' => 123, 'name' => '李四' ),
array ('id' => 124, 'name' => '王五' ),
array ('id' => 125, 'name' => '赵六' ),
array ('id' => 126, 'name' => '赵六' )
);
$key = 'id';
array_multunique ($aa, array('id')); */
function array_remove_key($array,$keys){
if (!is_array($array) || !is_array($keys)){
return false;
}
foreach($array as $t){
foreach($keys as $k){
unset($t[$k]);
}
$doc[]=$t;
}
return $doc;
}
/*$array = array(
'0' => array('a' => 'aaaaa', 'b' => 'bbbbb', 'c' => array('d' => 'ddddd', 'e' => 'eeeee')),
'1' => array('a' => 'aaaaa', 'b' => 'bbbbb', 'c' => array('d' => 'ddddd', 'e' => 'eeeee'))
);
print_r( array_remove_key($array,array('c')));*/
function array_remove_key_val(&$a,$b,$c){
foreach ($a as $key=>$value){
if ( isset($value[$b]) && ($value[$b]==$c) ){
unset($a[$key]);
}
}
}
/*$a=array(
array('id'=>1,'num'=>10,'type'=>'news'),
array('id'=>2,'num'=>100,'type'=>'pic')
);
print_r( array_remove_key_val($a,"id","1") );*/
|
例2
代码如下 |
复制代码 |
/二维数组去掉重复值
function array_unique_fb($array2D){
foreach ($array2D as $v){
$v = join(",",$v); //降维,也可以用implode,将一维数组转换为用逗号连接的字符串
$temp[] = $v;
}
$temp = array_unique($temp); //去掉重复的字符串,也就是重复的一维数组
foreach ($temp as $k => $v){
$temp[$k] = explode(",",$v); //再将拆开的数组重新组装
}
return $temp;
}
//二维数组去掉重复值 并保留键值
function array_unique_fb($array2D){
foreach ($array2D as $k=>$v){
$v = join(",",$v); //降维,也可以用implode,将一维数组转换为用逗号连接的字符串
$temp[$k] = $v;
}
$temp = array_unique($temp); //去掉重复的字符串,也就是重复的一维数组
foreach ($temp as $k => $v){
$array=explode(",",$v); //再将拆开的数组重新组装
$temp2[$k]["id"] =$array[0];
$temp2[$k]["litpic"] =$array[1];
$temp2[$k]["title"] =$array[2];
$temp2[$k]["address"] =$array[3];
$temp2[$k]["starttime"] =$array[4];
$temp2[$k]["endtime"] =$array[5];
$temp2[$k]["classid"] =$array[6];
$temp2[$k]["ename"] =$array[7];
}
return $temp2;
}
|
在php中要实现跳转有很多方法,最常规的跳转方法就是使用header函数来操作了,当然也可以在php中输入js跳转形式,下面我来给大家介绍一下。
PHP 跳转
代码如下 |
复制代码 |
<?php
header("location: http://www.111cn.net");
?>
|
header函数使用
PHP页面跳转一、header()函数
header()函数是PHP中进行页面跳转的一种十分简单的方法。header()函数的主要功能是将HTTP协议标头(header)输出到浏览器。
header()函数的定义如下:
void header (string string [,bool replace [,int http_response_code]])可选参数replace指明是替换前一条类似标头还是添加一条相同类型的标头,默认为替换。
第二个可选参数http_response_code强制将HTTP相应代码设为指定值。 header函数中Location类型的标头是一种特殊的header调用,常用来实现页面跳转。注意:1.location和“:”号间不能有空格,否则不会跳转。
2.在用header前不能有任何的输出。
3.header后的PHP代码还会被执行。例如,将浏览器重定向到冠威博客
代码如下 |
复制代码 |
< ?php
//重定向浏览器
header("Location: http://www.111cn.net");
//确保重定向后,后续代码不会被执行
exit;
?>
|
PHP页面跳转二、Meta标签
Meta标签是HTML中负责提供文档元信息的标签,在PHP程序中使用该标签,也可以实现页面跳转。 若定义http-equiv为refresh,则打开该页面时将根据content规定的值在一定时间内跳转到相应页面。
若设置content=”秒数;url=网址”,则定义了经过多长时间后页面跳转到指定的网址。例如,使用meta标签实现疫苗后页面自动跳转到冠威博客。
代码如下 |
复制代码 |
< meta http-equiv="refresh" content="1;url=http://www.111cn.net">
|
例如,以下程序meta.php实现在该页面中停留一秒后页面自动跳转到www.111cn.net。
代码如下 |
复制代码 |
<?php
$url = "http://www.111cn.net"; ?>
< html>
< head>
< meta http-equiv="refresh" content="1; url=< ?php echo $url; ?>">
< /head>
< body>
页面只停留一秒……
< /body>
< /html>
|
PHP页面跳转三、JavaScript(常用、推荐)
例如,此代码可以放在程序中的任何合法位置。
代码如下 |
复制代码 |
<?php
$url = "http://www.111cn.net";
echo "<script language='javascript' type='text/javascript'>";
echo "window.location.href='$url'";
echo "</script>";
?>
|
附一些js跳转方法
JavaScript 跳转
方法一:
代码如下 |
复制代码 |
<script language="javascript">
window.location= "http://www.111cn.net";
</script> |
方法二:
代码如下 |
复制代码 |
<script language="javascript">
document.location = "http://www.111cn.net";
</script>
|
ASP 跳转
代码如下 |
复制代码 |
<%
response.redirect "http://www.111cn.net"
%>
|
我信会在很多网站看到一些文章发布之后会显示此文章是在几秒几前发的或几个月前发的文件,下面我来给大家介绍利用php计算时间差来计算文章发表距现在时间相隔多久了。
代码如下 |
复制代码 |
<?php
/**
* 时间差计算
*/
function time2Units ( $time )
{
$year = floor ( $time / 60 / 60 / 24 / 365 );
$time -= $year * 60 * 60 * 24 * 365 ;
$month = floor ( $time / 60 / 60 / 24 / 30 );
$time -= $month * 60 * 60 * 24 * 30 ;
$week = floor ( $time / 60 / 60 / 24 / 7 );
$time -= $week * 60 * 60 * 24 * 7 ;
$day = floor ( $time / 60 / 60 / 24 );
$time -= $day * 60 * 60 * 24 ;
$hour = floor ( $time / 60 / 60 );
$time -= $hour * 60 * 60 ;
$minute = floor ( $time / 60 );
$time -= $minute * 60 ;
$second = $time ;
$elapse = '' ;
$unitArr = array( '年' => 'year' , '个月' => 'month' , '周' => 'week' , '天' => 'day' ,
'小时' => 'hour' , '分钟' => 'minute' , '秒' => 'second'
);
foreach ( $unitArr as $cn => $u )
{
if ( $ $u > 0 )
{
$elapse = $ $u . $cn ;
break;
}
}
return $elapse ;
}
$past = 2052345678 ; // Some timestamp in the past
$now = time (); // Current timestamp
$diff = $now - $past ;
echo '发表于' . time2Units ( $diff ) . '前' ;
?>
|
在php.ini中如果我们不对 post_max_size,upload_max_filesize 这些参数进行修改,默认最多只能上传2MB的文件了,如果几十MB或更大的就无法上传了,下面我来介绍修改PHP配置文件上传大文件几种方法,希望对大家有点帮助呀
windows+apache+php环境
在apache最常见的PHP上传文件大小限制是通过 php.ini 配置文件定义的,通过修改以下三个字段的值,重新启用服务器端程序(如 apache),便可成功修改PHP上传文件的大小限制:
upload_max_filesize = 8M
post_max_size = 10M
memory_limit = 20M
具体配置如下
在php.ini里查找
代码如下 |
复制代码 |
max_execution_time
|
默认是30秒.改为
代码如下 |
复制代码 |
max_execution_time = 0
|
0表示没有限制
以上修改的是php上传文件中脚本执行超时时间
2. 修改 post_max_size 设定 POST 数据所允许的最大大小。此设定也影响到php上传文件。
php默认的post_max_size 为2M.如果 POST 数据尺寸大于 post_max_size $_POST 和 $_FILES superglobals 便会为空.
查找 post_max_size .改为
代码如下 |
复制代码 |
post_max_size = 150M
|
3. 很多人都会改了第二步.但php上传文件时最大仍然为 8M.
为什么呢.我们还要改一个参数upload_max_filesize 表示所上传的文件的最大大小。
查找upload_max_filesize,默认为8M改为
代码如下 |
复制代码 |
upload_max_filesize = 100M
|
另外要说明的是在php文件上传中,post_max_size 大于 upload_max_filesize 为佳.
nginx+php上传文件大小配置修改
以前用php上传文件,先是修改php.ini的设置,前些日子服务器换了环境(采用nginx+php),今天突然发现稍大一点的文件不能上传了,纠结 半天,终于找到是nginx的client_max_body_size配置选项值造成的413错误。现在分享一下处理方法。
问题说明:
php.ini配置文件中upload_max_filesize设置为50M
post_max_size设置的值为100M
但是上传超过10兆的文件就会返回uploaderror 413错误。
服务器环境:
centos5.7 32位
nginx1.0.8
php5.2.17
解决方法:
1、如果你上传文件限制为50兆,则先修改php.iniupload_max_filesize 50M
代码如下 |
复制代码 |
post_max_size 100M
|
2、然后修改nginx配置文件中:
这个配置选项值默认是1m,可以增加到8m以增加提高文件大小限制,我这里直接修改为100了,具体情况可根据自己的需求设置。(参 考:client_max_body_size大小要和php.ini中的upload_max_filesize、post_max_size中的最大 值一致或者稍大,这样就不会因为提交数据大小不一致出现的错误。)
代码如下 |
复制代码 |
client_max_body_size 100m; |
标签:[!--infotagslink--]