当前位置:  编程技术>php
本页文章导读:
    ▪php大量session的散列及过期回收      一台服务器流量比较大,因为程序的需要,session的过期时间设置为3小时,导致/tmp下堆积了近20万的session文件,进而导致内核占用的cpu急剧上升。 因为session的读写涉及到大量小文件的随机读.........
    ▪PHP编程小经验总结      1、为什么PHP的echo多行批量输出为空白? 答: echo <<<hdv 内容1; 内容2; hdv; //hdv必须顶格,并且且后面似乎也不能有任何字符包括空格输出; 2、在使用session_start()函数时,为什么PHP.........
    ▪PHP中HEADER头消息详解      无论是发送哪种HEADER消息,都必须保证在发送HEADER之前没有输出任何信息到终端浏览器。 一、使用HEADER发送文本类型头信息 例1:   代码如下: <?php header("Content-Type: text/html; charset=UTF-8");/.........

[1]php大量session的散列及过期回收
    来源: 互联网  发布时间: 2013-12-24

一台服务器流量比较大,因为程序的需要,session的过期时间设置为3小时,导致/tmp下堆积了近20万的session文件,进而导致内核占用的cpu急剧上升。
因为session的读写涉及到大量小文件的随机读写,并且是集中在一个目录下,iowait也急剧升高。

第一步,考虑将session放入内存中

最简单的办法莫过于将/tmp挂载为 tmpfs文件系统,也就是内存中。

第二步,将session存储到不通的目录中

php本身支持session的多级散列,在php.ini中,将
;session.save_path = /tmp
修改为
session.save_path = "2;/tmp/session"
将session存储到 /tmp/session这个文件夹中,并且是用2级散列。

保存退出,等第三步结束后重启php。

第三步,创建session存储文件夹

php并不会自动去创建这些文件夹,不过在源文件中提供了一些创建文件夹的脚本。
脚本:
 

代码如下:
I="0 1 2 3 4 5 6 7 8 9 a b c d e f"
for acm in $I;
do
for x in $I;
do
mkdir -p /tmp/session/$acm/$x;
done;
done
chown -R nobody:nobody /tmp/session
chmod -R 1777 /tmp/session

因为/tmp是用的内存,服务器重启后,里面的所有文件都会丢失,所以,需要把上面的脚本加入到 /etc/rc.local中,并且要放在启动php之前。

第四步,session的回收

session在经过session.gc_maxlifetime后会过期,但并不会马上被删除,时间长了以后会造成/tmp空间占用很大。具体的删除算法懒得去研究。
下面这个命令可以删除过期的session,这里定义的过期时间是3小时:
 

代码如下:
find /tmp/session -amin +180 -exec rm -rf {} \;

可以将其加入cron中,10分钟执行一次。


    
[2]PHP编程小经验总结
    来源: 互联网  发布时间: 2013-12-24

1、为什么PHP的echo多行批量输出为空白?
答:
echo <<<hdv
内容1;
内容2;
hdv;
//hdv必须顶格,并且且后面似乎也不能有任何字符包括空格输出;

2、在使用session_start()函数时,为什么PHP输出空白?
答:必须设置D:\usr\local\php目录下的PHP.INI文件里面的session.save_path
存储路径,并且该路径必须为实际存在的路径,否则输出为空白,也就是没有任何输出。
还需要注意:
有些USR目录的快捷方式到PHP.INI的文件,可能不是指向D:\usr\local\php,而是指向%SystemRoot%\php.ini目录的,所以在使用自带PHP.INI快捷方式编辑PHP.INI文件的时候,要注意实际的编辑对象。

3、为什么我升级PHP后,原来的程序出现满屏的 Notice: Undefined variable?
答:这是警告的意思,由于变量未定义引起的,打开php.ini,找到最下面的error_reporting,修改为error_reporting = E_ALL & ~E_NOTICE
对于Parse error错误error_reporting(0)无法关闭。
如果你想关闭任何错误提示,请打开php.ini,找到display_errors,设置为display_errors = Off.以后任何错误都不会提示。

4、经验:PHP函数传递数组,要求参数必须是数组形式,不能为常量或者非数组变量。

5、如何更好的分析URL以及引用或提取URL路径问题?
答:
echo "<pre>;";
print_r($_SERVER);
所有服务器方法都会显示出来。

6、为什么使用COOKIE传递变量会失败?
答:
请先检查COOKIE中的服务器端作用域设置情况,有可能因为作用域问题总是传递不过去变量;

