首页 > 编程技术 > php

PHP日常实用小Tips

发布时间:2016-11-25 17:36

1.简易判断ip地址合法性
2.email的正则判断
3.检测ip地址和mask是否合法的例子
4.关于表单刷新
5.关于表单刷新
1.简易判断ip地址合法性
if(!strcmp(long2ip(sprintf("%u",ip2long($ip))),$ip)) echo "is ipn";
----
2.email的正则判断
eregi("^[_.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z_-]+.)+[a-zA-Z]$", $email);
----
3.检测ip地址和mask是否合法的例子
$ip = '192.168.0.84';
$mask = '255.255.255.0';
$network = '192.168.0';
$ip = ip2long($ip);
$mask = ip2long($mask);
$network = ip2long($network);
if( ($ip & $mask) == $network) echo "valid ip and maskn";
?>
----
4.今天解决了一个巨郁闷的问题
ipb的添加用户页面toadduser.php似乎会重复提交,导致在添加新用户的时候总是报该用户已经存在...已经郁闷了我3天了,终于搞定,大快人心!
----
5.关于表单刷新
问:为什么我在点击浏览器的后退按钮后,所有字段的信息都被清空了?
答:这是由于你在你的表单提交页面中使用了 session_start 函数。该函数会强制当前页面不被缓存。解决办法为,在你的 Session_start 函数后加入 header("Cache-control: private"); 注意在本行之前你的PHP程序不能有任何输出。
补充:还有基于session的解决方法,在session_start前加上
session_cache_limiter('nocache');// 清空表单
session_cache_limiter('private'); //不清空表单,只在session生效期间
session_cache_limiter('public'); //不清空表单,如同没使用session一般
可以在session_start();前加上 session_cache_limiter("private,max-age=10800");
摘自phpe.net
----
6.快速搞定文件下载头部输出
header("Content-type: application/x-download");
header("Content-Disposition: attachment; filename=$file_download_name;");
header("Accept-Ranges: bytes");
header("Content-Length: $download_size");
echo 'xxx'
.......2004-08-19 11:50:30
----
7.用header输出ftp下载方式,并且支持断点续传
一个例子:
header('Pragma: public');
header('Cache-Control: private');
header('Cache-Control: no-cache, must-revalidate');
header('Accept-Ranges: bytes');
服务器
<?php
// Server
// 设置错误处理
error_reporting (E_ALL);
// 设置运行时间
set_time_limit (0);
// 起用缓冲
ob_implicit_flush ();
$ip = "127.0.0.1";        // IP地址
$port = 1000;        // 端口号
$socket = socket_create (AF_INET, SOCK_STREAM, SOL_TCP);    // 创建一个SOCKET
if ($socket)
    echo "socket_create() successed! ";
else
    echo "socket_create() failed:".socket_strerror ($socket)." ";
$bind = socket_bind ($socket, $ip, $port);           // 绑定一个SOCKET
if ($bind)
    echo "socket_bind() successed! ";
else
    echo "socket_bind() failed:".socket_strerror ($bind)." ";
$listen = socket_listen ($socket);            // 间听SOCKET
if ($listen)
    echo "socket_listen() successed! ";
else
    echo "socket_listen() failed:".socket_strerror ($listen)." ";
