thinkphp u函数解析出现.php路径

原文:http://www.linuxde.net/2014/12/15635.html

thinkphp在Nginx没有pathinfo的情况出现.PHP的文件,这个让人很是纠结。在服务器是Linux,web服务器是nginx, CGI接口是FASTCGI,就会出现这个问题。

问题原因:ThinkPHP/common/runtime.php中定义IS_CGI常量的定义有问题;错误代码:

thinkphp在nginx没有pathinfo的情况出现.php的URL的解决方法
在fpm下,PHP_SAPI的值是fpm-fcgi,所以判断IS_CGI为0。导致在定义_PHP_FILE_常量时错误,进而导致 ThinkPHP/Lib/Core/Dispatcher.class.php中定义__APP__常量值错误。而ThinkPHP/Common /functions.php中U()方法定义用到__APP__,导致U()创建的URL错误;U()部分代码:

thinkphp在nginx没有pathinfo的情况出现.php的URL的解决方法
简单来说,当cgi.fix_pathinfo=0时,_PHP_FILE_获取的值是.php,导致U函数生成URL不正确,改为1后,_PHP_FILE_获取的值是index.php。

但是cgi.fix_pathinfo=1时会有安全隐患,目前暂时先把代码改成如下了:

if (IS_CGI) {
//CGI/FASTCGI模式下
//$_temp = explode(‘.php’,$_SERVER[‘PHP_SELF’]);
//define(‘_PHP_FILE_’, rtrim(str_replace($_SERVER[‘HTTP_HOST’],”,
//$_temp[0].’.php’),’/’));
define(‘_PHP_FILE_’, rtrim($_SERVER[‘SCRIPT_NAME’], ‘/’));
} else {
define(‘_PHP_FILE_’, rtrim($_SERVER[‘SCRIPT_NAME’], ‘/’));
}

thinkphp5中遇到的一些问题

thinkphp5中遇到的一些问题:

在控制器中查询一个表的数据,例如查询user表的用户列表
\think\Db::name(‘user’)->where(‘status’,1)->select();
上面这句是可以执行的,因为加了\think\命名空间,而官方文档中写的是下面,可能导致看文档的人误解
Db::name(‘user’)->where(‘status’,1)->select();

也可以在控制器中直接用助手函数,这种方式最为方便简单。
db(‘user’)->where(‘status’,1)->select();

另外,如果你在model/user.php这个模型是存在的,那么也可以在控制器中用如下方法
$user = new User();
$user->where(‘status’,1)->select();

————————————————-
另外,如果数据库配置文件里面
// 数据集返回类型
‘resultset_type’ => ‘collection’,
那么,上面的那些返回就是一个集合对象,而不是一个数组,但是可以和数组无差别使用
具体collection包含的方法,请参考
https://www.kancloud.cn/manual/thinkphp5/150164

附:
thinkphp5.x之Collection(集合)解析 php集合
http://blog.csdn.net/fenglailea/article/details/52723586

wordpress里面的慢SQL,把wp_postmeta.meta_key的类型由varchar(255)改变为varchar(191)

SELECT DISTINCT meta_key
			FROM wp_postmeta
			WHERE meta_key NOT BETWEEN '_' AND '_z'
			HAVING meta_key NOT LIKE '\\_%'
			ORDER BY meta_key
			LIMIT 30;