7、为什么有时候采用非IE默认编码字符的网页有时候可以正常显示有时候不可以正常显示,甚至什么都不显示(显示空白)?
答:
请注意,把字符默认编码设置放到TITLE之前,先后次序如下(事例):
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>登录管理系统-管理员控制面板</title>
请不要把<title></title>设置在meta之前,否则可能无法正常显示IE6下测试如此;

8、为什么SESSION变量值与随机值总是不同?
这个是笔者遇到奇怪的问题,例子如下:(写入SESSION变量值与随机值总是不同)
$cbcc=rand(1,1000);
//if(!isset()($_SESSION['cbconfirmcode']))
//{
// unset($_SESSION['cbconfirmcode']);//comfirm buy rand code,确认购买随机码
//}
 
$_SESSION['cbconfirmcode']=$cbcc;
echo $_SESSION['cbconfirmcode'].'*****';
<input type="hidden" value="<?php echo $cbcc;?>"  name="cbconfirmcode"/>
...
<img title="" height="2" alt=" " src="#" width="1" />
...
最后查出是因为插入的图象SRC地址用#造成的,我也不知道为什么。去掉插入的图象就可以了,加上就不对,未做深入研究;

9、经验:当使用UPDATE 查询,MySQL 不会将原值和新值一样的列更新。这样使得 mysql_affected_rows() 函数返回值不一定就是查询条件所符合的记录数,只有真正被修改的记录数才会被返回。MYSQL UPDATE语句执行时候,如果要更新的记录与原来的记录相同,则使用mysql_affect_rows()时,MYSQL会返回0值!所以在使用mysql_affected_rows检测更新行数时候要特别小心。


    
[3]PHP中HEADER头消息详解
    来源: 互联网  发布时间: 2013-12-24

无论是发送哪种HEADER消息,都必须保证在发送HEADER之前没有输出任何信息到终端浏览器。

一、使用HEADER发送文本类型头信息
例1:
 

代码如下:
<?php
header("Content-Type: text/html; charset=UTF-8");//告知各位观众下面将要输出的文本类型
?>


例1输出HEADER告诉浏览器将要输出的文本编码格式为UTF-8。这在全页面PHP处理上是必须的,否则可能会引起终端浏览器显示乱码或空白页显示现象。由于PHP指定在HEADER输出前不能有任何输出信息,包括空格,所以当页面运行出现HEADER信息已经发送的提示时候,需要首先检查在HEADER之前是否输出了某些信息,包括本PHP页面的包含头文件是否输出信息。
如果需要输出文件提示下载可使用如下方法:
 

代码如下:
<?php
header("Content-type: application/octet-stream");//FILE流
header("Accept-Ranges: bytes");
header("Accept-Length: $filesize");//提示将要接收的文件大小
header("Content-Disposition: attachment; filename=".$fname); //提示终端浏览器下载操作
?>
 

如果是PDF格式也可用header("Content-type: application/pdf");其它格式类似处理,不过上面的例子是个下载文件流通例,但是指定详细的文本格式似乎对浏览器的默认处理似乎更好,比如让播放器自动播放下载音乐、或PDF编辑器自动打开远程PDF文档等。

附Content-type的MIME类型说明:
 