while (true)
{
    $msg = socket_accept ($socket);            // 接受一个SOCKET
    if (!$msg)
    {
        echo "socket_accept() failed:".socket_strerror ($msg)." ";
        break;
    }
    $welcome = "Welcome to PHP Server! ";
    socket_write ($msg, $welcome, strlen ($welcome));
    while (true)
61、增加了create_function(),用于快速建立函数。(Zeev, Zend Engine)
62、增加了数组和数组、对象和对象的比较功能。“==”符号提供无序的比较功能,“===”提供有序的比较。(Zeev, Zend Engine)
63、Allow all functions that receive user-defined function callbacks to accept an array that contains an object and a method name, in place of a function name, e.g. usort($array, array($obj, "ObjSort"))
63、允许所有函数支持用户定义的function callback(不知道怎么翻)用来接受一个包括一个对象和一个方法名的数组。(Zeev, Zend Engine)
64、增加了set_error_handler()函数,允许用户自己编写错误处理函数以替代内建的错误处理功能。(Zeev, Zend Engine)
65、把user_error()改名为trigger_error();但user_error()继续保留有效。(Zeev, Zend Engine)
66、修正了全局/静态的声明为需要在其末尾加上分号“;”。(Andi, Zend Engine)
67、清除了PCRE(这是什么东西?)扩展。(Andrei)
68、给in_array()函数增加了第三个参数。如果此参数为 true ,in_array()将进行严格的比较以替代默认的比较方法。(Andrei)
69、增加了pg_trace()和pg_untrace()函数。(Dominic J. Eidson & Zeev)
70、ignore_user_abort=Off现在是默认值。(Thies)
71、增加了能递归合并相同键值的函数array_merge_recursive()。(Andrei)
72、修正了OCIParse在解析非法SQL语句时崩溃的问题。(Thies)
73、修正了在非永久性连接时,mysql_connect()会忽略socket参数的BUG。(Zeev)
74、在php.ini中增加disable_functions的选项,使管理员能禁用某些可能引起安全问题的函数。(Zeev)
75、修正了WIN32中session的问题。在php.ini里,save_path选项,现在需要用分号“;”代替原来的“:”来限定使用的目录层数。(Andi)
76、在无法找到PHP文件时,APACHE将给出“Declined”的信息。(Rasmus)
77、修正了十进制数字在国际化环境下的问题。数字应为标准的美国格式(为什么??!!)。(Andi, Zend Engine)
78、给函数preg_quote()增加了第二个参数。这个参数允许引用一个通常是常规表达式分隔符的字符。(Andrei)
79、未提交的OCI8的事务将在连接关闭前取消。(Thies)
80、ignore_user_abort()及一些相关函数能在CGI模式下工作正常。(Patch by daniel.braun@ercom.fr)
在查询中加上convert转换。。。
convert(varchar(10),字段名,转换格式)
比如:
select user_id,convert(varchar(10),date,11) as date from tb_user
转换格式:
0或100 month dd yyyy hh:miAMPM
1    mm/dd/yy
2 yy.mm.dd
3 dd/mm/yy
4 dd.mm.yy
5 dd-mm-yy
6 dd month yy
7 month dd,yy
8 hh:mi:ss
9或109 month dd yyyy hh:mi:ss:mmmAMPM
10 mm-dd-yy
11 yy/mm/dd
12 yymmdd
101 mm/dd/yyyy
102 yyyy.mm.dd
103 dd/mm/yyyy
104 dd.mm.yyyy
105 dd-mm-yyyy
106 dd month yyyy
107 month dd,yyyy
108 hh:mi:ss
110 mm-dd-yyyy
111 yyyy/mm/dd
112 yyyymmdd

<?php
/**
    拼音码表的生成:
        启动输入法生成器在逆转换选项卡中装入window的拼音输入法并将其保存为文
    本文件(winpy.txt)备用。
    
    下面的代码将拼音码表文件(文本)装入到数组$pymb中,结构为:(拼音,(汉字...))
    码表转换时间较长,应转换后另行保存
*/
$filename = "pymb.txt";
if(file_exists($filename)) {
    $fp = fopen($filename,"r");
    $pymb = unserialize(fread($fp,filesize($filename)));
    fclose($fp);
}else {
    $filename = "winpy.txt";
    $fp = fopen($filename,"r");
    $old = "";
    $ar = array();
    $pymb = array();
    while(! feof($fp)) {
    $buffer = fgets($fp,128);
    sscanf($buffer,"%2s%s",$ch,$py);
    if($ch >= "啊" && ord($py) < 128) {
        $pymb[$ch] = $py;
    }
    }
    fclose($fp);
    $fp = fopen("pymb.txt","w");
    fwrite($fp,serialize($pymb)." ");
    fclose($fp);
}
?>
    应用例,给文字加上拼音<br>
<?
/**
    应用例,给文字加上拼音。为简化起见,假定全为中文
*/
function get_py($text) {
    global $pymb;
    $i = 0;
    $n = strlen($text);
    $ar = array();
标签:[!--infotagslink--]

您可能感兴趣的文章: