Classification:PHP&&Mysql

Classification (PHP&&Mysql)'s result:

phpstorm+phpstudy+xdebug配置

环境win7+phpstorm2018.3+phpstudy2016+php5.6.27-nts+apache   1. phpstudy开启xdebug扩展   2.修改php.ini: 结尾添加: [XDebug] xdebug.profiler_output_dir=”D:\phpStudy\tmp\xdebug” xdebug.trace_output_dir=”D:\phpStudy\tmp\xdebug” zend_extension=”D:\phpStudy\php\php-5.6.27-nts\ext\php_xdebug.dll”   xdebug.profiler_append = 0 xdebug.profiler_enable = 1 xdebug.profiler_enable_trigger = 0 xdebug.profiler_output_name = “cache.out.%t-%s” xdebug.remote_enable = 1 xdebug.remote_handler = “dbgp” xdebug.remote_mode = “req” xdebug.remote_host = “127.0.0.1” xdebug.remote_port = 9010 xdebug.idekey= PHPSTROM     phpstorm配置与phpstudy同步:    //如果只在phpstudy里面打开项目或者开发就填phpstudy路径就ok      3. 配置xdebug         4. 安装并开启浏览器插件xdebug helper   5. 调试

PHP伪协议总结

0x00 php://input //所有测试均allow_url_fopen=On,allow_url_include=On!!! php://input 是个可以访问请求的原始数据的只读流。 POST 请求的情况下,最好使用 php://input 来代替 $HTTP_RAW_POST_DATA,因为它不依赖于特定的 php.ini 指令。 而且,这样的情况下 $HTTP_RAW_POST_DATA 默认没有填充, 比激活 always_populate_raw_post_data 潜在需要更少的内存。 enctype=”multipart/form-data” 的时候 php://input 是无效的。 ——php.net 简单说就是获取post数据。 测试代码: <?php $d = file_get_contents(‘php://input’); //echo $d; @eval($d) ?> 文件包含变命令执行: 测试代码: <?php @include($_GET[“file”]); ?> 写一句话:   0x01 php://filter php://filter 是一种元封装器, 设计用于数据流打开时的筛选过滤应用。 这对于一体式(all-in-one)的文件函数非常有用,类似 readfile()、 file() 和 file_get_contents(), 在数据流内容读取之前没有机会应用其他过滤器。 ——php.net 简单说经常利用它进行base64编码,如 php://filter/read=convert.base64-encode/resource=file:///c:/windows/win.ini” 可以运用多种过滤器(字符串/转换/压缩/加密) 常用于读取文件/源码:   0x02 zip://,bzip2://,zlib:// zlib: 的功能类似 gzopen(),但是 其数据流还能被 fread() 和其他文件系统函数使用。 自 PHP 4.3.0 后这个不建议被使用,因为会和其他带“:”字符的文件名混淆; 请使用 compress.zlib:// 作为替代。 compress.zlib://、 compress.bzip2:// 和 gzopen()、bzopen() 是相等的。并且可以在不支持 fopencookie 的系统中使用。 ZIP 扩展 注册了 zip: 封装器。 自 PHP 7.2.0 和 libzip 1.2.0+ 起,加密归档开始支持密码,允许数据流中使用密码。 字节流上下文(stream contexts)中使用 ‘password’ 选项设置密码。 可选项 zlib://file.gz bzip2://file.bz2 zip://archive.zip#dir/file.txt ——php.net 简单说就是直接访问压缩包里的文件。 1. zip:// 将phpinfo.txt压缩成zip,实战中可以改后缀为jpg绕过上传限制。 http://192.168.43.173:8999/lsawebtest/phptest/phprotocol1.php?file=zip://C:/phpStudy/PHPTutorial/WWW/lsawebtest/phptest\phpinfo.jpg%23phpinfo.txt 注意要用绝对路径+url编码#   2. zlib:// http://192.168.43.173:8999/lsawebtest/phptest/phprotocol1.php?file=compress.zlib://C:/phpStudy/PHPTutorial/WWW/lsawebtest/phptest/phpinfo.txt.gz 改后缀为jpg亦可,相对路径亦可。   3. bzip2:// 同理于zlib://   0x03 data:// data://text/plain;base64, http://192.168.43.173:8999/lsawebtest/phptest/phprotocol1.php?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOyA/Pg== 不加//亦可。 也可以用来读php文件源码: data:text/plain,<?php system(‘cat /var/www/phprotocol1.php’)?> 或者命令执行: data:text/plain,<?php system(‘whoami’)?>   0x04 结语 ctf中常利用php伪协议,实战中或许会有奇效。 //图片来源:freebuf   0x05 参考资料 https://www.waitalone.cn/php-file-include.html www.freebuf.com/column/148886.html http://php.net/manual/zh/wrappers.php

