ThinkPHP访问不存在的模块跳到404页面

 更新时间:2016年11月25日 16:22  点击:1560
我们来介绍一下关于ThinkPHP访问不存在的模块跳到404页面 有需要的朋友可参考参考。

在ACTION中新建一个文件EmptyAction.class.php,文件中的代码如下:

 代码如下 复制代码

<?php
class EmptyAction extends Action{
    function _empty(){
        header("HTTP/1.0 404 Not Found");//使HTTP返回404状态码
        $this->display("Public:404");
    }
}
?>

在apache中设置

在你的网站配置中加入 ErrorDocument 404 /404.html 即可。


在iis中设置

IIS/ASP.net下设置404错误页面

打开apache httpd.conf配置文件或者新建.htaccess配置文件


首先,修改应用程序根目录的设置,打开 “web.config” 文件编辑,在其中加入如下内容:

 代码如下 复制代码

<configuration>
<system.web>
<customErrors mode=”On” defaultRedirect=”error.asp”>
<error statusCode=”404″ redirect=”notfound.asp” />
</customErrors>
</system.web>
</configuration>

注:上文例中“error.asp”为系统默认的404页面,“notfound.asp”为自定义的404页面,使用时请修改相应文件名。
然后,在自定义的404页面“notfound.asp”中加入:

 代码如下 复制代码

<%
Response.Status = “404 Not Found”
%>


php 404

 代码如下 复制代码

 if(如果没有任何结果)
    {
    //以前是仅仅显示“该帖子已经不存在”的提示,现在是:
    require(’/404.php’);
    @header(’HTTP/1.1 404 Not Found’);
    @header(’Status: 404 Not Found’);
    exit;
    }

curl主要是抓取数据,当然我们可以用其他的方法来抓取,比如fsockopen,file_get_contents等。但是只能抓那些能直接访问的页面,如果要抓取有页面访问控制的页面,或者是登录以后的页面就比较困难了。

是把PHP的主页取回放到一个文件中。

例 1. 使用PHP的CURL模块取回PHP主页

 代码如下 复制代码
<?php
 $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, "http://localhost/mytest/phpinfo.php");
 curl_setopt($ch, CURLOPT_HEADER, false);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //如果把这行注释掉的话,就会直接输出
 $result=curl_exec($ch);
 curl_close($ch);


2,使用代理进行抓取

为什么要使用代理进行抓取呢?以google为例吧,如果去抓google的数据,短时间内抓的很频繁的话,你就抓取不到了。google对你的ip地址做限制这个时候,你可以换代理重新抓。

 

 代码如下 复制代码
<?php
 $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, "http://www.111cn.net");
 curl_setopt($ch, CURLOPT_HEADER, false);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, TRUE);
 curl_setopt($ch, CURLOPT_PROXY, 125.21.23.6:8080);
 //url_setopt($ch, CURLOPT_PROXYUSERPWD, 'user:password');如果要密码的话,加上这个
 $result=curl_exec($ch);
 curl_close($ch);
 ?>

3,post数据后,抓取数据

单独说一下数据提交数据,因为用 curl的时候,很多时候会有数据交互的,所以比较重要的。

 代码如下 复制代码

<?php
 $ch = curl_init();
 /*在这里需要注意的是,要提交的数据不能是二维数组或者更高
 *例如array('name'=>serialize(array('tank','zhang')),'sex'=>1,'birth'=>'20101010')
 *例如array('name'=>array('tank','zhang'),'sex'=>1,'birth'=>'20101010')这样会报错的*/
 $data = array('name' => 'test', 'sex'=>1,'birth'=>'20101010');
 curl_setopt($ch, CURLOPT_URL, 'http://localhost/mytest/curl/upload.php');
 curl_setopt($ch, CURLOPT_POST, 1);
 curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
 curl_exec($ch);
 ?>在 upload.php文件中,print_r($_POST);利用curl就能抓取出upload.php输出的内容Array ( [name] => test [sex] => 1 [birth] => 20101010 )

4,抓取一些有页面访问控制的页面

页面访问控制的3种方法

页面访问控制的3种方法张映 发表于 2010-10-12

分类目录: apache/nginx
我们经常会看到这种现象,看下图


apache 页面访问控制
为什么要进行这样的控制呢,给不同的人看不同的东西,对信息进行保护,虽然这种保护比较低级,多多少少还是有点用的。

一,用htpasswd命令,产生权限控制文件

 代码如下 复制代码

