最近收集的一些php的经经验技巧
********用parse_url 函数*******************
用parse_url 函数。
例子:
$ php -r 'print_r( parse_url("http://usernameassword@hostname/path?arg=value#anchor"));'
Array
(
[scheme] => http
[host] => hostname
[user] => username
[pass] => password
[path] => /path
[query] => arg=value
[fragment] => anchor
)
$ php -r 'print_r( parse_url("http://invalid_host..name/"));'
Array
(
[scheme] => http
[host] => invalid_host..name
[path] => /
)
******动态生成HTML方法******************
<?php
ob_start(); //打开缓存
echo"<html>
<title>静态页内容</title>
<body>新新内容,也可以用模板来生成<body></html>";
$aFile=fopen("cache/aa".$startpage.".html",'w'); //文件,$startpage可以用时间来生成,唯一
fwrite($aFile,ob_get_contents()); //写入
fclose($aFile);
ob_end_clean(); //清空
?>
*****讓浏览器不保存脱机内容********
header("Cache-Control: no-store, no-cache,must-revalidate");
**********压缩文本***********************************
先加载模块extension=php_zlib.dll
PHP代码:--------------------------------------------------------------------------------
<?php
$x="hello world";
$x=gzcompress($x) ; //压缩
echo $x ;
echo "<br>";
echo gzuncompress($x); //解压
********返回浏览器版本*******************
function browse_infor()
{
$browser="";$browserver="";
$Browsers =array("Lynx","MOSAIC","AOL","Opera","JAVA","MacWeb","WebExplorer","OmniWeb");
$Agent = $GLOBALS["HTTP_USER_AGENT"];
for ($i=0; $i<=7; $i++)
{
if (strpos($Agent,$Browsers[$i]))
{
$browser = $Browsers[$i];
$browserver ="";
}
}
if (ereg("Mozilla",$Agent) && !ereg("MSIE",$Agent))
{
$temp =explode("(", $Agent); $Part=$temp[0];
$temp =explode("/", $Part); $browserver=$temp[1];
$temp =explode(" ",$browserver); $browserver=$temp[0];
$browserver =preg_replace("/([\d\.]+)/","\\1",$browserver);
$browserver = " $browserver";
$browser = "Netscape Navigator";
}
if (ereg("Mozilla",$Agent) && ereg("Opera",$Agent))
{
$temp =explode("(", $Agent); $Part=$temp[1];
$temp =explode(")", $Part); $browserver=$temp[1];
$temp =explode(" ",$browserver);$browserver=$temp[2];
$browserver =preg_replace("/([\d\.]+)/","\\1",$browserver);
$browserver = " $browserver";
$browser = "Opera";
}
if (ereg("Mozilla",$Agent) && ereg("MSIE",$Agent))
{
$temp = explode("(", $Agent); $Part=$temp[1];
$temp = explode(";",$Part); $Part=$temp[1];
$temp = explode(" ",$Part);$browserver=$temp[2];
$browserver =preg_replace("/([\d\.]+)/","\\1",$browserver);
$browserver = " $browserver";
$browser = "Internet Explorer";
}
if ($browser!="")
{
$browseinfo = "$browser$browserver";
}
else
{
$browseinfo = "Unknown";
}
return $browseinfo;
}
//调用方法$browser=browse_infor() ;直接返回结果
***********************************************
让自动增加的id号字段从新从0开始计数啊??
alter table tablename auto_increment=0;
************************************************
get_cfg_var()什么意思? 动态态读写PHP。INI的值
取php.ini 中配置指令的值
比如在php.ini中有如下配置
SMTP = localhost
那么 get_var_cfg('SMTP'); 将返回 localhost
get_var_cfg() 取的值是配置文件中的值,而不是当前值
而 ini_get 则取的当前值
比如配置文件中 SMTP = localhost
print get_cfg_var('SMTP'); // 返回 localhost
print ini_get('SMTP'); // 返回 localhost
ini_set('SMTP', '192.168.1.24'); // 改变 SMTP 的当前值
print get_cfg_var('SMTP'); // 返回 localhost
print ini_get('SMTP'); // 返回 192.168.1.24
************************************************8
httpd.conf 如果设置邦多个域名?
例:
<VirtualHost 192.168.88.128>
ServerAdmin webmaster@mysite.com
DocumentRoot /home/mysite/public_html/
ServerName game.mysite.com
ErrorLog logs/game.mysite.com-error_log
CustomLog logs/game.mysite.com-access_log common
</VirtualHost>
以上已经正确的邦一个 game.mysite.com ,但如果小弟我想在邦多个怎么邦??如,www.mysite.com 和mysite.com 都在这个目录是不是:
ServerName game.mysite.com,www.mysite.com,mysite.com
这样??
同时,在IIS里我经常把WEB访问的日志去了,这样就不用记录日志了,这个:
ErrorLog logs/game.mysite.com-error_log
CustomLog logs/game.mysite.com-access_log common
是不是把这二句删除了,WEB访问就没有日志了???
请指教,谢谢了……
第 2 贴 转的
HTTP 1.1标准在协议中规定了对浏览器和服务器通信时,服务器能够跟踪浏
览器请求的是哪个主机名字。因此可以利用这个新特性,使用更轻松的方式设定
虚拟主机。这种方式不需要额外的IP地址,但需要新版本的浏览器支持。这种方式已经成为建立虚拟主机的标准方式。
要建立非IP基础的虚拟主机,多个域名是不可少的配置,因为每个域名就对
应一个要服务的虚拟主机。因此需要更改DNS服务器的配置,为服务器增加多个C NAME选项,如:
linux IN A 192.168.1.64
vhost1 IN CNAME linux
vhost2 IN CNAME linux
基本的设置选项都是为了linux主机设定的,如果要为vhost1和vhost2设定
虚拟主机,就要使用VirtualHost语句定义不同的选项,在语句中可以使用配置文件前面中的大部分选项,而可以重新定义几乎所有的针对服务器的设置。
NameVirtualHost 192.168.1.64
DocumentRoot /www/data
ServerName linux.example.org.cn
DocumentRoot /vhost1
ServerName vhost1.example.org.cn
DocumentRoot /vhost2
ServerName vhost2.example.org.cn
这里需要注意的是,VirtualHost的参数地址一定要和NameVirtualHost定义的地址相一致,必须保证所有的值严格一致,Apache服务器才承认这些定义是为这个IP地址定义的虚拟主机。
此外,定义过NameVirtualHost之后,那么对这个IP地址的访问都被区分不同的虚拟主机进行处理,而对其他IP地址的访问,例如127.0.0.1,才应用前面定义的缺省选项。
******************************
如何才能让别人下载abc.php而不是运行这个文件?
修改后缀名是最简单了方法了~
也可以用程序实现,发一个浏览器不认识的 MIME,让浏览器下载
这个文件,而不是在浏览器中显示。
PHP:---------------------------------------------
<?php
header("Content-type: application/unknow");
header("Content-Disposition: attachment; filename=test.php");
// 读取你要下载的文件
readfile('test.php');
?>
*******************************
请教:php中提取FLASH 输入框中文产生乱码的问题
多谢
是MX吗?
在首帧的action首行写system.usecodepage = true
********************************
求一个日期与今天相差天数
function dktime($oldtime)
{
list($odate)=explode(' ',$oldtime);
list($oy,$om,$od)=explode("-",$odate);
$otime=mktime(0,0,0,$om,$od,$oy);
$y=date("Y");$m=date("m");$d=date("d");
$time=mktime(0,0,0,$m,$d,$y);
$out=round(($time-$otime)/3600/24);
return($out);
}
$old="2003-06-03 12:45:23";
echo dktime($old);
$从数据库取得的时间="2002-12-20 0:6:6";
list($以前日期)= explode(" ", $从数据库取得的时间);
list($以前年,$以前月,$以前日)=explode("-", $以前日期);
$以前时间=mktime(0,0,0,$以前月,$以前日,$以前年);
$现在年=date(Y); $现在月=date(m); $现在日=date(d);
$现在时间=mktime("0","0","0",$现在月,$现在日,$现在年);
$相差天数=round(($现在时间-$以前时间)/3600/24) ;
echo $相差天数;
********************************
在apache+php系统上传大文件
除了upload_max_filesize 在php.ini里
把这个:post_max_size = 8M 改够大,
另外程序前加上set_time_limit(0);
基本就可以了
********************************
Apache 中添加两个可访问IP表示服务器所拥有IP都可访问
BindAddress *
********************************
请问如何查出新增记录自动插入的id号?
mysql里的user 表id字段是自动插入,
假如我插入一条记录后要显示本记录的id应该如何实现??
$query="select max(id) from table"
說白了﹐就是找目前最大的ID
php 的函数mysql_insert_id()
********************************
Apache服务器的乱码问题
在Apache 中添加一句设置默认的编码!!
AddDefaultCharset ??????
如果还不能解决就设成不要默认编码:
AddDefaultCharset Off
********************************
复选框的值的提交的问题比单选框要复杂一些。在单选框即RADIO中,每一选项的名字是一样的,但只能有一项被选中,提交时即将此项的VALUE提交。在复选框里面,用户有可能选取多个选项,那么,如何将所有被选中的值都提交到下一个页面呢?
用数组。思路是这样的:给复选框中的选项命名时,给他们取名为一个名字都相同的数组,比如SUBMIT[],这样,用户提交时,会将所有被选中的选项的值存在此数组中提交至下一个页面。然后,使用IMPLODE()函数将这个数组的值组合起来后存放在表中即可。
********************************
文件上传
当php.ini的register_globals=off的时候,文件上传以后的变量名称及使用与等于on的时候不一样了,具体体现在:
on时 off时 变量含义
$userfile $_REQUEST[userfile][tmp_name] 服务器上文 件临时存放的名称(包括临时路径)
$usefiler_name $_REQUEST[userfile][name] 文件的实际名称
$userfile_size $_REQUEST[userfile][name] 文件的大小
$userfile_type $_REQUEST[userfile][type] 文件的类型
$_REQUEST[userfile][error] 错误次数
*********************************
比较判断字符串1包含在字符串2中
print substr_count("This is a test", "is"); // prints out 2
strpos('rar,zip,exe,doc,xls,gif,jpg,bmp,swf,txt,ppt','zip1')===false?'不包含':'包含')
*********************************
从数据库随机读出15条记录?
order by rand() limit 0,5
*********************************
如何才能使浏览器的后退键等失效啊?
用PHP&MYSQL做了个工资查询,但在注销后,按后退键却可以将所查的资料看个清楚,如何办呢?请指教!THS.
你钻牛角尖了!!!
为何不从功能强大的PHP上着手考虑?
给你个方法:
1.在登录页面用rand()函数生成随机数并注册为SESSION,然后把随机数和用户名密码一并提交到登录程序
2.在登录程序里面验证这个SESSION是否和提交过来的随机数一样,不对的话就引导回登录界面去
记得在注销的时候要把保存随机数的session也注销
剩下的你自己写代码啦,自己写出来印象才深刻
***********************************
查表中一个字段的所有不同值:
select * from tables group by type
***********************************
关于Apache的几种常见应用举例
软件环境:Redhat Linux 5.2
A.如何为每个用户设置单独的主页?
默认设置情况下,你需要在你的用户主目录中创建目录public_html,然后把你的所有网页文件放在该目录下即可,打入http://servername/~username访问,但是请注意以下几点:
1.登录为root,修改用户主目录权限(#chmod 705 /home/username),让其他人有权进入该目录浏览。
2.以自己的用户名登录,创建public_html目录,保证该目录也有正确的权限让其他人进入。
3. Apache默认的主页文件是index.html,不是index.htm,你可以改变/etc/mime.types文件中的一行象下面。
text/html html htm
然后Apache会读你的index.htm文件4.用户自己在主目录下创建的目录最好把权限设为0700,确保其他人不能进入访问。
B.如何设虚拟主机?
1.假设某台服务器IP为192.168.11.2,要虚拟另一IP address为192.168.11.4,则加下面的行到/etc/rc.d/rc.local
/sbin/ifconfig eth0:0 192.168.11.4 /sbin/route add -host 192.168.11.4 eth0:0
2.加下面的行到/home/httpd/conf/httpd.conf
VirtualHost 192.168.11.4 (此行有<>)
ServerAdmin your_email_address
DocumentRoot /home/httpd/foldername
ServerName virtualservername
ErrorLog /var/log/httpd/foldername/error.log
TransferLog /var/log/httpd/foldername/access_log/VirtualHost (此行有<>)
3.若在你的LAN中有DNS服务器,加上相应的项192.168.11.4--->virtualservername
C.如何用Apache给某个目录以密码保护?
默认情况下,可在某个目录下放一个文件.htaccess,象下面这样:
AuthName stuff
AuthType Basic
AuthUserFile /etc/.userpasswd
require valid-user
为了给用户user1进入访问,用# htpasswd -c /etc/.userpasswd user1为user1分配密码。
D.如何把某个目录共享出来用浏览器访问?如/home/ftp/pub/
1.加下面的行到/home/httpd/conf/srm.confAlias /pub /home/ftp/pub/2.更改默认文件类型,改/home/httpd/conf/srm.conf中一行为:
DefaultType application/octet-stream 3.重新启动Apache. /etc/rc.d/init.d/httpd restart
**********************************************
得到真实IP
getenv
(PHP 3, PHP 4 )
getenv -- Gets the value of an environment variable
Description
string getenv ( string varname)
Returns the value of the environment variable varname, or FALSE on an error.
$ip = getenv ("REMOTE_ADDR"); // get the ip number of the user
So with this script, you always get the right IP:
if (getenv(HTTP_X_FORWARDED_FOR)){
$ip=getenv(HTTP_X_FORWARDED_FOR);
}
else {
$ip=getenv(REMOTE_ADDR);
}
To get REAL ip, u can also use this:
if(getenv("HTTP_CLIENT_IP")) {
$ip = getenv("HTTP_CLIENT_IP");
} elseif(getenv("HTTP_X_FORWARDED_FOR")) {
$ip = getenv("HTTP_X_FORWARDED_FOR");
} else {
$ip = getenv("REMOTE_ADDR");
}
Thus, we should have real user IP in variable $ip.
My "bullet-proof" solution to fetch an IP-address..
<?
function iptype1 () {
if (getenv("HTTP_CLIENT_IP")) {
return getenv("HTTP_CLIENT_IP");
}
else {
return "none";
}
}
function iptype2 () {
if (getenv("HTTP_X_FORWARDED_FOR")) {
return getenv("HTTP_X_FORWARDED_FOR");
}
else {
return "none";
}
}
function iptype3 () {
if (getenv("REMOTE_ADDR")) {
return getenv("REMOTE_ADDR");
}
else {
return "none";
}
}
function ip() {
$ip1 = iptype1();
$ip2 = iptype2();
$ip3 = iptype3();
if (isset($ip1) && $ip1 != "none" && $ip1 != "unknown") {
return $ip1;
}
elseif (isset($ip2) && $ip2 != "none" && $ip2 != "unknown") {
return $ip2;
}
elseif (isset($ip3) && $ip3 != "none" && $ip3 != "unknown") {
return $ip3;
}
else {
return "none";
}
}
$ip = ip();
?>
I've fetched around 600 unique IP-addresses with this approach.. None of them returned "none" or "unknown".. Only real IP-addresses.
Best regards
Anders Winther
取得代理服务器后面的真实IP
你可能知道$_SERVER['REMOTE_ADDR'] 这个变量里面保存的是
浏览者的IP地址。但是当浏览者使用代理服务器访问的时候怎样取得他的真实IP呢?
用下面代码试试看
Code: [Copy to clipboard]
<?php
if(getenv("HTTP_CLIENT_IP")) {
$onlineip = getenv("HTTP_CLIENT_IP");
} elseif(getenv("HTTP_X_FORWARDED_FOR")) {
$onlineip = getenv("HTTP_X_FORWARDED_FOR");
} else {
$onlineip = $_SERVER["REMOTE_ADDR"];
}
?>