lsacms_v1.0(php)正式开源

概述: 前段时间用thinkphp3框架写了个简单的cms,熟悉一下流行的thinkphp框架,练手项目,大牛绕过。 github地址:https://github.com/theLSA/lsacms_v1.0 欢迎pr。 环境: redhat6+mysql14.14+php5+apache2 功能简述: 三种角色: 学生:个人信息查询,个人课程查询,选课 教师:个人信息查询,个人开设课程查询,开课,删除课程,录入成绩,课程详情等 管理员:信息管理,课程查询,用户管理,管理员管理 两个入口:教师和学生入口index.php,管理员入口admin.php 更多功能请自行挖掘。 结语: 前端用了网上的一些模板,MVC模式,挺简单的项目,新手可以参考一下。

PHP+MYSQL中文乱码解决历程

问题描述: 1.php输出mysql里的中文数据出现乱码。 2.mysql存储中文数据乱码。 ******************************************* 乱码问题一般就是编码不统一,只要把各部分的编码统一就ok了,但是就是各部分编码统一很烦人,写php时就遇到上述问题,记录一下解决过程,供大家参考。 这里以统一utf-8编码为例: 1.网页显示编码声明为utf-8:<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ /> 2.保存的文件用utf-8编码:另存为-utf-8-replace 3.thinkphp的配置 ‘db-charset’ => ‘utf8’ 4,数据库编码改为utf8:mysql>alter database <数据库名> character set utf8; 5.数据库表名改为utf8:mysql>alter table <表名> character set utf8; (最好在创建库和表就设为utf8,不然可能还要改字段的编码) 首先保证上述5点编码统一! mysql> show variables like ‘character_set_database’;查看数据库编码 mysql> show create table <表名>;查看数据表编码 都是utf8没问题 但是看php输出的中文数据一直是乱码,看了网上的资料才发现cmd的编码是gbk,而我的中文数据是从cmd直接insert into的(在cmd中看正常不乱码),所以还是乱码,接着我从php添加中文数据,输出乱码问题解决! 由此引发新问题,当我在cmd中查看数据库中刚刚从php添加的中文数据又乱码了,而且一个中文就变成一个?号,其余正常。 先了解下相关知识: show variables like ‘character%’;查看当前数据库的相关编码集 client    为客户端使用的字符集。 connection    为连接数据库的字符集设置类型,如果程序没有指明连接数据库使用的字符集类型则按照服务器端默认的字符集设置。 database    为数据库服务器中某个库使用的字符集设定,如果建库时没有指明,将使用服务器安装时指定的字符集设置。 results    为数据库给客户端返回时使用的字符集设定,如果没有指明,使用服务器默认的字符集。 server    为服务器安装时指定的默认字符集设定。 system    为数据库系统使用的字符集设定。 猜想可能是由于mysql用utf8存储数据,而cmd用gbk编码,所以在cmd中看就乱码了,尝试set names gbk;改变connection,results,client的编码为gbk,再次查看还是乱码(而且问号更多了……)。 现在先在my.cnf中加入: [mysql] default-character-set=utf8 [mysqld] character-set-server=utf8 把connection,result,client都先设置为utf8。 发现中文乱码更奇怪了,但是用php新增的那个中文数据倒是没乱码了,以前用cmd新增的数据就是乱码(a…)。 感觉越来越乱了。 猜测可能是php用utf8新增数据而cmd新增的数据是gbk所以乱码,尝试用php再新增一条中文数据,结果发现php输出正常,在cmd中查看也正常,所以是cmd中用gbk insert into导致乱码,在cmd中再添加一条中文数据发现中文也正常了,真是神奇。 这个中文乱码问题真的非常烦人,不过勉强解决了文章开始的两个问题,先这样吧!

php留言板lsamsgboard_v1.0震撼发布!

初学php,写了这个简单的留言板,没弄前端,没用框架,关注于功能实现,后期有空再美化一下。 简介: 1.3种角色:未注册游客,已注册普通用户,管理员,利用session实现了简单的权限控制。 2.游客只有浏览留言的权限,普通用户可以发表/回复留言,并且可以删除自己的留言,管理员可以发表/删除/回复留言。 3.管理员有管理面板可以搜索注册用户,并且可以编辑/删除用户。 4.无限回复功能,并区分楼层,管理员可以删除回复。 5.实现了简单的分页。 更多功能请自行挖掘…… 项目地址:https://github.com/theLSA/lsamsgboard_v1.0/

(转) Mysql命令大全

本文转载自:http://www.cnblogs.com/zhangzhu/archive/2013/07/04/3172486.html 1、连接Mysql 格式: mysql -h主机地址 -u用户名 -p用户密码 1、连接到本机上的MYSQL。 首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root -p,回车后提示你输密码.注意用户名前可以有空格也可以没有空格,但是密码前必须没有空格,否则让你重新输入密码。 如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是: mysql> 2、连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令: mysql -h110.110.110.110 -u root -p 123;(注:u与root之间可以不用加空格,其它也一样) 3、退出MYSQL命令: exit (回车) 2、修改密码 格式:mysqladmin -u用户名 -p旧密码 password 新密码 1、给root加个密码ab12。 首先在DOS下进入目录mysql\bin,然后键入以下命令 mysqladmin -u root -password ab12 注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。 2、再将root的密码改为djg345。 mysqladmin -u root -p ab12 password djg345 3、增加新用户 注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符 格式:grant select on 数据库.* to 用户名@登录主机 identified by “密码” 1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用root用户连入MYSQL,然后键入以下命令: grant select,insert,update,delete on *.* to [email=test1@”%]test1@”%[/email]” Identified by “abc”; 但增加的用户是十分危险的,你想如某个人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为了,解决办法见2。 2、增加一个用户test2密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作(localhost指本地主机,即MYSQL数据库所在的那台主机),这样用户即使用知道test2的密码,他也无法从internet上直接访问数据库,只能通过MYSQL主机上的web页来访问了。 grant select,insert,update,delete on mydb.* to [email=test2@localhost]test2@localhost[/email] identified by “abc”; 如果你不想test2有密码,可以再打一个命令将密码消掉。 grant select,insert,update,delete on mydb.* to [email=test2@localhost]test2@localhost[/email] identified by “”; 4.1 创建数据库 注意:创建数据库之前要先连接Mysql服务器 命令:create database <数据库名> 例1:建立一个名为xhkdb的数据库 mysql> create database xhkdb; 例2:创建数据库并分配用户 ①CREATE DATABASE 数据库名; ②GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON 数据库名.* TO 数据库名@localhost IDENTIFIED BY ‘密码’; ③SET PASSWORD FOR ‘数据库名’@’localhost’ = OLD_PASSWORD(‘密码’); 依次执行3个命令完成数据库创建。注意:中文 “密码”和“数据库”是户自己需要设置的。 4.2 显示数据库 命令:show databases (注意:最后有个s) mysql> show databases;注意:为了不再显示的时候乱码,要修改数据库默认编码。以下以GBK编码页面为例进行说明:1、修改MYSQL的配置文件:my.ini里面修改default-character-set=gbk 2、代码运行时修改: ①Java代码:jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=gbk ②PHP代码:header(“Content-Type:text/html;charset=gb2312”); ③C语言代码:int mysql_set_character_set( MYSQL * mysql, char * csname); 该 函数用于为当前连接设置默认的字符集。字符串csname指定了1个有效的字符集名称。连接校对成为字符集的默认校对。该函数的工作方式与SET NAMES语句类似,但它还能设置mysql- > charset的值,从而影响了由mysql_real_escape_string() 设置的字符集。 4.3 删除数据库 命令:drop database <数据库名> 例如:删除名为 xhkdb的数据库 mysql> drop database xhkdb;例子1:删除一个已经确定存在的数据库 mysql> drop database drop_database; Query OK, 0 rows affected (0.00 sec)例子2:删除一个不确定存在的数据库 mysql> drop database drop_database;……

php pdo test