查看复制打印?
1.[zhangy@BlackGhost test]$ htpasswd -c ./access tank  //生成一个密码文件 ,-c是新建一个文件  htpasswd -h可查看  
2.New password:            //提示输入密码  
3.Re-type new password:        //重复密码  
4.Adding password for user tank  
5.[zhangy@BlackGhost test]$ cat access    //查看一下密码文件  
6.tank:Uj5B3qIF/BNdI      //用户名是明文的,密码是加密的。 
[zhangy@BlackGhost test]$ htpasswd -c ./access tank  //生成一个密码文件 ,-c是新建一个文件  htpasswd -h可查看
New password:            //提示输入密码
Re-type new password:        //重复密码
Adding password for user tank
[zhangy@BlackGhost test]$ cat access    //查看一下密码文件
tank:Uj5B3qIF/BNdI      //用户名是明文的,密码是加密的。到这儿密码文件是生成好了。

二,页面访问控制方法

1,能过修改httpd.conf或者是httpd-vhosts.conf来进行配置

 

 代码如下 复制代码

listen 10004
NameVirtualHost *:10004
<VirtualHost *:10004>
 DocumentRoot "/home/zhangy/www/test"
 ServerName *:10004
 BandwidthModule On
 ForceBandWidthModule On
 Bandwidth all 1024000
 MinBandwidth all 50000
 LargeFileLimit * 500 50000
 MaxConnection all 2

 ErrorLog "/home/zhangy/apache/blog.51yip.com.com-error.log"
 CustomLog "/home/zhangy/apache/blog.51yip.com-access.log" common
//看一下,下面的配置
 <Directory /home/zhangy/www/test>
 AuthType Basic
 AuthName "access test"
 AuthUserFile /home/zhangy/www/test/access
 Require valid-user
 </Directory>

</VirtualHost>

2,我们可以利用.htaccess文件来进行控制

在test的根目录下面建一个.htaccess的文件

 代码如下 复制代码

[zhangy@BlackGhost test]$ vi .htaccess&nbsp;&nbsp; //打开个文件 ,添加权限内容
[zhangy@BlackGhost test]$ cat .htaccess&nbsp; //下面就是.htaccess的内容
 AuthType Basic
 AuthName "access test"
 AuthUserFile /home/zhangy/www/test/access
 Require valid-user

3,不用密码文件,也可以进行访问控制

 代码如下 复制代码

define('ADMIN_USERNAME','tank'); &nbsp;&nbsp; &nbsp;// Admin Username
define('ADMIN_PASSWORD','tank'); &nbsp;&nbsp;&nbsp; &nbsp;// Admin Password

//log check
if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW']) ||
 $_SERVER['PHP_AUTH_USER'] != ADMIN_USERNAME ||$_SERVER['PHP_AUTH_PW'] != ADMIN_PASSWORD) {
 Header("WWW-Authenticate: Basic realm="access test"");
 Header("HTTP/1.0 401 Unauthorized");

 echo &lt;&lt;&lt;EOB
 &lt;html&gt;&lt;body&gt;
 &lt;h1&gt;Rejected!&lt;/h1&gt;
 &lt;big&gt;Wrong Username or Password!&lt;/big&gt;
 &lt;/body&gt;&lt;/html&gt;
EOB;
 exit;
}

curl相关函数列表:

curl_init — 初始化一个CURL会话
curl_setopt — 为CURL调用设置一个选项
curl_exec — 执行一个CURL会话
curl_close — 关闭一个CURL会话
curl_version — 返回当前CURL版本
curl_init — 初始化一个CURL会话
描述
int curl_init ([string url])
curl_init()函数将初始化一个新的会话,返回一个CURL句柄供 curl_setopt(), curl_exec(),和 curl_close() 函数使用。如果可选参数被提供,那么CURLOPT_URL选项将被设置成这个参数的值。你可以使用curl_setopt()函数人工设置。

例 1. 初始化一个新的CURL会话,且取回一个网页

 代码如下 复制代码

$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, “http://www.zend.com/”);
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_exec ($ch);
curl_close ($ch);
?>

一个不错的PHP mysql操作类 ,分享给大家学习使用。
 代码如下 复制代码

<?php
//数据库处理类
class db
{
    //SQL执行后的数据保存变量;
    var $db;
    //读取或设置当前数据的位置
    var $position=0;
    //执行SQL语句并把结果保存为db变量中;