代码如下:
<?php
$mimetypes = array(
        'ez' => 'application/andrew-inset',
        'hqx' => 'application/mac-binhex40',
        'cpt' => 'application/mac-compactpro',
        'doc' => 'application/msword',
        'bin' => 'application/octet-stream',
        'dms' => 'application/octet-stream',
        'lha' => 'application/octet-stream',
        'lzh' => 'application/octet-stream',
        'exe' => 'application/octet-stream',
        'class' => 'application/octet-stream',
        'so' => 'application/octet-stream',
        'dll' => 'application/octet-stream',
        'oda' => 'application/oda',
        'pdf' => 'application/pdf',
        'ai' => 'application/postscript',
        'eps' => 'application/postscript',
        'ps' => 'application/postscript',
        'smi' => 'application/smil',
        'smil' => 'application/smil',
        'mif' => 'application/vnd.mif',
        'xls' => 'application/vnd.ms-excel',
        'ppt' => 'application/vnd.ms-powerpoint',
        'wbxml' => 'application/vnd.wap.wbxml',
        'wmlc' => 'application/vnd.wap.wmlc',
        'wmlsc' => 'application/vnd.wap.wmlscriptc',
        'bcpio' => 'application/x-bcpio',
        'vcd' => 'application/x-cdlink',
        'pgn' => 'application/x-chess-pgn',
        'cpio' => 'application/x-cpio',
        'csh' => 'application/x-csh',
        'dcr' => 'application/x-director',
        'dir' => 'application/x-director',
        'dxr' => 'application/x-director',
        'dvi' => 'application/x-dvi',
        'spl' => 'application/x-futuresplash',
        'gtar' => 'application/x-gtar',
        'hdf' => 'application/x-hdf',
        'js' => 'application/x-javascript',
        'skp' => 'application/x-koan',
        'skd' => 'application/x-koan',
        'skt' => 'application/x-koan',
        'skm' => 'application/x-koan',
        'latex' => 'application/x-latex',
        'nc' => 'application/x-netcdf',
        'cdf' => 'application/x-netcdf',
        'sh' => 'application/x-sh',
        'shar' => 'application/x-shar',
        'swf' => 'application/x-shockwave-flash',
        'sit' => 'application/x-stuffit',
        'sv4cpio' => 'application/x-sv4cpio',
        'sv4crc' => 'application/x-sv4crc',
        'tar' => 'application/x-tar',
        'tcl' => 'application/x-tcl',
        'tex' => 'application/x-tex',
        'texinfo' => 'application/x-texinfo',
        'texi' => 'application/x-texinfo',
        't' => 'application/x-troff',
        'tr' => 'application/x-troff',
        'roff' => 'application/x-troff',
        'man' => 'application/x-troff-man',
        'me' => 'application/x-troff-me',
        'ms' => 'application/x-troff-ms',
        'ustar' => 'application/x-ustar',
        'src' => 'application/x-wais-source',
        'xhtml' => 'application/xhtml+xml',
        'xht' => 'application/xhtml+xml',
        'zip' => 'application/zip',
        'au' => 'audio/basic',
        'snd' => 'audio/basic',
        'mid' => 'audio/midi',
        'midi' => 'audio/midi',
        'kar' => 'audio/midi',
        'mpga' => 'audio/mpeg',
        'mp2′ => 'audio/mpeg',
        'mp3′ => 'audio/mpeg',
        'aif' => 'audio/x-aiff',
        'aiff' => 'audio/x-aiff',
        'aifc' => 'audio/x-aiff',
        'm3u' => 'audio/x-mpegurl',
        'ram' => 'audio/x-pn-realaudio',
        'rm' => 'audio/x-pn-realaudio',
        'rpm' => 'audio/x-pn-realaudio-plugin',
        'ra' => 'audio/x-realaudio',
        'wav' => 'audio/x-wav',
        'pdb' => 'chemical/x-pdb',
        'xyz' => 'chemical/x-xyz',
        'bmp' => 'image/bmp',
        'gif' => 'image/gif',
        'ief' => 'image/ief',
        'jpeg' => 'image/jpeg',
        'jpg' => 'image/jpeg',
        'jpe' => 'image/jpeg',
        'png' => 'image/png',
        'tiff' => 'image/tiff',
        'tif' => 'image/tiff',
        'djvu' => 'image/vnd.djvu',
        'djv' => 'image/vnd.djvu',
        'wbmp' => 'image/vnd.wap.wbmp',
        'ras' => 'image/x-cmu-raster',
        'pnm' => 'image/x-portable-anymap',
        'pbm' => 'image/x-portable-bitmap',
        'pgm' => 'image/x-portable-graymap',
        'ppm' => 'image/x-portable-pixmap',
        'rgb' => 'image/x-rgb',
        'xbm' => 'image/x-xbitmap',
        'xpm' => 'image/x-xpixmap',
        'xwd' => 'image/x-xwindowdump',
        'igs' => 'model/iges',
        'iges' => 'model/iges',
        'msh' => 'model/mesh',
        'mesh' => 'model/mesh',
        'silo' => 'model/mesh',
        'wrl' => 'model/vrml',
        'vrml' => 'model/vrml',
        'css' => 'text/css',
        'html' => 'text/html',
        'htm' => 'text/html',
        'asc' => 'text/plain',
        'txt' => 'text/plain',
        'rtx' => 'text/richtext',
        'rtf' => 'text/rtf',
        'sgml' => 'text/sgml',
        'sgm' => 'text/sgml',
        'tsv' => 'text/tab-separated-values',
        'wml' => 'text/vnd.wap.wml',
        'wmls' => 'text/vnd.wap.wmlscript',
        'etx' => 'text/x-setext',
        'xsl' => 'text/xml',
        'xml' => 'text/xml',
        'mpeg' => 'video/mpeg',
         'mpg' => 'video/mpeg',
        'mpe' => 'video/mpeg',
        'qt' => 'video/quicktime',
        'mov' => 'video/quicktime',
        'mxu' => 'video/vnd.mpegurl',
        'avi' => 'video/x-msvideo',
        'movie' => 'video/x-sgi-movie',
        'ice' => 'x-conference/x-cooltalk',
);
?>

