php垃圾回收机制处理办法

 更新时间:2016年11月25日 15:58  点击:1617

一、PHP 垃圾回收机制(Garbage Collector 简称GC)

在PHP中,没有任何变量指向这个对象时,这个对象就成为垃圾。PHP会将其在内存中销毁;这是PHP 的GC垃圾处理机制,防止内存溢出。

当一个 PHP线程结束时,当前占用的所有内存空间都会被销毁,当前程序中所有对象同时被销毁。GC进程一般都跟着每起一个SESSION而开始运行的.gc目的是为了在session文件过期以后自动销毁删除这些文件.

二、__destruct /unset

__destruct() 析构函数,是在垃圾对象被回收时执行。

unset 销毁的是指向对象的变量,而不是这个对象。

三、 Session 与 GC

由于PHP的工作机制,它并没有一个daemon线程来定期的扫描Session 信息并判断其是否失效,当一个有效的请求发生时,PHP 会根据全局变量 session.gc_probability 和session.gc_divisor的值,来决定是否启用一个GC, 在默认情况下, session.gc_probability=1, session.gc_divisor =100 也就是说有1%的可能性启动GC(也就是说100个请求中只有一个gc会伴随100个中的某个请求而启动).

GC 的工作就是扫描所有的Session信息,用当前时间减去session最后修改的时间,同session.gc_maxlifetime参数进行比较,如果生存时间超过gc_maxlifetime(默认24分钟) ,就将该session删除。

但是,如果你Web服务器有多个站点,多个站点时,GC处理session可能会出现意想不到的结果,原因就是:GC在工作时,并不会区分不同站点的session.

那么这个时候怎么解决呢?

1. 修改session.save_path,或使用session_save_path() 让每个站点的session保存到一个专用目录,

2. 提供GC的启动率,自然,GC的启动率提高,系统的性能也会相应减低,不推荐。

3. 在代码中判断当前session的生存时间,利用session_destroy()删除.

 $link = mssql_connect("127.0.0.1", "sa", "sa") or die("Can't connect sql server");
    mssql_select_db("cheng", $link) or die("Select database failure");
  
 mysql教程_connect('localhost','root','root') or die('数据库教程服务器不能连接');
 mysql_select_db('loupan') or die( 'error' );
 mysql_query("set Names 'gb2312'");
 $ms_sql ="Select * from sony_z2800";
 $ms_query = mssql_query( $ms_sql ) or die('55555');
 $typeid =23;
 $write ='';
 $sj ='';
 $sjzt ='';
 while( $ms_rs = mssql_fetch_array( $ms_query ) )
 {
  $filetype = $ms_rs[8];
  $language = $ms_rs[6];
  $os = $ms_rs[10];
  $softsize = $ms_rs[7];
  $softlinks = mysql_escape_string("{dede:link islocal='1' text='迅雷下载'}".$ms_rs[11]."{/dede:link}");
  $title = mysql_escape_string(mb_convert_encoding($ms_rs[3],'gbk','gb2312'));
  $click = $ms_rs[9];
  if( !is_numeric($click))
  {
   $click = mt_rand(100,1000);
  }
  $litpic = mysql_escape_string(str_replace('"  />','',str_replace('  <img src="','',$ms_rs[12]))); 
  $desciption ="";
  $introduce='';

  //die($desciption);
   
  $addsoft = "Insert into 3g_addonsoft(typeid,filetype,language,softtype,accredit,

os,softrank,officialUrl,officialDemo,softsize,softlinks,introduce,templet,userip,redirecturl)";
   $addsoft .=" values

('$typeid','$filetype','$language','','','$os','3','','','$softsize','".$softlinks."','$introduce','','202.103.69.94','')";
   mysql_query( $addsoft ) or die('addsoft'.$addsoft.mysql_error());
   $newid = mysql_insert_id();
  
   $temp_title = $title.'-'.$sj.'-'.$language;
   $seo =$os.$sj.$sjzt;
   keywords= $os.','.$sj.','.$sjzt.','.$title.','.$language
  
   $archives = "Insert into 3g_archives

(id,typeid,typeid2,sortrank,flag,ismake,channel,arcrank,click,money,title,litpic,writer,source,pubdate,senddate,mid,dutyadmin

,description,keywords)";  
   $archives.=" values