    function sub_sql($str)
    {
        global $prefix;//全局函数,表前缀
        return str_replace("#@__",$prefix,$str);
    }
    function Sql($str)
    {
        $str=$this->sub_sql($str);
        $result = mysql_query($str);
        $i=0;
        while($row = mysql_fetch_array($result))
        {
            $str_array[$i]=$row;
            $i++;
        }
        if(empty($str_array))
        {
            $str_array=array();
        }
        $this->db=$str_array;
    }
    //读取一条数据并把数据往后移一位,如果数据为空则返回为null;
    function Get_One()
    {
        $re=empty($this->db[$this->position])?null:$this->db[$this->position];
        $this->position=$re?$this->position+1:$this->position;
        return $re;
    }
    //判断是否数据读取到结尾了
    function Judge()
    {
        $re=empty($this->db[$this->position])?true:false;
        return $re;
    }
    //取得db里面的个数
    function Get_Num()
    {
        return count($this->db);
    }
    //更新数据库里面的数据,$t为表名,$v格式为数组格式,上标为字段名,下标为数据;$w为条件上标为字段名下标为数据,$p为条件0为等号,1为大于,-1为小于;
    function Set_Updata($t,$v,$w,$p=0)
    {
        $this->Sql($t);
        $v_str="";
        $w_str="";
        $f="";
        foreach($v as $key=>$vaule)
        {
            if(!is_numeric($key))
            {
                if(empty($v_str))
                {
                    $v_str=htmlspecialchars($key)."='".htmlspecialchars($vaule)."'";
                }else
                {
                    $v_str=$v_str.",".htmlspecialchars($key)."='".htmlspecialchars($vaule)."'";
                }
            }
        }
        switch($p)
        {
            case 0:
                $f="=";
                break;
            case 1:
                $f=">";
                break;
            case -1:
                $f="<";
                break;
        }
        if(!empty($f))
        {
            foreach($w as $key=>$vaule)
            {
                if(!is_numeric($key))
                {
                    if(empty($v_str))
                    {
                        $w_str=htmlspecialchars($key).$f.htmlspecialchars($vaule)."'";
                    }else
                    {
                        $w_str=$w_str.",".htmlspecialchars($key).$f.htmlspecialchars($vaule)."'";
                    }
                }
            }
        }
        $sql="UPDATE ".$t." SET ".$v_str." where ".$w_str;
        return $result = mysql_query($sql);
    }
    //删除一数据$w为条件上标为字段名下标为数据,$p为条件0为等号,1为大于,-1为小于;
    function Set_Del($t,$w,$p=0)
    {
        $this->sub_sql($t);
        $w_str="";
        $f="";
        switch($p)
        {
            case 0:
                $f="=";
                break;
            case 1:
                $f=">";
                break;
            case -1:
                $f="<";
                break;
        }
        if(!empty($f))
        {
            foreach($w as $key=>$vaule)
            {
                if(!is_numeric($key))
                {
                    if(empty($v_str))
                    {
                        $w_str=htmlspecialchars($key).$f.htmlspecialchars($vaule)."'";
                    }else
                    {
                        $w_str=$w_str.",".htmlspecialchars($key).$f.htmlspecialchars($vaule)."'";
                    }
                }
            }
        }
        $str="DELETE FROM ".$t." WHERE ".$w_str;
        return $result = mysql_query($str);
    }
    function Add($t,$v)
    {
        $this->sub_sql($t);
        $k_str="";
        $v_str="";
        foreach($v as $key=>$vaule)
        {
            if(!is_numeric($key)){
                if(empty($k_str))
                {
                    $k_str=htmlspecialchars($key);
                    $v_str="'".htmlspecialchars($vaule)."'";
                }else
                {
                    $k_str=$k_str.",".htmlspecialchars($key);
                    $v_str=$v_str.","."'".htmlspecialchars($vaule)."'";
                }
            }
        }
        $str="INSERT INTO ".$t."(".$k_str.")"."value(".$v_str.")";
        return $result = mysql_query($str);
    }
}
?>

伪造IP来源对于php来说是很简单的一件事情,我们只要利用了php curl即可实现伪造IP来源哦,IP地址你可以随便写哦。

实例

 代码如下 复制代码

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://localhost/2.php");
curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-FORWARDED-FOR:8.8.8.8', 'CLIENT-IP:8.8.8.8'));//IP
curl_setopt($ch, CURLOPT_REFERER, "http://www.111cn.net/ ");   //来路
curl_setopt($ch, CURLOPT_HEADER, 1);
$out = curl_exec($ch);
curl_close($ch);

