关于由php小tip引发的思考的信息

  • 1、PHP小问题,一个留言功能
  • 2、php 可以做哪些有趣的小东西
  • 3、淘宝网为什么是用PHP程序开发

第一全问题: mysubstr应该是代码编写者自己编写的一个函数,PHP系统并无此函数,不过从字面上来看,应该是截取$Qinfo变量的头250个符.

第二个问题: 这种调用属于类调用,要么是代码编写者自己封装了一个用于操作数据库的PHP类,要么就是使用了第三方封装的类.

1.得到客户端IP地址

function getip(){

if (! empty($_SERVER[“HTTP_X_FORWARDED_FOR”])){ //使用代理的情况

$tip = split(“,”, $_SERVER[“HTTP_X_FORWARDED_FOR”]);

$cip = $tip[0];

}

else

$cip = $_SERVER[“REMOTE_ADDR”];[

return dechex(ip2long($cip));

}

2.session控制的函数

function session_begin(){

global $userid, $sid, $ip, $session, $db, $islogin;

$ip = getip();

/* 短期而言,系统默认需要支持cookie. */

if (!isset($_COOKIE[‘userid’])) return false;

else $userid = $_COOKIE[‘userid’];

if (!isset($_COOKIE[‘sid’])) return false;

else $sid = $_COOKIE[‘sid’];

/* 以上返回false意味着用户没有登陆,页面将跳转至首页(登陆页). */

$query = “SELECT * FROM user WHERE nickname = ‘$userid'”;

$result = $db-sql_query($query);

if ($row = $db-sql_fetchrow($result)){

if ($row[‘sid’] != $sid) return false; /* cookie传送的sid和数据库保存的不吻合 */

if ($row[‘lastloginip’] != $ip) return false; /* IP不吻合 */

/* 是否要考虑 session的过期 问题呢? */

}

else return false; /* 没有这个userid */

$session = $row;

// $session[”] = $row[”];

unset($row);

$islogin = true;

return true;

}

/* bool session_end(int $userid, string $sid) */

function sesssion_end($userid, $sid){

return true;

}

3.做选美的投票程序

?php

header(“Refresh:0;url=./”); //一秒刷新

?

scriptalert(‘?php

require_once(‘mysql.php’);

require_once(‘functions.php’);

$db = new sql_db(‘localhost’,’root’,”,’selectmm’);

$user_id = $_GET[‘user_id’];

$ip = getip();

$deltime = time()-3600; //减去一小时

$sql = “delete from vote where time $deltime”; //删除掉过期的数据

$db-sql_query($sql);

$sql = “select ip from vote where ip=’$ip’ and user_id=’$user_id'”; //查看一小时内是否投过

$linkid=$db-sql_query($sql) or die(mysql_error());

$count=$db-sql_affectedrows();

if($count)

{

echo “您已经投过票了!”;

}

else

{

$sql = “update user set vote_count=vote_count+1 WHERE user_id=’$user_id'”;

$db-sql_query($sql);

$count=$db-sql_affectedrows();

if($count)

{

echo “投票成功!”;

$sql = “insert into vote (`ip`,`user_id`,`time`) values (‘$ip’,’$user_id’,'”.time().”‘)”;//投票成功就插入一条记录。

$db-sql_query($sql);

}

else

{

echo “投票失败!”;

}

}

?’);

//history.back();

/script

4.smarty的搜索程序

?php

require_once(‘mysql.php’);

$db = new sql_db(‘localhost’,’root’,”,’selectmm’);

require_once(‘functions.php’);

require_once(‘session.php’);

session_begin();

require(‘./Libs/Smarty.class.php’);

$smarty = new Smarty;

$title = “首页”;

$smarty-assign(“islogin”,$islogin);

$smarty-assign(“title”,$title);

$age=$_GET[‘age’];

$arr=explode(‘,’,$age);

$y=date(‘Y’);

$md=date(‘-m-d’);

$begin=($y-$arr[1]).$md;

$end=($y-$arr[0]).$md;

$sql=”select p.* from pic_info p,user u where p.user_id=u.user_id and u.birthday between ‘$begin’ and ‘$end’ group by u.user_id”;

$link=$db-sql_query($sql) or die(mysql_error());

$row = $db-sql_fetchrowset($link);

$db-sql_freeresult();

$smarty-assign(“pic”,$row);

$smarty-display(‘index.tpl.htm’);

?

5.注册程序

?

require(‘mysql.php’);

$str=new sql_db(‘localhost’,’root’,”,’selectmm’);

$METHOD = $_POST;

if (isset($METHOD[‘nickname’]) $METHOD[‘nickname’] != ”) $nickname = $METHOD[‘nickname’];

else { echo “scriptalert(“用户昵称不能为空.”)/script”; echo “scriptlocation=”register.php”/script”; }

if (isset($METHOD[‘password’]) strlen($METHOD[‘password’])=6) $password = $METHOD[‘password’];

else { echo “scriptalert(“密码至少6位”)/script”; echo “a href=’javascript:history.go(-2);'”; }

$password2 = $METHOD[‘password2’];

if ($password != $password2)

{ echo “scriptalert(“两次输入密码不一致”)/script”; echo “scriptlocation=”register.php”/script”; }

if (isset($METHOD[‘name’]) $METHOD[‘name’] != ”) $name = $METHOD[‘name’];

else { echo “scriptalert(“用户名不能为空.”)/script”; echo “scriptlocation=”register.php”/script”; }

$birthday=$METHOD[‘Year’].$METHOD[‘Month’].$METHOD[‘Day’];

$stature = $METHOD[‘stature’];

$astrology = $METHOD[‘astrology’];

$bloodtype = $METHOD[‘bloodtype’];

$goodat = $METHOD[‘goodat’];

$work = $METHOD[‘work’];

$educate = $METHOD[‘educate’];

$homeplace = $METHOD[‘homeplace’];

$address = $METHOD[‘address’];

$tel = $METHOD[‘tel’];

$qq = $METHOD[‘qq’];

if (isset($METHOD[’email’]) $METHOD[’email’] != ”) $email = $METHOD[’email’];

else { echo “scriptalert(“Email不能为空”)/script”; echo “scriptlocation=”register.php”/script”; }

if (!eregi(“^[0-9a-z.-_]+@[0-9a-z.]+.[a-z]$”,$email)) { echo “scriptalert(“电子邮件格式不合法”)/script”; echo “scriptlocation=”register.php”/script”; }

$dian =$METHOD[‘dian’];

if (isset($METHOD[‘myself’]) $METHOD[‘myself’] != ”) $myself = $METHOD[‘myself’];

else { echo “scriptalert(“用…..不能为空”)/script”; echo “scriptlocation=”register.php”/script”; }

if(isset($METHOD[‘enounce’]) $METHOD[‘enounce’]!=”)$enounce = $METHOD[‘enounce’];

else { echo “scriptalert(“…..不能为空”)/script”; echo “scriptlocation=”register.php”/script”; }

$query = “SELECT * FROM user WHERE nickname =’$nickname’ or email=’$email'”;

$result = $str-sql_query($query)or die(mysql_error()); ;

if ($row = $str-sql_fetchrow($result))

{ echo “scriptalert(“对不起,该用户已经注册”)/script”; echo “scriptlocation=”register.php”/script”; }

$password = md5($password);

$query = “INSERT INTO `user` (`nickname`,`password`,`name`,`birthday`,`astrology`,`bloodtype`,`stature`,`goodat`,`work`,`educate`,`homeplace`,`address`,`tel`,`email`,`qq`,`dian`,`myself`,`enounce`) VALUES(‘$nickname’,’$password’,’$name’,’$birthday’,’$astrology’,’$bloodtype’,’$stature’,’$goodat’,’$work’,’$educate’,’$homeplace’,’$address’,’$tel’,’$email’,’$qq’,’$dian’,’$myself’,’$enounce’)”;

if($str-sql_query($query))

$str-sql_close();

echo “scriptalert(“恭喜你,注册成功”)/script”;

echo “scriptlocation=”login.php”/script”;

?

6.提交参数 JS控制

echo “tda href=’delete.php?nickname=’ onclick=”return confirm(‘确定删除吗?rn此操作不可恢复’)”font color=red删除该用户/font/a/td”;

7.在给同事做一个文本处理,两个文档一个有7万条记录,开始用嵌套循环,php死了,后面用数组解决了问题

?php

if(($fp=fopen(“1.txt”,”a+”))===false)

{

die(“打开文件失败”);

}

$data1=file(“old.txt”) or die(“打开文件失败”);

$data2=file(“sports.txt”) or die(“打开文件失败”);

foreach($data1 as $data)

{

$x = split(“[./]”,$data);

$name = $x[count($x)-2];

$a[$name][‘md5’]=$data;

}

foreach($data2 as $data)

{

$x = split(“[,./]”,$data);

$name = $x[count($x)-2];

if(isset($a[$name]))

$a[$name][‘name’]=$x[0];

}

foreach($a as $value)

{

$str=$value[‘md5′].’,’.$value[‘name’];

fwrite($fp,$str);

echo $value[‘md5′].’,’.$value[‘name’].”br”;

fwrite($fp,$str);

}

?

8.验证码

?php

/*

* Filename:authimg.php

*/

Header(“Content-type:image/PNG”);

session_start();

$auth_num = “”;

/*创建一个基于调色板的图像*/

$im = imagecreate(63, 20);

/*初始化一个随机种子*/

srand((double)microtime() * 1000000);

$auth_num_k = md5(rand(0, 9999));

$auth_num = substr($auth_num_k, 17, 5);

/*赋值会话变量*/

$_SESSION[‘authnum’] = $auth_num;

$black = ImageColorAllocate($im, 0, 0, 0);

$white = ImageColorAllocate($im, 255, 255, 255);

$gray = ImageColorAllocate($im, 200, 200, 200);

ImageFill($im, 63, 20, $black);

imagestring($im, 5, 10, 3, $auth_num,$gray);

for ($i = 0;$i 200;$i++){

$randcolor = ImageColorallocate($im, rand(0,255), rand(0,255), rand(0,255));

imagesetpixel($im, rand()%70, rand()%30, $randcolor);

}

ImagePNG($im);

ImageDestroy($im);

?

从用户的角度讲:PHP的开发成本低,速度较快,比用ASP和JSP的开发性价比高。 从技术的角度讲: PHP是一个很优秀的工具,它可以简单,也可以复杂。不一样的项目,应该用不一样的PHP。小项目 – 简单而直接的PHP 一般对于一个功能页面在20以下的网站,我们可以用一个很简单的框架结构来写。在这个规模上,我建议是使用比较直接的面向过程编码方法,原因很简单,没有必要把class文件弄的N 多,结果controller里边就一个new就完了。当然,需求频繁变化的项目除外。

在这个级别上,php优点表现的很明显:快速开发,一目了然。缺点同时也被隐藏得很好。 中型项目 – 结构优美的面向对象化的PHP 对于一个中型项目,我建议使用一个良好设计的框架来做,这个框架可以是基于MVC模型,封装了众多底层操作的,当然,一定要有一个好的最好是透明的cache机制,这样,我们为了适应变化而加入的OO机制可以运行得更快更好。 在这个级别上。php的缺点开始凸现,像对OO支持的不完整(这个PHP5有很大改进),只能单线程模式。另外一些外围工具开始出现缺乏支持,像PHP没有好的重构工具,没有好的集成到IDE中的单元测试工具。优点当然还是原来的快速开发,广泛的可用的开源资源。 大型项目 – 扩展、优化后的PHP 这里的大型项目,简单的指分布式项目,就是说,你的程序需要被部署在N台服务器上了。在这个层级上,PHP比起J2EE的确缺乏很多支持。我曾和shadow在735上详细讨论过PHP要在大型系统上应用需要解决的一些问题,当然这些问题不光是PHP这个语言的问题,也包括了周边开发的问题: 1 PHP的页面代码共享,PHP的源代码被载入内存一次以后,就在其中保留 – 这个用APC和Zend的优化器可以搞定。 2 PHP页面之间的数据对象共享,a.php和b.php之间可以共享一个数据对象,比如数组,这个现在可以用序列化来作,但是会有文件io,这块可以用共享内存或者memcached来处理。 3 PHP的数据库连接池,因为在多前端的情况下,PHP控制不住对数据库的连接,所以需要在数据库前边去作一个连接池,类似于sqlrelay的东西。另外数据缓存也是很重要的,大压力开发有一个tip,就是能不动数据库就不要动数据库。 4 PHP的前端cache系统。一个透明的可控制的cache机制,确保网站的页面以最少次数查询数据库。这个有很多实现,但是没有找到特别好的。 5 一个PHP应用,成功的解决调这几个问题以后,应付稍微大一点的压力是没有什么问题的。 在这个级别上,重要的是,把PHP Java C++ python之类融合起来,使其成为一个高效系统。我们可以用memcached来做分布式内存管理,可以用Lucene 来作全文检索,用EJB 容器来放一些业务逻辑组件,PHP则作为前端和系统的胶水,快速而灵活的把这些粘合起来。

原创文章,作者:简单一点,如若转载,请注明出处:https://www.506064.com/n/127038.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
简单一点的头像简单一点
上一篇 2024-10-03 23:13
下一篇 2024-10-03 23:13

相关推荐

  • Docker-Compose下载详解

    随着云计算的高速发展,Docker作为一种轻量级的容器化解决方案,受到了越来越多的关注和应用。Docker-Compose是Docker的一个工具,它能够帮助我们快速地定义和运行多…

    编程 2024-11-12
  • Vue数组里面添加数组

    一、从Vue中数组里面的数组怎么拿 在Vue中,可以通过双括号绑定方式来循环数组中的数组,也可以通过v-for指令循环展开多层数组。 <!– 双括号绑定方式 –> …

    编程 2024-12-01
  • 用Linux AR技术提升实时场景增强体验

    一、AR技术的介绍 AR (增强现实) 技术指的是通过增强现实技术将虚拟数字内容通过手机、电脑等设备,与现实世界中的物体进行交互。AR 技术已经被广泛应用于游戏、教育、医疗等诸多领…

    编程 2024-11-14
  • Vimplug:让你的Vim编辑器功能更强大

    硬核程序员经常使用Vim来编辑代码,但如果你是一个新手,可能还不太了解Vim编辑器的强大功能。今天我要向大家介绍一个非常好用的插件——Vimplug,它可以让你的Vim编辑器功能更…

    编程 2024-11-15
  • 深入探究Java类加载机制

    一、概述 Java虚拟机(JVM)是运行Java程序的重要平台。在JVM中,类的加载、连接、初始化是Java程序运行的基础。在Java中,类是按需加载的,也就是在程序首次使用类的时…

    编程 2024-11-18
  • caxa实体设计快捷键设置,caxa自定义快捷键

    本文目录一览: 1、caxa实体设计如何用方向键 2、如何把CAXA的快捷键完全变成和CAD一样的快捷键? 3、CAXA快捷键? 4、CAXA实体2011中有哪些快捷键? caxa…

    编程 2024-11-23
  • 深入了解binlog2sql

    一、binlog2sql简介 binlog2sql是一个用于将MySQL binlog转换成SQL语句的工具。它可以将MySQL binlog中的所有DDL和DML语句转换为易读的…

    编程 2024-11-19
  • Android应用开发中如何使用代理实现网络请求

    一、代理是什么? 代理是一种网络应用程序,它代表客户端向服务器发送请求。当在客户端和服务器之间添加代理后,客户端将不直接通过服务器连接到目标服务器,而是将请求发送到代理,代理再把请…

    编程 2024-12-05
  • adb如何连接手机

    一、安卓不用adb如何连接手机 在某些情况下,我们不得不考虑安卓不使用adb但仍然需要连接手机。这时我们可以通过以下简单的步骤来连接手机: 1、使用USB数据线连接手机和电脑。 2…

    编程 2024-11-25
  • python的datetime.timedelta,Python的

    本文目录一览: 1、python中timedelta方法怎么用 2、python中datetime怎么用 3、python中时间序列数据的一些处理方式 4、python中时间的减法…

    编程 2024-12-07

发表回复

登录后才能评论