('$newid','$typeid','0','1255070897','p','1','3','0','$click','0','$temp_title','$litpic','$write','未

知','1255070897','1255070970',1,1,'$desciption','$keywords')";
  
   mysql_query($archives) or die('archives '.$temp_title.'|'.$archives.mysql_error());
   $arctiny = "Insert into 3g_arctiny(id,typeid,typeid2,arcrank,channel,senddate,sortrank,mid) values

($newid,$typeid,0,0,3,'1255070897','1255070970',1)";
  
   mysql_query( $arctiny) or die( 'arctiny'.$arctiny.mysql_error());
  
 } 
 echo 'success'; 

本站原创转载注明来源www.111cn.net


js代码


var displayCount;
var getDataUrl;
var bookTableId;
var currentIndex;
var pageCount;
var linkClass;
var fields;
function InitPageBar(dc, gdu, btId,pc,lc) {
displayCount = dc;
getDataUrl = gdu;
bookTableId = btId;
currentIndex = 1;
pageCount = pc;
linkClass = "."+lc;
$(linkClass).click(GetPage);
}
function GetPageById(id) {
$("#CI").val(id);
var surl = getDataUrl+"?pageIndex=" + id;
$.ajax({
url: surl,
type: "GET",
dataType: "json",
timeout: 1000,
success: showResult
}
);
}
function GetPage() {
GetPageById($(this).get(0).id);
}
function showResult(result) {
for (i = 1; i <= result.Data.length; i++) {
var id = "#" + bookTableId + " tr:nth-child(" + i + ")";
obj = result.Data[i - 1];
for (var key in obj) {
ctl = $(id).find("." + key);
if (ctl.length > 0) {
ctl.get(0).innerHTML = obj[key];
}
}
}
$(linkClass).each(function(index) {
var i, b, e;
if (result.CurrentPageIndex <= displayCount) {
b = 1;
e = (displayCount + 1) * 2;
i = index - 2 + 1;
}
else if (result.CurrentPageIndex > pageCount - displayCount) {
b = pageCount - displayCount * 2;
e = pageCount;
i = pageCount - displayCount * 2 + index - 2;
}
else {
i = result.CurrentPageIndex - displayCount + index - 2;
b = result.CurrentPageIndex - displayCount - 1;
e = result.CurrentPageIndex + displayCount + 1;
}
if ($(this).get(0).id == $(this).text()) {
$(this).text(i);
}
else if (index == 1) {
if (b <= 1) {
$(this).get(0).id = 1;
}
else {
$(this).get(0).id = b - 1;
}
}
else if (index == displayCount * 2 + 3) {
$(this).get(0).id = e;
}
$(this).attr("href", "#");
if ((i >= b) && (i <= e)) {
$(this).get(0).id = i;
}
if ($(this).text == result.CurrentPageIndex) {
$(this).removeAttr("href");
}
});
currentIndex = result.CurrentPageIndex;
}

html代码


<form runat="server" id="form1">
<div>
<asp教程:Repeater ID="rptBooks" runat="server">
<HeaderTemplate>
<table id="Books" width="90%" cellspacing="0" style="font-size:12px;">
<tr>
<th>
书名
</th>
<th>
作者
</th>
<th>
类别
</th>
<th width="30px">
</th>
<th width="30px">
</th>
</tr>
<tbody id="Data">
<tr>
</HeaderTemplate>
<ItemTemplate>
<td class="Title">
<%# Eval("Title") %>
</td>
<td class="Author">
<%# Eval("Author") %>
</td>
<td class="CategoryName">
<%# Eval("Categories.Name")%>
</td>
<td>
<a href="#" id='<%# Eval("Id") %>' class="delBook">删除</a>
</td>
<td>
<a href='BookDetail/<%# Eval("Id") %>' class="details">详细</a>
</td>
</ItemTemplate>
<SeparatorTemplate>
</tr><tr>
</SeparatorTemplate>
<FooterTemplate>
</tr></tbody>
<tr>
<td colspan="3">
<cc1:PageBar ID="PageBar1" runat="server" PageCount="100" DisplayCount="5" PageIndex="1" />
<input type="text" id = "CI" />
</td>
</td>
</tr>
</table>
</FooterTemplate>
</asp:Repeater>
</div>
</form>
ajax 返回数据