2.php代码:

 代码如下 复制代码

function getClientIp() {
    if (!empty($_SERVER["HTTP_CLIENT_IP"]))
        $ip = $_SERVER["HTTP_CLIENT_IP"];
    else if (!empty($_SERVER["HTTP_X_FORWARDED_FOR"]))
        $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
    else if (!empty($_SERVER["REMOTE_ADDR"]))
        $ip = $_SERVER["REMOTE_ADDR"];
    else
        $ip = "err";
    return $ip;
}
echo "IP: " . getClientIp() . "";
echo "referer: " . $_SERVER["HTTP_REFERER"];

用1.php 请求 2.php,输出结果:

IP:8.8.8.8  referer:http://www.111cn.net

伪造成功,这是不是给采集的朋友提供了很好的换IP的方案!!当然防被刷的朋友也要注意了

PHP中的CURL函数库(Client URL Library Function)

curl_close — 关闭一个curl会话
curl_copy_handle — 拷贝一个curl连接资源的所有内容和参数
curl_errno — 返回一个包含当前会话错误信息的数字编号
curl_error — 返回一个包含当前会话错误信息的字符串
curl_exec — 执行一个curl会话
curl_getinfo — 获取一个curl连接资源句柄的信息
curl_init — 初始化一个curl会话
curl_multi_add_handle — 向curl批处理会话中添加单独的curl句柄资源
curl_multi_close — 关闭一个批处理句柄资源
curl_multi_exec — 解析一个curl批处理句柄
curl_multi_getcontent — 返回获取的输出的文本流
curl_multi_info_read — 获取当前解析的curl的相关传输信息
curl_multi_init — 初始化一个curl批处理句柄资源
curl_multi_remove_handle — 移除curl批处理句柄资源中的某个句柄资源
curl_multi_select — Get all the sockets associated with the cURL extension, which can then be "selected"
curl_setopt_array — 以数组的形式为一个curl设置会话参数
curl_setopt — 为一个curl设置会话参数
curl_version — 获取curl相关的版本信息

curl_init()函数的作用初始化一个curl会话,curl_init()函数唯一的一个参数是可选的,表示一个url地址。
curl_exec()函数的作用是执行一个curl会话,唯一的参数是curl_init()函数返回的句柄。
curl_close()函数的作用是关闭一个curl会话,唯一的参数是curl_init()函数返回的句柄。

PHP 实现多服务器共享 SESSION 数据有需要学习的朋友可参考参考。

代码实现

首先创建数据表,MySQL 的 SQL 语句如下:

 代码如下 复制代码

CREATE TABLE `sess` (

`sesskey` varchar(32) NOT NULL default ”,

`expiry` bigint(20) NOT NULL default ‘0′,

`data` longtext NOT NULL,

PRIMARY KEY (`sesskey`),

KEY `expiry` (`expiry`)

) TYPE=MyISAM

sesskey 为 SESSION ID,expiry 为 SESSION 过期时间,data 用于保存 SESSION 数据。

默认情况下 SESSION 数据是以文件方式保存,想要使用数据库方式保存,就必须重新定义 SESSION 各个操作的处理函数。PHP 提供了session_set_save_handle() 函数,可以用此函数自定义 SESSION 的处理过程,当然首先要先将 session.save_handler 改成 user,可在 PHP 中进行设置:

 代码如下 复制代码
<?php
session_module_name(‘user‘);
?>

接下来着重讲一下 session_set_save_handle() 函数,此函数有六个参数:

session_set_save_handler ( string open, string close, string read, string write, string destroy, string gc )

各个参数为各项操作的函数名,这些操作依次是:打开、关闭、读取、写入、销毁、垃圾回收。PHP 手册中有详细的例子,在这里我们使用 OO 的方式来实现这些操作,详细代码如下:

 代码如下 复制代码

