php 防止单引号,双引号在接受页面转义
PHP页面中如果不希望出现以下情况:
单引号被转义为 \'
双引号被转义为 \"
那么可以进行如下设置以防止:
方法一:在php.ini中设置:magic_quotes_gpc = Off
方法二: $str=stripcslashes($str)
补充
1. 对于PHP magic_quotes_gpc=on的情况,
例子
代码如下 | 复制代码 |
<?php $str=$_POST['str']; if(!get_magic_quotes_gpc()){//首先判断未开启 $newStr=addslashes($str);//然后用addslashes函数过滤 } ?> |
我们可以不对输入和输出数据库的字符串数据作
addslashes()和stripslashes()的操作,数据也会正常显示。
如果此时你对输入的数据作了addslashes()处理,
那么在输出的时候就必须使用stripslashes()去掉多余的反斜杠。
2. 对于PHP magic_quotes_gpc=off 的情况
必须使用addslashes()对输入数据进行处理,但并不需要使用stripslashes()格式化输出
因为addslashes()并未将反斜杠一起写入数据库,只是帮助mysql完成了sql语句的执行
file_get_contents方法
代码如下 | 复制代码 |
$opt=array('http'=>array('header'=>"Referer: $refer")); |
分析:
file_get_contents中stream_context_create就伪造来源的重要参数了,这个什么好说的非常的简单。
CURL方式
代码如下 | 复制代码 |
$ch = curl_init(); |
分析:
curl伪造来源页面非常的简单这是它的优点了,所以我们只要在页面加上curl_setopt ($ch, CURLOPT_REFERER, "http://www.111cn.net/");就可以了。
SOCKET方式
代码如下 | 复制代码 |
$server = 'www.111cn.net'; |
友情提示:三种性能比对fsockopen是最好的哦。
我们再使用
代码如下 | 复制代码 |
<?php |
你会发现获取到的就是我们的www.111cn.net了哦,当然为造地址可以自行设置哦。
ZipArchive类是一个文件压缩解压类是一个php自来的zip类,我们可以直接简单创建一个类然后就能实现打包了,下面一聚教程小编给各位介绍一下吧,有需要了解的朋友可进入参考。这里我采用的是php自带的ZipArchive类
a) 我们只需要new一个ZipArchive对象,然后使用open方法创建一个zip文件,接着使用addFile方法,将要打包的文件写入刚刚创建的zip文件中,最好还得记得关闭该对象。
b) 注意点:使用open方法的时候,第二个参数$flags是可选的,$flags用来指定对打开的zip文件的处理方式,共有四种情况
i.ZIPARCHIVE::OVERWRITE 总是创建一个新的文件,如果指定的zip文件存在,则会覆盖掉
ii. ZIPARCHIVE::CREATE如果指定的zip文件不存在,则新建一个
iii. ZIPARCHIVE::EXCL 如果指定的zip文件存在,则会报错
iv. ZIPARCHIVE::CHECKCONS
一、解压缩zip文件
代码如下 | 复制代码 |
$zip = new ZipArchive;//新建一个ZipArchive的对象 |
二、将文件压缩成zip文件
代码如下 | 复制代码 |
$zip = new ZipArchive; |
三、文件追加内容添加到zip文件
代码如下 | 复制代码 |
$zip = new ZipArchive; $res = $zip->open('test.zip', ZipArchive::CREATE); if ($res === TRUE) { $zip->addFromString('test.txt', 'file content goes here'); $zip->close(); echo 'ok'; } else { echo 'failed'; } |
例子
执行打包代码:
代码如下 | 复制代码 |
import('ORG.Util.FileToZip'); // 打包下载 $cur_file =getcwd().'/dimg/2014052916/'; $handler = opendir($cur_file); //$cur_file 文件所在目录 $download_file = array(); $i = 0; while( ($filename = readdir($handler)) !== false ) { if($filename != '.' && $filename != '..') { $download_file[$i++] = $filename; } } closedir($handler); $scandir=new traverseDir($cur_file,$save_path); //$save_path zip包文件目录 $scandir->tozip($download_file); |
FileToZip 类:
代码如下 | 复制代码 |
<?php /** * 遍历目录,打包成zip格式 */ class traverseDir{ public $currentdir;//当前目录 public $filename;//文件名 public $fileinfo;//用于保存当前目录下的所有文件名和目录名以及文件大小 public $savepath; public function __construct($curpath,$savepath){ $this->currentdir=$curpath;//返回当前目录 $this->savepath=$savepath;//返回当前目录 } //遍历目录 public function scandir($filepath){ if (is_dir($filepath)){ $arr=scandir($filepath); foreach ($arr as $k=>$v){ $this->fileinfo[$v][]=$this->getfilesize($v); } }else { echo "<script>alert('当前目录不是有效目录');</script>"; } } /** * 返回文件的大小 * * @param string $filename 文件名 * @return 文件大小(KB) */ public function getfilesize($fname){ return filesize($fname)/1024; } /** * 压缩文件(zip格式) */ public function tozip($items){ $zip=new ZipArchive(); $zipname=date('YmdHis',time()); if (!file_exists($zipname)){ $zip->open($savepath.$zipname.'.zip',ZipArchive::OVERWRITE);//创建一个空的zip文件 for ($i=0;$i<count($items);$i++){ $zip->addFile($this->currentdir.'/'.$items[$i],$items[$i]); } $zip->close(); $dw=new download($zipname.'.zip',$savepath); //下载文件 $dw->getfiles(); unlink($savepath.$zipname.'.zip'); //下载完成后要进行删除 } } } /** * 下载文件 * */ class download{ protected $_filename; protected $_filepath; protected $_filesize;//文件大小 protected $savepath;//文件大小 public function __construct($filename,$savepath){ $this->_filename=$filename; $this->_filepath=$savepath.$filename; } //获取文件名 public function getfilename(){ return $this->_filename; } //获取文件路径(包含文件名) public function getfilepath(){ return $this->_filepath; } //获取文件大小 public function getfilesize(){ return $this->_filesize=number_format(filesize($this->_filepath)/(1024*1024),2);//去小数点后两位 } //下载文件的功能 public function getfiles(){ //检查文件是否存在 if (file_exists($this->_filepath)){ //打开文件 $file = fopen($this->_filepath,"r"); //返回的文件类型 Header("Content-type: application/octet-stream"); //按照字节大小返回 Header("Accept-Ranges: bytes"); //返回文件的大小 Header("Accept-Length: ".filesize($this->_filepath)); //这里对客户端的弹出对话框,对应的文件名 Header("Content-Disposition: attachment; filename=".$this->_filename); //修改之前,一次性将数据传输给客户端 echo fread($file, filesize($this->_filepath)); //修改之后,一次只传输1024个字节的数据给客户端 //向客户端回送数据 $buffer=1024;// //判断文件是否读完 while (!feof($file)) { //将文件读入内存 $file_data=fread($file,$buffer); //每次向客户端回送1024个字节的数据 echo $file_data; } fclose($file); }else { echo "<script>alert('对不起,您要下载的文件不存在');</script>"; } } } |
前天接到一个需求需要模拟登陆微博然后进行发微博,以前干过很多的模拟登录阿里妈妈,微信,还有些其他的内部系统,至今没有出现不能登录的,哈哈,所以也就没有当一回事情,可是当分析新浪的登陆过程的时候才感觉到压力,?澹?苈氲募用芊绞礁悴欢ò。??虾芏嗟亩际侵?暗募用芩惴 sha1(sha1(sha1(pwd)).once.servertime) ,肯定都用不了,主要使这个加密算法搞不定所以密码都搞不定别谈登录的,接着就在网上各种找代码,一个小时毫无所获,?辶耍?獯胃迷趺窗炷兀?氨吲6即党鋈チ恕M蝗幌氲降锹嫉氖焙蛴幸桓龃?so,是不是我用微博的帐号密码也能登录到新浪邮箱或者其他新浪产品去,感觉希望很大,哈哈,果然微博的帐号可以直接登录所有的新浪产品,再次访问微博我已经在登录状态了,证明这个有神马用呢?
其实吧很有用的,一个大公司在一个项目投入的技术和这个项目盈利和前景有很大关系,微博他可以花很大的心思去做,但是其他不一定就,哈哈,万一找到那个地方的密码没有加密那岂不是很好说了。(PS:对网络安全比较感兴趣,这个方式对黑客来说叫做旁注,旁注就是,当黑客在攻击一个网站的时候,这个网站安全做的非常好,没有什么已知漏洞,攻破难度较大,所以黑客会找找该网站下服务器下其他网站,然后找一个比较容易攻破的,通过这个网站挂马,shell,提权,然后目标网站也就沦陷,以为在同一个服务器,所以….目标就是拿到目标站,无论哪种方法只要拿下就行,很淫荡的想法有没有)
https://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.15)&_=1403138799543简单抓抓包发现密码并没有加密,哈哈,我们不是能模拟登录了吗? 嗯,其实这里高兴的有点早了
先登录新浪的吧,代码分分钟就搞定了。返回的是一个json数组
代码如下 | 复制代码 |
//var_dump($loginData);exit; $login = json_decode(loginPost($loginUrl,$loginData),true); |
}返回的是一个json数据转成数组即可
代码如下 | 复制代码 |
array (size=4) |
这个时候说明我们登录成功了,但是其实我们的微博首页的地址并不是weibo,com,而是 http://weibo.com/bipeng0405/home?wvr=5 这样地址,我们怎么获取这个地址了,很简单,直接抓取weibo。com然后他会自动给你跳转回去的,你只需要把跳转的地址记录下来即可
代码如下 | 复制代码 |
$return = curl_exec($ch); $info = curl_getinfo($ch); |
curl_close($ch);这里还有一个问题,这个时候你可能发现没有跳转到自己微博的首页,这是什么原因呢,可以看看登陆时候有两个连接地址,其中有一个weibo域下的一个地址,猜测应该是进行了cookie的设置所以先获取一边他吧。
代码如下 | 复制代码 |
get($login['crossDomainUrlList'][0]); |
这个代码要在刚才weibo.com获取之前,否则会出现问题的哦
这就是登录的逻辑了,过程很漫长花了差不多一天的时候,唉。。没有心情写文章了
原文来自:http://www.mapenggang.com
购物车是现在电商开发者必须要做的一个功能了,下面我来给大家整理两个可用于电商网站的简单购物车程序代码,有兴趣的同学不防进入参考一下
例子1
最近在写一个电子商务的网站,在做购物车的时候才发现php里面没有map这种数据结构,我们不能简单的通过一个hashmap来实现购物车,于是我想到到数组,通过数组的值的格式化来进行编写。
也就是说,我们是通过循环数组的值,通过拆分值来判断数据是不是重复,比如我现在浏览的商品的id是4,添加的数量是3,我就在数组里面存放4-3,以后如果当遇到是id是4的时候,我们只是需要时改变数组里面这个位置的数值,如果id在数组里面拆分比较都不存在,则往数组里面添加数据。删除购物车制定id 的商品也是循环数组,这个值,使用unset()来释放这个值。
具体的实现代码:
—————————————————————————————————————————–
代码如下 | 复制代码 |
<?php session_start(); if($_SESSION['carts']==””){ $carts=array(); array_push($carts, “0-0″); $_SESSION['carts']=$carts; } $method=$_GET['method']; if($method==”add”){ $productId=$_GET['productid']; $number=$_GET['number']; $carts=$_SESSION['carts']; $flag=”false”; for($i=0;$i<sizeof($carts);$i++){ $pn=$carts[$i]; $pns=split(“-”, $pn); if($pns[0]==$productId){ $carts[$i]=$productId.”-”.$number; $flag=”true”; $location=$i; } } if($flag==”true”){ $carts[$location]=$productId.”-”.$number; }else{ array_push($carts, $productId.”-”.$number); } $_SESSION['carts']=$carts; } if($method==”delete”){ $productId=$_GET['productid']; $carts=$_SESSION['carts']; for($i=0;$i<sizeof($carts);$i++){ $pn=$carts[$i]; $pns=split(“-”, $pn); if($pns[0]==$productId){ unset($carts[$i]); } } $_SESSION['carts']=$carts; } ?> |
———————————————————————————————————–
上面电子商务课程的时候做的一个简单的程序了,就是一个在线购物,不过还是90多分的哦!~ 其实只要是这种类似的程序,都是简单的增删改查系统,无非就是就对数据库的操作,我们要做的就是很好的实现这个业务逻辑,以及能很好的设计相关的字段来控制,比如是商品的状态的控制,是上线还是下线,还是推荐的。
现在看看连接数据库的代码吧!~
数据库配置代码,其实这个可以在xml配置文件里面设置:
代码如下 | 复制代码 |
class DbConfig{ var $databaseAddress="180.153.178.89"; var $dataBaseUser="pantingwen"; var $databasePassword="753116"; var $database="sqlpantingwen"; /** * @return the $databaseAddress */ public function getDatabaseAddress() { return $this->databaseAddress; } /** * @return the $dataBaseUser */ public function getDataBaseUser() { return $this->dataBaseUser; } /** * @return the $databasePassword */ public function getDatabasePassword() { return $this->databasePassword; } /** * @return the $database */ public function getDatabase() { return $this->database; } /** * @param field_type $databaseAddress */ public function setDatabaseAddress($databaseAddress) { $this->databaseAddress = $databaseAddress; } /** * @param field_type $dataBaseUser */ public function setDataBaseUser($dataBaseUser) { $this->dataBaseUser = $dataBaseUser; } /** * @param field_type $databasePassword */ public function setDatabasePassword($databasePassword) { $this->databasePassword = $databasePassword; } /** * @param field_type $database */ public function setDatabase($database) { $this->database = $database; } } ?> 数据库连接代码: include_once 'DbConfig.php'; define("conn", getcon()); function getcon(){ $dbConfig=new DbConfig(); $con=mysql_connect($dbConfig->getDatabaseAddress(),$dbConfig->getDataBaseUser(),$dbConfig->getDatabasePassword()); return $con; } /** * 选择一款数据库 * Enter description here ... */ function _select_db(){ $dbConfig=new DbConfig(); if(!mysql_select_db($dbConfig->getDatabase())){ exit('找不到指定的数据库'); } } /** * 设置字符集 * Enter description here ... */ function _set_names(){ if(!mysql_query('set names utf8')){ exit('字符集错误'); } } function _query($_sql){ _select_db(); _set_names(); if(!$result=mysql_query($_sql,conn)){ echo mysql_error(); } return $result; } /** * 只能是获取一个数据组 * Enter description here ... * @param unknown_type $_sql */ function _fetch_array($_sql){ return mysql_fetch_array(_query($_sql),MYSQL_ASSOC); } /** * 返回数据组 * Enter description here ... * @param unknown_type $_sql */ function _fetch_array_list($_result){ return mysql_fetch_array($_result,MYSQL_ASSOC); } /** * 影响到到的记录数 * Enter description here ... */ function _affect_rows(){ return mysql_affected_rows(); } /** * 判断是不是存在数据 * Enter description here ... * @param unknown_type $_sql * @param unknown_type $_info */ function _is_repeat($_sql,$_info){ if(_fetch_array($_sql)){ } } function _close(){ if(!mysql_close(_conn)){ exit('关闭异常'); } } ?> |
效果截图:
相关文章
PHP传值到不同页面的三种常见方式及php和html之间传值问题
在项目开发中经常见到不同页面之间传值在web工作中,本篇文章给大家列出了三种常见的方式。接触PHP也有几个月了,本文总结一下这段日子中,在编程过程里常用的3种不同页面传值方法,希望可以给大家参考。有什么意见也希望大...2015-11-24- 直接为大家介绍制作过程,希望大家可以喜欢。HTML结构该页面切换特效的HTML结构使用一个<main>元素来作为页面的包裹元素,div.cd-cover-layer用于制作页面切换时的遮罩层,div.cd-loading-bar是进行ajax加载时的loading进...2015-10-30
- 这篇文章主要介绍了解决vue刷新页面以后丢失store的数据问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-12
- 对于乱码这个问题php开发者几乎都会有碰到过,我们下面主要是介绍了php文件乱码和页面乱码。PHP页面转UTF-8编码问题 1.在代码开始出加入一行: header("Content-Type: text/html;charset=utf-8"); 2.PHP文件编码问题...2015-10-21
- 这篇文章主要介绍了解决vuex数据页面刷新后初始化操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-26
- 这篇文章主要介绍了java后台实现js关闭本页面,父页面指定跳转或刷新操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-16
- 这篇文章主要介绍了JavaScript 获取滚动条位置并将页面滑动到锚点的的相关资料,帮助大家更好的理解和学习使用JavaScript,感兴趣的朋友可以了解下...2021-02-09
- 这篇文章主要介绍了PostgreSQL 中的单引号与双引号用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-01
- 这篇文章主要介绍了vue实现在进行增删改操作后刷新页面,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-05
- 这篇文章主要介绍了Pycharm 跳转回之前所在页面的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-05
- 这篇文章主要介绍了微信小程序 注册页面的相关资料,需要的朋友可以参考下...2016-10-20
- bootstrap布局是应用得很广泛的一种网页布局方法,下面通过本文给大家介绍bootstrap页面缩小变形的快速解决办法,需要的朋友参考下吧...2017-02-08
- 这篇文章主要介绍了在vue中实现嵌套页面(iframe),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-31
- 这篇文章主要介绍了 判断页面访问方式电脑或者移动端的相关资料,这里提供了三种方法,需要的朋友可以参考下...2016-10-03
- 404页面就是一个告诉搜索引擎这个页面不存在了,同时也提示用户可以选择其它的操作了,下面我来给没有apache操作权限朋友介绍php中自定义404页面的操作方法。 方法一...2016-11-25
- 这篇文章主要介绍了C#设置页面单位和缩放的方法,涉及C#设置页面属性的相关技巧,需要的朋友可以参考下...2020-06-25
- 这篇文章主要给大家介绍了光宇微信小程序单页面应用路由的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-10
- 今天小编就为大家分享一篇关于C#网站生成静态页面的实例讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...2020-06-25
- 这篇文章主要介绍了pgsql 解决包含有单引号的字符串操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-01
- 在用 Express 的时候,路由是我最困惑的事之一。知道用 app.get('*') 可以处理所有页面,但这样除了自定义的其他路由外,静态文件是被忽略的。最近在写一个小工具的时候,找到了一个解决方案:复制代码 代码如下:var express =...2014-05-31