{"Data":[{"Title":"C#.NET程序设计——国外计算机科学经典教材","CategoryName":".NET","Author":"布拉德利(Bradley,J.C.),米尔斯波(Millspaugh,A.C.) 著, 天宏工作室 译","Id":5392},{"Title":"C#2.0〔宝典)(附盘)","CategoryName":"C C++ VC VC++","Author":"张立 编著","Id":5027},{"Title":"C#2.0完全自学手册(附CD)","CategoryName":"C C++ VC VC++","Author":"张立 等编著","Id":5081},{"Title":"C#2005数据库教程编程经典教程","CategoryName":"C C++ VC VC++","Author":"(美)沃顿(Karli watton) 著,陈秋萍 译","Id":4983},{"Title":"C#程序设计教程——计算机基础课程系列教材","CategoryName":"C C++ VC VC++","Author":"郑阿奇,梁敬东 主编","Id":5127},{"Title":"C#程序员参考手册","CategoryName":"C C++ VC VC++","Author":"Grant Palmer 著,康博 译","Id":5132},{"Title":"C#和.NET核心技术——开发人员专业技术丛书","CategoryName":"C C++ VC VC++","Author":"(美)佩里(Perry,S.C.) 著,肖斌 等译","Id":5104},{"Title":"C#基础与实例教程(附CD-ROM光盘一张)","CategoryName":"C C++ VC VC++","Author":"郝春强 编著","Id":5071},{"Title":"C#软件项目开发全程剖析","CategoryName":"C C++ VC VC++","Author":"(德)侯姆,(德)克鲁格,(德)斯普达 著,薛兴涛,袁勤勇 译","Id":5034},{"Title":"C#设计模式——开发大师系列","CategoryName":"C C++ VC VC++","Author":"(美)麦斯科 著,颜炯 译","Id":4954}],"CurrentPageIndex":15,"PageCount":1074}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Reflection;
using System.IO;
[assembly: WebResource("PageBarJS.js", "application/x-javascript教程")]
namespace Hawkon.Control {
[DefaultProperty("Text")]
[ToolboxData("<{0}:PageBar runat=server></{0}:PageBar>")]
public class PageBar : WebControl {
[Bindable(true)]
[Category("Data")]
[DefaultValue("1")]
[Localizable(true)]
public int PageIndex {
get {
return pageIndex;
}
set {
pageIndex = value;
}
}
private int pageIndex;
[Bindable(true)]
[Category("Data")]
[DefaultValue("1")]
[Localizable(true)]
public int PageCount {
get {
return pageCount;
}
set {
pageCount = value;
}
}
private int pageCount;
[Bindable(true)]
[Category("Data")]
[DefaultValue("5")]
[Localizable(true)]
public int DisplayCount {
get {
return displayCount;
}
set {
displayCount = value;
}
}
private int displayCount;
protected override void RenderContents(HtmlTextWriter output) {
string html = "";
html += CreateA(1, "<<");
int b = 0, e = 0;
if (pageIndex <= displayCount) {
b = 1;
e = displayCount * 2 + 1;
}
else if (pageIndex > pageCount - displayCount) {
b = pageCount - displayCount * 2;
e = pageCount;
}
else {
b = pageIndex - displayCount;
e = pageIndex + displayCount;
}
if (b <= 1) {
html += CreateA(1, "");
}
else
html += CreateA(b - 1, "");
for (int i = b; i <= e; i++) {
html += CreateA(i, i.ToString());
}
html += CreateA(e + 1, "");
html += CreateA(pageCount, ">>");
// html += string.Format("<script src='{0}' type='text/javascript'></script>",
// this.Page.ClientScript.GetWebResourceUrl(typeof(PageBar), "JScript1.js"));
output.Write(html);
}
private string CreateA(int pageIndex, string text) {
if (pageIndex == this.pageIndex) {
return string.Format("<a class="pageA" title='页' id ="{0}">{1}</a> ", pageIndex, text);
}
return string.Format("<a class="pageA" title='页' href="#" id="{0}">{1}</a> ", pageIndex, text);
}
protected override void OnPreRender(EventArgs e) {
base.OnPreRender(e);
string resourceName = "PageBarJS.js";
string url = this.Page.ClientScript.GetWebResourceUrl(this.GetType(), "PageBarJS.js");
string script = " <script src="" + HttpUtility.HtmlAttributeEncode(url) + "" type="text/javascript"></script>";
this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), resourceName, script, false);
script = @"<script type=""text/javascript"">$(document).ready(function() {InitPageBar(5, ""BookListByPage"", ""Books "", 50,""pageA"");});</script>"; this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "ready", script);
}
protected override void Render(HtmlTextWriter writer) {
base.Render(writer);
}
}
}