<?php
define(‘MY_SESS_TIME‘, 3600); //SESSION 生存时长
//类定义
class My_Sess
{
function init()
{
$domain = ‘.infor96.com‘;
//不使用 GET/POST 变量方式
ini_set(‘session.use_trans_sid‘, 0);
//设置垃圾回收最大生存时间
ini_set(‘session.gc_maxlifetime‘, MY_SESS_TIME);

//使用 COOKIE 保存 SESSION ID 的方式
ini_set(‘session.use_cookies‘, 1);
ini_set(‘session.cookie_path‘, ‘/‘);
//多主机共享保存 SESSION ID 的 COOKIE
ini_set(‘session.cookie_domain‘, $domain);

//将 session.save_handler 设置为 user,而不是默认的 files
session_module_name(‘user‘);
//定义 SESSION 各项操作所对应的方法名:
session_set_save_handler(
array(‘My_Sess‘, ‘open‘), //对应于静态方法 My_Sess::open(),下同。
array(‘My_Sess‘, ‘close‘),
array(‘My_Sess‘, ‘read‘),
array(‘My_Sess‘, ‘write‘),
array(‘My_Sess‘, ‘destroy‘),
array(‘My_Sess‘, ‘gc‘)
);
} //end function
function open($save_path, $session_name) {
return true;
} //end function
function close() {
global $MY_SESS_CONN;

if ($MY_SESS_CONN) { //关闭数据库连接
$MY_SESS_CONN->Close();
}
return true;
} //end function
function read($sesskey) {
global $MY_SESS_CONN;

$sql = ‘SELECT data FROM sess WHERE sesskey=‘ . $MY_SESS_CONN->qstr($sesskey) . ‘ AND expiry>=‘ . time();
$rs =& $MY_SESS_CONN->Execute($sql);
if ($rs) {
if ($rs->EOF) {
return ”;
} else { //读取到对应于 SESSION ID 的 SESSION 数据
$v = $rs->fields[0];
$rs->Close();
return $v;
} //end if
} //end if
return ”;
} //end function
function write($sesskey, $data) {
global $MY_SESS_CONN;

$qkey = $MY_SESS_CONN->qstr($sesskey);
$expiry = time() + My_SESS_TIME; //设置过期时间
//写入 SESSION
$arr = array(
‘sesskey‘ => $qkey,
‘expiry‘ => $expiry,
‘data‘ => $data);
$MY_SESS_CONN->Replace(‘sess‘, $arr, ‘sesskey‘, $autoQuote = true);
return true;
} //end function
function destroy($sesskey) {
global $MY_SESS_CONN;

$sql = ‘DELETE FROM sess WHERE sesskey=‘ . $MY_SESS_CONN->qstr($sesskey);
$rs =& $MY_SESS_CONN->Execute($sql);
return true;
} //end function
function gc($maxlifetime = null) {
global $MY_SESS_CONN;

$sql = ‘DELETE FROM sess WHERE expiry< ‘ . time();
$MY_SESS_CONN->Execute($sql);
//由于经常性的对表 sess 做删除操作,容易产生碎片,
//所以在垃圾回收中对该表进行优化操作。
$sql = ‘OPTIMIZE TABLE sess‘;
$MY_SESS_CONN->Execute($sql);
return true;
} //end function
} ///:~
//使用 ADOdb 作为数据库抽象层。
require_once(‘adodb/adodb.inc.php‘);
//数据库配置项,可放入配置文件中(如:config.inc.php)。
$db_type = ‘mysql‘;
$db_host = ‘192.168.212.1‘;
$db_user = ‘sess_user‘;
$db_pass = ‘sess_pass‘;
$db_name = ‘sess_db‘;
//创建数据库连接,这是一个全局变量。
$GLOBALS['MY_SESS_CONN'] =& ADONewConnection($db_type);
$GLOBALS['MY_SESS_CONN']->Connect( $db_host, $db_user, $db_pass, $db_name);
//初始化 SESSION 设置,必须在 session_start() 之前运行!!
My_Sess::init();
?>

[!--infotagslink--]