I did a php pdo test,firstly I created a database named pdotest,then I created a table named books and inserted some records for test.Finally I used pdo to get thoes records. <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”> <html xmlns=”http://www.w3.org/1999/xhtml”> <head> <meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ /> <title>pdotest</title> <style type=”text/css”> <!– body,td,th { font-size: 18px; } –> </style></head> <body bgcolor=”#FFFFFF” leftmargin=”0″ topmargin=”0″ marginwidth=”0″ marginheight=”0″> <table width=”400″ border=”0″ cellpadding=”0″ cellspacing=”0″> <tr> <td height=”30″ align=”center”><strong>id</strong></td> <td align=”center”><strong>bookname</strong></td> <td align=”center”><strong>bookprice</strong></td> <td align=”center”><strong>edit</strong></td> </tr> <?php $dbms=’mysql’; $host=’localhost’; $dbName=’pdotest’; $user=’root’; $pass=’root’; $dsn=”$dbms:host=$host;dbname=$dbName”; try { $pdo = new PDO($dsn, $user, $pass); $query=’select * from books’; $result=$pdo->prepare($query); $result->execute(); echo ‘errorcode:’.$pdo->errorCode(); echo ‘<br/>’; print_r($pdo->errorInfo()); while($res=$result->fetch(PDO::FETCH_ASSOC)){ ?> <tr> <td height=”22″ align=”center” valign=”middle”><?php echo $res[‘id’];?></td> <td align=”center” valign=”middle”><?php echo $res[‘bookname’];?></td> <td align=”center” valign=”middle”><?php echo $res[‘bookprice’];?></td> <td align=”center” valign=”middle”><a href=”#”>delete</a></td> </tr> <?php } } catch (PDOException $e) { die (“Error!: ” . $e->getMessage() . “<br/>”); } ?> </table> </td> </body> </html> If you want to see the error code when the sql is error,you should use $pdo->query($query) instead of prepare and……

php优化建议60点

