存档: ‘PHP’ 分类

DZ获取客户端IP的方法

1条评论 2009年10月30日

discuzs是一款不错的php开源社区软件,很多优秀的代码可以拿来借鉴。下面是从common.inc.php中提取出来的获取客户端IP的代码。

if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
	$onlineip = getenv('HTTP_CLIENT_IP');
} elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
	$onlineip = getenv('HTTP_X_FORWARDED_FOR');
} elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
	$onlineip = getenv('REMOTE_ADDR');
} elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
	$onlineip = $_SERVER['REMOTE_ADDR'];
}

PHP文件下载 浏览器显示文件名乱码问题

1条评论 2009年9月29日
<?php
$filename = "下载文件名";
$filesize = filesize('文件地址'); //获得文件大小
header('Pragma: public');
header('Last-Modified: '.gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: pre-check=0, post-check=0, max-age=0');
header('Content-Transfer-Encoding: binary');
header('Content-Encoding: none');
header('Content-type: application/force-download');
header('Content-Disposition: attachment; filename="'.$filename.'"');
header('Content-length: '.$filesize);
?>

这样在弹出文件下载框时,显示的文件名在不同的浏览器下面是不一样的。有的是乱码,有的是空白。
所以文件名统一使用utf-8编码,然后针对ie浏览器进行一次rawurlencode编码。
把以下代码放在header之前

if (preg_match(/MSIE/,$_SERVER['HTTP_USER_AGENT'])) {
        $filename = rawurlencode($filename);
}

网站换域名后要用到的php301转向代码

4 条评论 2009年9月7日

只需要把下面的代码加到网站核心文件里,即可对全站的所有页面进行域名301转向,友好搜素引擎转向。

$url_old="yanglu.org"; //旧域名,不带"http://"和"/",可不带www
$url_new="www.1qq.cn/"; //新域名,不带"http://",以"/"结尾
$bbs_dir="bbs"; //原域名的BBS目录名,根目录请为空
 
if ($bbs_dir)
{
	$bbs_count=strlen($bbs_dir)+2;
	$url_add=substr($_SERVER["REQUEST_URI"],$bbs_count);
} else {
	$url_add=substr($_SERVER["REQUEST_URI"],1);
}
 
if (stripos($_SERVER["SERVER_NAME"],$url_old))
{
	$url301="http://".$url_new.$url_add;
	header("HTTP/1.1 301 Moved Permanently");
	header("Location:$url301");
	exit();
}

以DISCUZ!(所有版本)为例,只需要把此代码放置于include/common.inc.php的”<?”后面即可。

php全局变量禁用(register_globals)的变通办法

2 条评论 2009年7月21日

register_globals(自动全局变量)

register_globals(自动全局变量)

为了程序安全,一般虚拟主机都关闭了register_globals(自动全局变量),而我们写程序大多都有习惯不写$_GET、$_POST,那么碰上一些关闭自动全局变量的虚拟主机时怎么办呢?不想重新去加$_GET、$_POST的可以用import_request_variables这个函数来实现.使用方法是将这个函数放到一个公用的包含函数里面或者在每个程序前面使用。

继续阅读…

Call to undefined function curl_init解决方法

1条评论 2009年7月8日

  在网上下载了一个模拟登陆discuz论坛的php程序范例,试运行时出现“Call to undefined function curl_init”这个错误提示,没有定义的函数,也就是php还没打开对curl_init函数的支持。Google了一番终于解决了,方法如下:

  以windows下的php+apache为例。 继续阅读…

PHP setcookie时出现“cannot modify header information”错误的解决方法

3 条评论 2009年5月15日

昨日,在用到setcookie()这一函数时,总是出现”cannot modify header information……”,很是苦恼,还好有Google这位可爱的朋友帮忙,看了下网上的解决方法,基本上大致可以分为下面几种:

方法一:
在PHP里Cookie的使用是有一些限制:
1、使用setcookie必须在<html>标签之前
2、使用setcookie之前,不可以使用echo输入内容
3、直到网页被加载完后,cookie才会出现
4、setcookie必须放到任何资料输出浏览器前,才送出

由于上面的限制,在使用setcookie()函数时,学会遇到 “Undefined index”、”Cannot modify header information – headers already sent by”…等问题,解决办法是在输出内容之前,产生cookie,可以在程序的最上方加入函数 ob_start(); 继续阅读…