相关文章

  • ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单

    首先是数据库的设计。分类表叫cate.我做的是分类数据的二级联动,数据需要的字段有:id,name(中文名),pid(父id). 父id的设置: 若数据没有上一级,则父id为0,若有上级,则父id为上一级的id。数据库有内容后,就可以开始写代码,进...2014-05-31
  • thinkPHP中多维数组的遍历方法

    这篇文章主要介绍了thinkPHP中多维数组的遍历方法,以简单实例形式分析了thinkPHP中foreach语句的使用技巧,需要的朋友可以参考下...2016-01-12
  • thinkphp自定义权限管理之名称判断方法

    下面小编就为大家带来一篇thinkphp自定义权限管理之名称判断方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2017-04-03
  • thinkphp怎么用?ThinkPHP使用方法

    本文详细介绍了ThinkPHP使用方法,不懂的同学快来跟小编一起看看吧 1、下载ThinkPHP模板,整个导入到项目根目录下。2、修改index.php文件,内容如下:<?php/***临时配置,...2017-07-06
  • NodeJS Express框架中处理404页面一个方式

    在用 Express 的时候,路由是我最困惑的事之一。知道用 app.get('*') 可以处理所有页面,但这样除了自定义的其他路由外,静态文件是被忽略的。最近在写一个小工具的时候,找到了一个解决方案:复制代码 代码如下:var express =...2014-05-31
  • thinkphp3.x连接mysql数据库的方法(具体操作步骤)

    这篇文章主要介绍了thinkphp3.x连接mysql数据库的方法,详细分析了thinkPHP3.x操作数据库的具体步骤,包括惯例配置文件设置,sql语句创建表以及针对数据库的数据插入操作等,需要的朋友可以参考下...2016-05-20
  • ThinkPHP 3.2.2实现事务操作的方法

    这篇文章主要介绍了ThinkPHP 3.2.2实现事务操作的方法,简单分析了thinkPHP中事务的启动、提交、回滚等操作方法并给出了完整的事务提交与回滚操作实例,需要的朋友可以参考下...2017-05-08
  • ThinkPhP+Apache+PHPstorm整合框架流程图解

    这篇文章主要介绍了ThinkPhP+Apache+PHPstorm整合框架流程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-23
  • thinkPHP查询方式小结

    这篇文章主要介绍了thinkPHP查询方式,结合实例形式总结分析了thinkPHP的普通查询、表达式查询、区间查询、统计查询及SQL直接查询的使用技巧,需要的朋友可以参考下...2016-01-12
  • thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】

    这篇文章主要介绍了thinkPHP5.0框架整体架构,简单介绍了thinkPHP5.0的应用,模块,MVC,驱动,行为,命名空间等概念与基本用法,需要的朋友可以参考下...2017-04-03
  • thinkPHP商城公告功能开发问题分析

    这篇文章主要介绍了thinkPHP商城公告功能开发问题,结合实例形式分析了基于thinkPHP实现商城公告功能所涉及的ajax交互及数据库操作相关技巧,需要的朋友可以参考下...2016-12-02
  • Thinkphp事务操作实例(推荐)

    下面小编就为大家带来一篇Thinkphp事务操作实例(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2017-04-03
  • thinkphp实现无限分类(使用递归)

    这篇文章主要介绍了在使用递归的情况下thinkphp实现无限分类,感兴趣的小伙伴们可以参考一下...2015-12-21
  • Nginx配置支持ThinkPHP的PATH_INFO

    这篇文章主要介绍了Nginx配置支持ThinkPHP的PATH_INFO,本文在Ubuntu的开发环境加配置成功,需要的朋友可以参考下...2016-01-27
  • ThinkPHP使用getlist方法实现数据搜索功能示例

    这篇文章主要介绍了ThinkPHP使用getlist方法实现数据搜索功能,结合实例形式较为详细的分析了thinkPHP基于getlist实现根据给定条件进行数据的读取、显示等相关操作技巧,需要的朋友可以参考下...2017-05-21
  • Thinkphp自定义美化success和error提示跳转页面代码实例

    这篇文章主要介绍了Thinkphp自定义美化success和error提示跳转页面代码实例,有需要的同学可以直接借鉴文中代码,可以增加页面的美观和友好程度...2021-03-05
  • Thinkphp单字母函数使用指南

    本文给大家汇总介绍了thinkphp中的单字母函数的使用方法,非常的简单,他们都在 THINKPHPCommonfunctions.php 这个文件中 下面我分别说明一下他们的使用方法...2016-05-10
  • ThinkPHP Where 条件中常用表达式示例(详解)

    下面小编就为大家带来一篇ThinkPHP Where 条件中常用表达式示例(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2017-04-03
  • thinkphp下MySQL数据库读写分离代码剖析

    本篇文章主要介绍了thinkphp下MySQL数据库读写分离代码剖析,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。 ...2017-04-26
  • ASP.NET设置404页面返回302HTTP状态码的解决方法

    访问网站时错误页面可正常显示,但HTTP状态码却是302,对SEO很不友好,按下列步骤修改使错误页面返回正确的利于SEO的404状态码,感兴趣的朋友可以了解下...2021-09-22