二、使用HEADER发送状态(Status)信息
当我们在响应浏览器操作时候,可能需要输出一些提示状态信息,比如访问的文件不存(404状态)在或者文件被转移(301状态)等,告诉用户(包括搜索引擎)所访问页面的当前状态,这在实际使用中对站长非常重要,因为这直接影响到搜索引擎对当前页面的判定。当前对于301固定转移(HTTP/1.1 301 Moved Permanently)我们也可以采用其它方式(.htaccess或IIS重定向),但是了解PHP自编程解决这些页面状态提示会加深自己对浏览器状态的认知。
HEADER状态消息头格式如下:
header("第一部分 第二部分 第三部分");
其中第一部分为HTTP协议的版本号(HTTP-Version),第二部分为将要发送的状态代码(Status),第三部分为状态原因(Reason-Phrase) ,三部分中间用一个空格分割,第一部分和第二部分都是必需,第三部分的状态原因为可选项,一般推荐按照标准写出(参下文)。
例2:
 

代码如下:
<?php
header("HTTP/1.1 404 Not Found");
?>


例2实际在使用中很少用到的,感觉有点忽悠终端浏览者的意思。
最经常遇到是下面的例3:
 

代码如下:
<?php
header("HTTP/1.1 301 Moved Permanently");//301永久迁移
header("Location: http://www.");//跳转新URL地址,默认Location可能会发送302头,笔者暂不确定。
?>
 

此语句告诉搜索引擎或浏览者,本页面已经被“蚂蚁搬家”了,走,我带你看看新家去(新网页)。

下面专门把W3上Header状态代码(Status)罗列一下供各位使用参考:
1、状态码类(Status)定义
1xx类:Informational - Request received, continuing process(信息状态码类:请求已收到,继续处理)
2xx类:Success - The action was successfully received, understood,and accepted(成功状态码类:本次操作已收到并处理OK)
3xx类:Redirection - Further action must be taken in order to complete the request (重定向状态码类:完成请求前必须进一步执行操作)
4xx类:Client Error - The request contains bad syntax or cannot be fulfilled(发往客户端的错误状态码类:请求包含语法错误或请求不能完成)
5xx类:Server Error - The server failed to fulfill an apparently valid request (服务器端的错误状态码类:服务器执行合法请求失败)
2、常用状态码(Status)列表(部分):
| "100" ; Continue
| "101" ; Switching Protocols

| "200" ; OK
| "201" ; Created
| "202" ; Accepted
| "203" ; Non-Authoritative Information
| "204" ; No Content
| "205" ; Reset Content
| "206" ; Partial Content

| "300" ; Multiple Choices
| "301" ; Moved Permanently
| "302" ; Moved Temporarily
| "303" ; See Other
| "304" ; Not Modified
| "305" ; Use Proxy
| "400" ; Bad Request
| "401" ; Unauthorized
| "402" ; Payment Required
| "403" ; Forbidden
| "404" ; Not Found
| "405" ; Method Not Allowed
| "406" ; Not Acceptable
| "407" ; Proxy Authentication Required
| "408" ; Request Time-out
| "409" ; Conflict
| "410" ; Gone
| "411" ; Length Required
| "412" ; Precondition Failed
| "413" ; Request Entity Too Large
| "414" ; Request-URI Too Large
| "415" ; Unsupported Media Type

| "500" ; Internal Server Error
| "501" ; Not Implemented
| "502" ; Bad Gateway
| "503" ; Service Unavailable
| "504" ; Gateway Time-out
| "505" ; HTTP Version not supported

另外我们还可以使用PHP 的HEADER发送一些缓存参数命令、超期命令等,例如:
 

代码如下:
<?php
header("Cache-Control: no-cache, must-revalidate"); //不要缓存
header("Expires: Fri, 1 Dec 2099 08:00:00 GMT"); // 页面过期时间
?>

您可能感兴趣的文章:
php header()函数的简单例子
php header函数实现文件下载的实例代码
php中header函数的用法举例详解
php header 使用详解
php header函数 文件下载时直接提示保存的代码
php header头信息应用举例
php 文件头部(header)信息详解
PHP header()函数使用详解
php header函数使用要点


    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
nosql iis7站长之家
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,