LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1508|回复: 5

请大家帮我检查一下我写的PHP代码,万分感谢!

[复制链接]
发表于 2007-5-20 07:41:49 | 显示全部楼层 |阅读模式
我用这些代码开发了几十个项目了,但现在有一个网站在访问量稍大一些的情况下出了
问题,就是占用内存过多,以及连接数过等问题.所以想请大家帮我分析下我的编程方式是否
有问题,多谢了,相信中国PHP界的高人都在LINUXSIR.


我先贴一个完整运行的页面程序的代码:

[PHP]
<?php

include_once("db.php");

//  注:给论坛上的朋友解释:上面这行代码包含了一个数据库连接文件,里面有连接数
据库的语句和用户名以及密码,具体这个文件的内容,我下面会贴出代码。





$query = "select * from member where tid='$_COOKIE[mid]' and md5(password)='$_COOKIE[password]' " ;
$result = mysql_db_query($DataBase, $query);
$login=0;

if($r = mysql_fetch_array($result))
{
$login=1;
}


if($login==0)
{
include_once("loginalltwo.php");
exit;
}

//上面语句判断会员登录情况,login=0表示登录,为1表已经登录,其中:$_COOKIE[mid] 记录
会员登录后的id,      $_COOKIE[password]记录会员登录后加密后的密码,之所以这样做,是
为了防止伪造COOKIE的现象,而这种方式要想伪造别人COOKIE登录的话,就要先知道别人的
密码,所以解决了伪造COOKIE登录的问题。

//所以上段代码也就是从使用者电脑里面找COOKIE和服务器数据库里面的用户名和密码进行
匹配,如果匹配成功,则说明正确登录,如匹配失败,则说明错误登录。

//另外,我用了一个变量记录登录状态,以备后面使用,$login=0,表示为游客访问,$login=1表示
为正式会员访问,如果是游客访问,我则包含一个loginalltwo.php  这是一个会员登录的界面。
?>

<?php



if(empty($_GET[tid])){$_GET[tid]=$r[tid]; }

//如果传递的会员ID值为空的话,则ID值为已登录的会员ID值

$result = mysql_db_query($DataBase,"select * from member   where tid='$_GET[tid]'  ");
//根据ID传值找出会员信息。
if($r3 = mysql_fetch_array($result))
{
if($r3[tid]!=$r[tid] and $login==1)
{
$looktime=time();
$sql = "delete from look   where member='$r3[tid]' and lookmember='$r[tid]'  ";
$rr = mysql_db_query($DataBase, $sql);

$query = "INSERT INTO look (member,lookmember,looktime) VALUES ('$r3[tid]','$r[tid]','$looktime')";

$result = mysql_db_query($DataBase, $query);
}
}
//上面几行代码,记录浏览页面的会员,也就是谁什么时间看过谁的页面,记录到数据库中。
if($r3[s1]!='')
{
echo "<META HTTP-EQUIV=REFRESH CONTENT='0;URL=ask/teacherhome.php?tid=$r3[tid]'>";

exit;
}

//上面代码是我判断用户身份的,如果是另外一种属性的身份,则网页跳转到另一个页面,程序退出。

if($r3[x2]==0)
{
$myschool="默认社区";
$myschoolid=1716;
}else
{
$result = mysql_db_query($DataBase,"select * from school where tid='$r3[x2]'   ");
$r6 = mysql_fetch_array($result);
$school=$r6[name];
$myschool=$r6[name];
$myschoolid=$r6[tid];
}
//上面代码根据会员所属的ID号,找出会员所属的社区问题,因为有几千个社区,所以要找出该会员所属的社区信息。

$query = "select count(tid) from look  where  member='$r3[tid]'   ";
$result2 = mysql_db_query($DataBase, $query);
$rr2 = mysql_fetch_array($result2);
//上面这行代码,求出有多少人看过该会员的页面


$query= "update member  set homeviews=homeviews+1 where tid='$_GET[tid]'  ";
$result = mysql_db_query($DataBase, $query);


//将被查看会员的页面浏览次数加1
?>




<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>会员资料页面</title>
<link href="css/style.css" rel="stylesheet" type="text/css">



</head>