//声明:此文是LSA参考网上文章整理而得 //参考链接:http://jingyan.baidu.com/article/a948d651432cb30a2dcd2ef8.html //http://www.ctolib.com/topics-21231.html //http://www.9sep.org/solution-php-problem-improve-performance   第一类、变量类型: 1)主要是使用未定义变量,而直接使用变量,做程序开发结束的时候,程序员都喜欢关闭debug,让一切 Notice和Warning都影藏起来,但实质上php即使关闭debug也会记录日志,将所有的Notice和Warning信息全 部写入日志文件中,无非是一件浪费性能的事,很多phper都有这个小习惯,包括我也一样。 2)另外在程序中应尽量注意变量的使用,如字符串最好使用单引号,而不是双引号,毕竟双引号还得PHP解析 为单引号在执行。 3)说到这里数组中的键值索引一样也需要用单引号,不要不写引号这样的程序执行效率极低。 第二类、函数类型: 1)SESSION变量,大家都知道调用SESSION这个全局变量,往往大家在将值放入SESSION之后,直接就往下接着 写自己的代码了,却忘记了SESSION变量会在页面执行完毕之后才会将值放入SESSION中供其他页面使用,这 样如果这个页面执行时间过长,其他页面也调用这个SESSION就会等待这个写入SESSION的页面执行完毕之后 ,再往后执行其他程序,但是我们的程序要的不是这样的效果,因为我们只需要将值写入SESSION执行之后, 就已经放在SESSION中了,而不是等待页面执行完毕,从PHP官网也能看到这个SESSION变量确实有这个问题, 因此我们需要在写入SESSION之后关闭写入SESSION操作,加上session_write_close()函数则可以减少等待页 面加载完毕的这些无用时间。 2)file_get_contents()函数,这个函数意思是获取远程URL的页面内容,但虽然这样写着,很多人都不会注 意这样一个问题”超时”,如果获取不到页面内容,程序将一直卡在这里,很多人会联系到设置页面超时或 者在php.ini文件中去设置max_execution_time最大执行超时时间,但如果使用的是php-fpm(也就是php-cgi )将对这个参数视为无效,而需要在php-fpm配置文件中设置最大执行超时时间,最终这样也无法起到作用, 需要解决这个问题,仍然需要我们在至调用该函数的时候加上超时时间,这样才能从根本上解决问题。 第三类、引用文件类型: 引用文件很多时间我们都习惯性的使用include ,但是这中间也隐含着一些使用技巧,如果经常使用框架开 发程序的人就很熟悉,项目项目下面会有”include”字样类型的文件夹,程序在查找包含文件的顺序先是在 当前工作目录根路径下include字样文件夹中下查找,然后再是当前该文件所在目录相对的include字样文件 夹中查找。也就是这个include使用不当,程序将会按照这个方式在根路径下面依次查找,这样同样是一件很 费解的事,所以大家应尽量将使用的文件写在最容易查找的位置,这样才有利于程序的执行效率。此外还有 像echo输出多个字符串或变量的函数,使用”.”连接效率要比”,”连接执行效率低。 1、如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍。 2、$row[’id’] 的速度是$row[id]的7倍。 3、echo 比 print 快,并且使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接,比如echo $str1,$str2。 4、在执行for循环之前确定最大循环数,不要每循环一次都计算最大值,最好运用foreach代替。 5、注销那些不用的变量尤其是大数组,以便释放内存。 6、尽量避免使用__get,__set,__autoload。 7、require_once()代价昂贵。 8、include文件时尽量使用绝对路径,因为它避免了PHP去include_path里查找文件的速度,解析操作系统路 径所需的时间会更少。 9、如果你想知道脚本开始执行(译注:即服务器端收到客户端请求)的时刻,使用$_SERVER [‘REQUEST_TIME’]要好于time()。 10、函数代替正则表达式完成相同功能。 11、str_replace函数比preg_replace函数快,但strtr函数的效率是str_replace函数的四倍。 12、如果一个字符串替换函数,可接受数组或字符作为参数,并且参数长度不太长,那么可以考虑额外写一 段替换代码,使得每次传递参数是一个字符,而不是只写一行代码接受数组作为查询和替换的参数。 13、使用选择分支语句(译注:即switch case)好于使用多个if,else if语句。 14、用@屏蔽错误消息的做法非常低效,极其低效。 15、打开apache的mod_deflate模块,可以提高网页的浏览速度。 16、数据库连接当使用完毕时应关掉,不要用长连接。 17、错误消息代价昂贵。 18、在方法中递增局部变量,速度是最快的。几乎与在函数中调用局部变量的速度相当。 19、递增一个全局变量要比递增一个局部变量慢2倍。 20、递增一个对象属性(如:$this->prop++)要比递增一个局部变量慢3倍。 21、递增一个未预定义的局部变量要比递增一个预定义的局部变量慢9至10倍。 22、仅定义一个局部变量而没在函数中调用它,同样会减慢速度(其程度相当于递增一个局部变量)。PHP大 概会检查看是否存在全局变量。 23、方法调用看来与类中定义的方法的数量无关,因为我(在测试方法之前和之后都)添加了10个方法,但 性能上没有变化。 24、派生类中的方法运行起来要快于在基类中定义的同样的方法。 25、调用带有一个参数的空函数,其花费的时间相当于执行7至8次的局部变量递增操作。类似的方法调用所 花费的时间接近于15次的局部变量递增操作。 26、Apache解析一个PHP脚本的时间要比解析一个静态HTML页面慢2至10倍。尽量多用静态HTML页面,少用脚 本。 27、除非脚本可以缓存,否则每次调用时都会重新编译一次。引入一套PHP缓存机制通常可以提升25%至100% 的性能,以免除编译开销。 28、尽量做缓存,可使用memcached。memcached是一款高性能的内存对象缓存系统,可用来加速动态Web应用 程序,减轻数据库负载。对运算码 (OP code)的缓存很有用,使得脚本不必为每个请求做重新编译。 29、当操作字符串并需要检验其长度是否满足某种要求时,你想当然地会使用strlen()函数。此函数执行起 来相当快,因为它不做任何计算,只返回在zval 结构(C的内置数据结构,用于存储PHP变量)中存储的已知 字符串长度。但是,由于strlen()是函数,多多少少会有些慢,因为函数调用会经过诸多步骤,如字母小写 化(译注:指函数名小写化,PHP不区分函数名大小写)、哈希查找,会跟随被调用的函数一起执行。在某些 情况下,你可以使用isset() 技巧加速执行你的代码。 (举例如下) if (strlen($foo) < 5) { echo “Foo is too short”$$ } (与下面的技巧做比较) if (!isset($foo{5})) { echo “Foo is too short”$$ } 调用isset()恰巧比strlen()快,因为与后者不同的是,isset()作为一种语言结构,意味着它的执行不需要 函数查找和字母小写化。也就是说,实际上在检验字符串长度的顶层代码中你没有花太多开销。 34、当执行变量$i的递增或递减时,$i++会比++$i慢一些。这种差异是PHP特有的,并不适用于其他语言,所 以请不要修改你的C或Java代码并指望它们能立即变快,没用的。++$i更快是因为它只需要3条指令(opcodes) ,$i++则需要4条指令。后置递增实际上会产生一个临时变量,这个临时变量随后被递增。而前置递增直接在 原值上递增。这是最优化处理的一种,正如Zend的PHP优化器所作的那样。牢记这个优化处理不失为一个好主 意,因为并不是所有的指令优化器都会做同样的优化处理,并且存在大量没有装配指令优化器的互联网服务 提供商(ISPs)和服务器。 35、并不是事必面向对象(OOP),面向对象往往开销很大,每个方法和对象调用都会消耗很多内存。 36、并非要用类实现所有的数据结构,数组也很有用。 37、不要把方法细分得过多,仔细想想你真正打算重用的是哪些代码? 38、当你需要时,你总能把代码分解成方法。 39、尽量采用大量的PHP内置函数。 40、如果在代码中存在大量耗时的函数,你可以考虑用C扩展的方式实现它们。 41、评估检验(profile)你的代码。检验器会告诉你,代码的哪些部分消耗了多少时间。Xdebug调试器包含了 检验程序,评估检验总体上可以显示出代码的瓶颈。 42、mod_zip可作为Apache模块,用来即时压缩你的数据,并可让数据传输量降低80%。 43、在可以用file_get_contents替代file、fopen、feof、fgets等系列方法的情况下,尽量用 file_get_contents,因为他的效率高得多!但是要注意file_get_contents在打开一个URL文件时候的PHP版 本问题; 44、尽量的少进行文件操作,虽然PHP的文件操作效率也不低的; 45、优化Select SQL语句,在可能的情况下尽量少的进行Insert、Update操作(在update上,我被恶批过); 46、尽可能的使用PHP内部函数(但是我却为了找个PHP里面不存在的函数,浪费了本可以写出一个自定义函 数的时间,经验问题啊!); 47、循环内部不要声明变量,尤其是大变量:对象(这好像不只是PHP里面要注意的问题吧?); 48、多维数组尽量不要循环嵌套赋值; 49、在可以用PHP内部字符串操作函数的情况下,不要用正则表达式; 50、foreach效率更高,尽量用foreach代替while和for循环; 51、用单引号替代双引号引用字符串; 52、“用i+=1代替i=i+1。符合c/c++的习惯,效率还高”; 53、对global变量,应该用完就unset()掉; 54、使用checkdnsrr()通过域名存在性来确认部分email地址的有效性,这个内置函数能保证每一个的域名对 应一个IP地址; 55、如果你在使用php5和mysql4.1以上的版本,考虑使用mysql_的改良函数mysqli_; 56、使用highlight_file()能自动打印一份很好格式化的页面源代码的副本; 57、使用error_reporting(0)函数来预防潜在的敏感信息显示给用户。理想的错误报告应该被完全禁用在 php.ini文件里。可是如果你在用一 个共享的虚拟主机,php.ini你不能修改,那么你最好添加 error_reporting(0)函数,放在每个脚本文件的第一行(或用 require_once()来加载)这能有效的保护敏感的 SQL查询和路径在出错时不被显示; 56、通过参数变量地址得引用来使一个函数有多个返回值。你可以在变量前加个“&”来表示按地址传递而非 按值传递; 58、关闭PHP魔术引号(Magic Quote)功能,并不是每一段被转义的数据都要插入数据库的,如果所有进入 PHP 的数据都被转义的话,那么会对程序的执行效率产生一定的影响。在运行时调用转义函数(如 addslashes())更有效率 59、使用ip2long()和long2ip()函数把IP地址转成整型存放进数据库而非字符型。这几乎能降低1/4的存储空 间。同时可以很容易对地址进行排序和快速查找; 60、使用 gzcompress() 和gzuncompress()对容量大的字符串进行压缩(解压)在存进(取出)数据库时。这种 内置的函数使用gzip算法能压缩到90%; 参考一下,感觉有锦上添花的效果。