<?php教程
if($_POST['password']!=$_POST['repassword'])
{
//不执行存储
exit;
}
$conn=mysql教程_connect("localhost","root","123");
mysql_select_db("db_register");
$sql="insert into tb_register(reg_loginid,reg_name,reg_id,reg_password,reg_sex,reg_address)
values('".$_POST['login']."','".$_POST['name']."','".$_POST['id']."','".$_POST['password']."','"
.$_POST['sex']."','".$_POST['address']."')";
if(mysql_query($sql,$conn))
{
echo "注册成功";
}
else
{
echo "注册失败";
}
mysql_close($conn);
?>

<html>
<head>
<title>注册</title>
<link rel="stylesheet" type="text/css教程" href="../ext/resources/css/ext-all.css" />
<script type="text/javascript教程" src="../ext/adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="../ext/ext-all.js"></script>
<script type="text/javascript" src="register.js"></script>
</head>
<body>
</body>
</html>

数据库教程结构


create database db_register;
create table db_register.tb_register(
reg_loginid varchar(20) primary key,
reg_name varchar(20) not null,
reg_id int not null,
reg_password varchar(20) not null,
reg_sex varchar(2),
reg_address varchar(50)
);

extjs文件


Ext.onReady(function() {
function registerhandler(){
var values = Ext.getCmp("form").getForm().getValues(); //获取form里textfield、radio等值
Ext.Ajax.request({
url: 'save.php',
success: function() {Ext.Msg.alert("success");},
method: "post",
failure: function(){Ext.Msg.alert("failure");},
params: values
});
}
var form = new Ext.form.FormPanel({
id: 'form',
baseCls: 'x-plain',
layout:'absolute',
url:'save-form.php',
defaultType: 'textfield',
items: [{
x: 0,
y: 0,
xtype:'label',
text: '登录帐户:'
},{
x: 80,
y: 0,
name:'login',
anchor:'100%'
},{
x: 0,
y: 30,
xtype:'label',
text: '用户姓名:'
},{
x: 80,
y: 30,
name:'name',
anchor: '100%',
},{
x:0,
y:60,
xtype:'label',
text:'身份证号:'
},{
x:80,
y:60,
name:'id',
anchor:'100%',
},{
x:0,
y:90,
xtype:'label',
text:'用户密码:'
},{
x:80,
y:90,
inputType:'password',
name:'password',
anchor:'100%',
},{
x:0,
y:120,
xtype:'label',
text:'密码确认:',
},{
x:80,
y:120,
name:'repassword',
inputType:'password',
anchor:'100%',
},{
x:80,
y:150,
xtype:'radio',
name:'sex',
fieldLabel:'性别',
boxLabel:'男',
inputValue:'b' //radio的取值为:b
},{
x:0,
y:152,
xtype:'label',
text:'性别:'
},{
x:140,
y:150,
xtype:'radio',
name:'sex',
fieldLabel:'性别',
boxLabel:'女',
inputValue:'g' //radio的取值为:g
},{
x:0,
y:180,
xtype:'label',
text:'用户住址'
},{
x:80,
y:180,
name:'address',
anchor:'100%'
}]
});
var window = new Ext.Window({
title: '注册帐户',
width: 400,
height:300,
minWidth:400,
minHeight: 300,
layout: 'fit',
plain:true,
bodyStyle:'padding:5px;',
buttonAlign:'center',
items: form,
buttons: [{
text: '注册',
handler:registerhandler
},{
text: '取消'
}]
});
window.show();
});

function list_tables($database)
{
    $rs = mysql_list_tables($database);
    $tables = array();
    while ($row = mysql_fetch_row($rs)) {
        $tables[] = $row[0];
    }
    mysql_free_result($rs);
    return $tables;
}

$database='';//数据库名
$options=array(
    'hostname' => '',//ip地址
    'charset' => 'utf8',//编码
    'filename' => $database.'.sql',//文件名
    'username' => '',
    'password' => ''
);
mysql_connect($options['hostname'],$options['username'],$options['password'])or die("不能连接数据库!");
mysql_select_db($database) or die("数据库名称错误!");
mysql_query("SET NAMES '{$options['charset']}'");
$tables = list_tables($database);

[!--infotagslink--]

相关文章

  • JavaScript 垃圾回收机制分析

    在公司经常会听到大牛们讨论时说道内存泄露神马的,每每都惊羡不已,最近精力主要用在了Web 开发上,读了一下《JavaScript高级程序设计》(书名很唬人,实际作者写的特别好,由浅入深)了解了一下JavaScript垃圾回收机制,对内存泄露...2013-10-13
  • 理解js回收机制通俗易懂版

    这篇文章主要帮助大家更好的理解js回收机制,通俗易懂,便于大家理解,感兴趣的小伙伴们可以参考一下...2016-03-01
  • c#如何用好垃圾回收机制GC

    这篇文章主要介绍了c# 如何用好垃圾回收机制GC,帮助大家更好的理解和学习c#,感兴趣的朋友可以了解下...2020-11-03
  • Python析构函数__del__定义原理解析

    这篇文章主要介绍了Python析构函数__del__定义原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-20
  • C#垃圾回收机制的详细介绍

    这篇文章详细介绍了C#垃圾回收机制,有需要的朋友可以参考一下...2020-06-25
  • 一篇文章带你了解JVM垃圾回收

    这篇文章主要介绍了JVM的种垃圾回收,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-08-15
  • python垃圾回收机制(GC)原理解析

    这篇文章主要介绍了python垃圾回收机制(GC)原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-05-08
  • 浅谈关于C#的垃圾回收机制

    浅谈关于C#的垃圾回收机制,需要的朋友可以参考一下...2020-06-25
  • C# 的析构以及垃圾回收实例分析

    这篇文章主要介绍了C# 的析构以及垃圾回收实例分析的相关资料,需要的朋友可以参考下...2020-06-25
  • apache下屏蔽福建莆田的垃圾评论并阻止访问

    2014年开年,我的小网站就被来自福建莆田的大量垃圾IP地址疯狂的刷站,每分钟几十次的流量,写入大量垃圾评论。查了一下网上的消息,很多小博客和论坛都被狂刷,而且都是来自福建莆田...2016-01-28
  • 浅谈MySQL表空间回收的正确姿势

    随着时间的推移,表里面的数据越来越多,表数据文件越来越大,数据库占用的空间自然也逐渐增长,本文主要介绍了MySQL表空间回收,感兴趣的可以了解一下...2021-09-29
  • 详解PHP垃圾回收机制教程

    本文我们来详谈PHP垃圾回收机制,本教程是在PHP 5.3的新垃圾回收机制的特点,这种垃圾回收机制,大大改变内存泄漏问题难以解决的问题。 这部分将说明PHP 5.3的新的垃圾...2016-11-25
  • PHP垃圾回收机制详解

    PHP 可以自动进行内存管理,清除不再需要的对象。PHP使用了引用计数(reference counting)这种单纯的垃圾回收(garbage collection)机制。每个对象都内含一个引用计数器,...2016-11-25
  • PHP线程的内存回收问题

    本文给大家介绍的是PHP线程的内存回收问题,方便大家理解内存回收的机制,推荐给大家。...2016-07-25
  • IIS 6.0 应用程序池回收和工作进程使用介绍

    这篇文章主要介绍了IIS 6.0 应用程序池回收和工作进程介绍,需要的朋友可以参考下...2016-01-27
  • C#开发中的垃圾回收机制简析

    这篇文章主要介绍了C#开发中的垃圾回收机制,需要的朋友可以参考下...2020-06-25
  • Python小白垃圾回收机制入门

    在本篇文章里小编给大家分享的是关于Python小白垃圾回收机制入门的相关知识点,需要的朋友们可以参考下。...2020-06-10
  • .net非托管资源的回收方法

    这篇文章主要介绍了.net非托管资源的回收方法,以实例形式详细分析归纳了.net非托管资源的两种回收方法,具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-22
  • Go语言七篇入门教程七GC垃圾回收三色标记

    这篇文章主要为大家介绍了Go语言教程关于GC垃圾回收三色标记的示例详解,本篇文章是Go语言七篇入门教程系列文章,有需要的朋友可以借鉴参考下,希望能够有所帮助...2021-11-10
  • 关于C++为什么不加入垃圾回收机制解析

    C++为什么不加入垃圾回收机制呢?现在肯定还有很多人不太了解,不过没关系,下面小编就为大家详细的介绍下究竟C++为什么不加入垃圾回收机制。一起跟随小编过来看看吧...2020-04-25