<body>
<?php
include_once("toptwo.php");
//这行代码包含网站顶部文件,不含PHP代码,只有HTML
?>
<table width="950" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td width="210" align="left" valign="top"> <?php
          include_once("lefttwo.php");
         //这行代码包含网站左侧文件,该文件具体代码我在下面会列出来
          ?></td>
    <td width="740" align="left" valign="top">
                </td>
              </tr>
            </table>
            
          </td>
          <td width="240" align="left" valign="top">
          </td>
        </tr>
      </table>
    </td>
  </tr>
</table>
<?php
include_once("bottomtwo.php");
//这行代码包含网站底部文件,不含PHP代码,只有HTML
?>
</body>
</html>
[/PHP]


注:上面是一个web2.0社区网站中,显示会员资料和记录会员的一些站内活动的页面.在这个页面程序里面总共用了5个

include_once()用来包含外部文件.

具体包含的外部文件的功能,我在代码注释里面写过了,请大家看看














下面我把包含的含有PHP代码的两个文件贴出来.

一,db.php
内容如下:
[PHP]
<?php
$db=mysql_connect('localhost','dataone','123321') or die ("roblem connecting to DataBase");
$DataBase="dataone";
?>
[/PHP]

二,lefttwo.php
内容如下:
[PHP]
<?php

include_once("db.php");
$query = "select * from member where tid='$_COOKIE[mid]' and md5(password)='$_COOKIE[password]' " ;
$result = mysql_db_query($DataBase, $query);
$login=0;

if($r = mysql_fetch_array($result))
{
$login=1;
}


//上面语句判断会员登录情况,login=0表示登录,为1表已经登录,其中:$_COOKIE[mid] 记录会员登录
后的id,      $_COOKIE[password]记录会员登录后加密后的密码,之所以这样做,是为了防止伪造COOKIE的现
象,而这种方式要想伪造别人COOKIE登录的话,就要先知道别人的密码,所以解决了伪造COOKIE登录的问题。

//所以上段代码也就是从使用者电脑里面找COOKIE和服务器数据库里面的用户名和密码进行匹配,如果匹配成功,
则说明正确登录,如匹配失败,则说明错误登录。

//另外,我用了一个变量记录登录状态,以备后面使用,$login=0,表示为游客访问,$login=1表示为正式会员访问,
如果是游客访问,我则包含一个loginalltwo.php  这是一个会员登录的界面。
if($login==1)
{
echo"已登录";
}else
{
echo"未登录";
}
?>
[/PHP]



以上所有代码是一个页面程序所所有架构及实现方法,请大家帮我分析一个我写的这些代码有什么影响PHP程序性能的地方吗?

尤其是在内存管理以及释放方面,

以及在MYSQL操作方式的方面,

在文件的包含方面等等.

再次感谢!
发表于 2007-7-20 12:48:10 | 显示全部楼层
你关闭数据库链接的代码在那里。
还有就是我不赞成直接使用结果集!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-7-21 09:37:11 | 显示全部楼层
Post by joliny
你关闭数据库链接的代码在那里。
还有就是我不赞成直接使用结果集!


非常感谢!

如果需要用 msql_close();来关闭一下连接的话,我以后会加上的,但以前从来没有加过,程序运行好象也没什么事情,呵呵.

不使用结果集的,是不是说,先把结果集读到一个数组里面,然后再用循环语句在下面输出呢?如果这样比较好的话,以后也这样做.

再次感谢!
回复 支持 反对

使用道具 举报

发表于 2007-7-21 09:37:18 | 显示全部楼层
看别人的代码,就是累.....................

老兄,好像没有用db class
都是用原始的mysql_query
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-7-21 09:39:53 | 显示全部楼层
Post by freesu
看别人的代码,就是累.....................

老兄,好像没有用db class
都是用原始的mysql_query


是啊,我没有用任何类来做数据库操作,都是用最底层的函数来做的,因为我觉得这样做的话程序运行速度会快一些.不知道有什么不妥的地方,还请指出,多谢了.
回复 支持 反对

使用道具 举报

发表于 2007-7-24 10:59:33 | 显示全部楼层
再次强调一遍,mysql_close会在页面加载完毕后自动调用,不需要手动调用


按你的说法,更多的问题是出在mysql服务器上面
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表