php+mysql's operations

基于上次实现的php+mysql实现超原始的注册登录之后,这次的故事实现在登录后以超级管理员身份进行对注册用户的增删改查操作,而以普通用户却无法实现操作数据库(这里涉及权限控制,我只是简单表示一下效果而已,还没实现真正的权限控制) 先放上连接数据库的页面(conndb.php): <?php $db = mysql_connect(“127.0.0.1″,”root”,”root”) or die(“Fail to connect db!”); mysql_select_db(“userdb”,$db) or die (“Can’t connect to userdb”.mysql_error()); ?> 以lsa超级管理员登录后页面(welcome.php)增强版: <?php $username = $_GET[‘uname’]; if($username==’lsa’){ echo ‘Welcome SuperAdmin ‘.$username.’!’; echo ‘<br/><br/>’; include(“/var/www/html/conndb.php”); //$sql = mysql_query(“select * from user order by username”); //$info = mysql_fetch_array($sql); if($_GET[‘page’]==””){ $_GET[‘page’] = 1; } if(is_numeric($_GET[‘page’])){ $page_size = 5; $query = “select count(*) as total from user order by username”; $result = mysql_query($query); $user_count = mysql_result($result,0,0); $page_count = ceil($user_count/$page_size); $offset = ($_GET[‘page’] – 1) * $page_size; $sql = mysql_query(“select * from user order by username limit $offset,$page_size”); $info = mysql_fetch_array($sql); //get a group record(5).mysql_num_rows($sql) is 5 } ?> <form name=”myform” method=”post” action=”search.php” target=”_blank” > <input name=”searchname” type=”text” id=”searchname” size=”25″> &nbsp; <input type=”submit” name=”Submit” value=”search”> </form> <a href=”add_user.php”>Add_user</a> <table width=”100%” height=”200″ border=”1″ cellpadding=”0″ cellspacing=”0″ bgcolor=”#9E7DB4″ align=”center”> <tr valign=”top” bgcolor=”#FFFFFF”> <td height=”100″> <table width=”100%” height=”100%” border=”0″ cellpadding=”0″ cellspacing=”0″> <tr> <td height=”90″ align=”center” valign=”top”> <table width=”100%” border=”0″ align=”center” cellpadding=”0″ cellspacing=”1″ bgcolor=”#625D59″> <tr align=”center” bgcolor=”#00cc00″> <td width=”70″>username</td> <td width=”200″>password</td> <td width=”20″>edit</td> </tr> <?php if($info==false){ echo “<div align=’center’ style=’color:#FF0000; font-size:18px’>Sorry,not found!</div>”;……

php+mysql实现超原始的注册登录

涉及主要知识点: 1.php操作mysql 2.加密函数md5() 3.php用?页面间传递参数 4.$_GET[]和$_POST[] 平台:redhat6+php5.3+mysql14.14+ Apache/2.2.15 (经典LAMP) 注册页面(regtest.php): <!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”> <html> <head> <meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″> <title>welcome to regtest.php</title> </head> <body> <h1>reg</h1> <form method=”post” action=”reg_check.php”> username<input type=”text” name=”username” > password:<input type=”password” name=”password”> password again:<input type=”password” name=”pwd_again”> <input type=”submit” value=”submit”> <input type=”reset” value=”clean”> </form> </body> </html> 注册验证页面(reg_check.php): 用于验证注册和写入数据库 <?php $db = mysql_connect(“127.0.0.1″,”root”,”root”) or die(“Fail to connect db”); mysql_select_db(“userdb”,$db) or die (“can’t connect to userdb”.mysql_error()); $username=$_POST[‘username’]; $password=$_POST[‘password’]; $pwd_again=$_POST[‘pwd_again’]; if($username==””||$password==””) { echo”error:username or password empty”; } else { if($password!=$pwd_again) { echo”password is different!”; echo”<a href=’regtest.php’>input again</a>”; } else { $md5pass=md5($password); $sql=”insert into user(username,password) values(‘$username’,’$md5pass’)”; $result=mysql_query($sql); if(!$result) { echo”Fail reg!”.mysql_error(); echo”<a href=’regtest.php’>返回</a>”; } else { echo”Success reg!”; } } } ?> 看下数据库: 登录页面(logintest.php): <!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”> <html> <head> <meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″> <title>welcome to login</title> </head> <body> <form method=”post” action=”login_check.php”> username:<input type=”text” name=”username” > password:<input type=”password” name=”password”> <input type=”submit” value=”login”> <input type=”reset” value=”clean”> <a href=”regtest.php” >reg</a> </form> </body> </html> 登陆验证页面(login_check.php) <?php $username=$_POST[‘username’]; $password=$_POST[‘password’]; $db = mysql_connect(“127.0.0.1″,”root”,”root”) or die(“Fail to connect db!”); mysql_select_db(“userdb”,$db)……