当wordpress里面的慢SQL,把wp_postmeta.meta_key的类型由varchar(255)改变为varchar(191)
目前我的mysql版本是5.5
不知道新版本有没有改进,看了别人描述(https://core.trac.wordpress.org/ticket/33885#comment:5),说是只取前191个字节做索引。

discuz的php防止sql注入函数

转载自:http://www.jb51.net/article/26069.htm
最早开始学习php的时候根本没考虑过安全方面的问题,那时候就是想能做出功能就是万岁了。随着做项目的时间慢慢加长,越来越感觉到网站安全方面的问题十分重要。
最近在做一个主题投票网站,客户懂一些程序方面的东西。有特别要求需要过滤一些字符防止sql注入。本来这方面就没有特别的研究过。呵呵,又发扬了一回拿来主义。把discuz论坛的sql防注入函数取了来!

$magic_quotes_gpc = get_magic_quotes_gpc(); 
@extract(daddslashes($_COOKIE)); 
@extract(daddslashes($_POST)); 
@extract(daddslashes($_GET)); 
if(!$magic_quotes_gpc) { 
$_FILES = daddslashes($_FILES); 
} 
 
 
function daddslashes($string, $force = 0) { 
if(!$GLOBALS['magic_quotes_gpc'] || $force) { 
if(is_array($string)) { 
foreach($string as $key => $val) { 
$string[$key] = daddslashes($val, $force); 
} 
} else { 
$string = addslashes($string); 
} 
} 
return $string; 
}

大家可以增强下面的代码加以保护服务器的安全,PHP防止SQL注入安全函数十分重要!

/* 
函数名称:inject_check() 
函数作用:检测提交的值是不是含有SQL注射的字符,防止注射,保护服务器安全 
参  数:$sql_str: 提交的变量 
返 回 值:返回检测结果,ture or false 
*/ 
function inject_check($sql_str) { 
return eregi('select|insert|and|or|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile', $sql_str); // 进行过滤 
} 
 
/* 
函数名称:verify_id() 
函数作用:校验提交的ID类值是否合法 
参  数:$id: 提交的ID值 
返 回 值:返回处理后的ID 
*/ 
function verify_id($id=null) { 
if (!$id) { exit('没有提交参数!'); } // 是否为空判断 
elseif (inject_check($id)) { exit('提交的参数非法!'); } // 注射判断 
elseif (!is_numeric($id)) { exit('提交的参数非法!'); } // 数字判断 
$id = intval($id); // 整型化 
 
return $id; 
} 
 
/* 
函数名称:str_check() 
函数作用:对提交的字符串进行过滤 
参  数:$var: 要处理的字符串 
返 回 值:返回过滤后的字符串 
*/ 
function str_check( $str ) { 
if (!get_magic_quotes_gpc()) { // 判断magic_quotes_gpc是否打开 
$str = addslashes($str); // 进行过滤 
} 
$str = str_replace("_", "\_", $str); // 把 '_'过滤掉 
$str = str_replace("%", "\%", $str); // 把 '%'过滤掉 
 
return $str; 
} 
 
/* 
函数名称:post_check() 
函数作用:对提交的编辑内容进行处理 
参  数:$post: 要提交的内容 
返 回 值:$post: 返回过滤后的内容 
*/ 
function post_check($post) { 
if (!get_magic_quotes_gpc()) { // 判断magic_quotes_gpc是否为打开 
$post = addslashes($post); // 进行magic_quotes_gpc没有打开的情况对提交数据的过滤 
} 
$post = str_replace("_", "\_", $post); // 把 '_'过滤掉 
$post = str_replace("%", "\%", $post); // 把 '%'过滤掉 
$post = nl2br($post); // 回车转换 
$post = htmlspecialchars($post); // html标记转换 
 
return $post; 
}

php获取用户IP地址

具体请下载

<?php
require_once './Getip/qqwry.class.php';
$ip 		=	get_user_ip();
//$ip 		=	'58.61.214.48';
$QQWry		=	new QQWry;
$ifErr		=	$QQWry->QQWry($ip); 
$location	=	$QQWry->Country.$QQWry->Local;
if(!empty($location))
{
	$location =	iconv('GB2312', 'UTF-8', $location);
}
else
{
	$location = '未知地区';
}
 
 
/*
	 * 获取用户的Ip地址
	 */
	function get_user_ip()
    {
		/*
	        if($_SERVER["HTTP_X_REAL_IP"])
			{
				$ip	=	$_SERVER["HTTP_X_REAL_IP"];
			}
			else
		*/
		if($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"])
        {                                             
               $ip = $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"];
        }                                             
        elseif($HTTP_SERVER_VARS["HTTP_CLIENT_IP"])   
        {                                             
               $ip = $HTTP_SERVER_VARS["HTTP_CLIENT_IP"];
        }                                             
        elseif ($HTTP_SERVER_VARS["REMOTE_ADDR"])      
        {                                             
               $ip = $HTTP_SERVER_VARS["REMOTE_ADDR"];  
        }                                             
        elseif (getenv("HTTP_X_FORWARDED_FOR"))          
        {                                             
               $ip = getenv("HTTP_X_FORWARDED_FOR");  
        }                                             
        elseif (getenv("HTTP_CLIENT_IP"))                
        {                                             
               $ip = getenv("HTTP_CLIENT_IP");  
        }         
        elseif (getenv("REMOTE_ADDR"))  {                                             
               $ip = getenv("REMOTE_ADDR");
        }      
        else    {                                             
               $ip = "Unknown";   
        } 
 
        return $ip;
    }
?>
<div style='font-size:18px;font-weight: 500;font-family: "microsoft yahei";margin-top:10px;'>
                    我的IP地址:<?php echo $ip; ?><br /><br />
                    所属地区:&nbsp;&nbsp;<?php echo $location; ?>
</div>