PHP EXTRACT函数将字段变成变量的例子
PHP extract函数的作用是:函数从数组中把变量导入到当前的符号表中。对于数组中的每个元素,键名用于变量名,键值用于变量值。用extract函数一个技巧是可以把字段变成变量,方便调用。
$info = $this->db->get_one(array('id'=>$specialid, 'disabled'=>0));
//将当前专题id所对应的字段作为变量导入到当前的符号表
extract($info);
本例$info是从数据库查出的结果,以数组的形式作为变量,键名是字段名,值是字段值,使用extract函数就把键名作为变量名,字段值作为变量值了。
比如array(‘name’=>’zhangsan’,’sex’=>’man’,’id’=>3232);
那么extract($array)后,就可以直接使用$name,$sex,$id了。
再看
<?php
$size = "old size"; //注意最后size变量的值。
$a = array(
"color" => "red",
"size" => "XXL",
"price" => "53");
extract($a);
echo "color = $color<br />";
echo "size = $size<br />";
echo "price = $price<br />";
?>
结果为:
color = red
size = XXL
price = 53
通过上例发现$size的值为XXL,而不是之前的”old size”,说明默认情况下当数组中的key与已有的变量冲突时,将覆盖原来的变量。
例子
form.html
<form action="action.php" method="post">
<input type="text" name="username">
<input type="password" name="password">
<input type="submit">
在action.php中只要使用extract()函数将$_POST全局数据解开:
action.php
<?php
extract($_POST);
//相当于$username = $_POST['username'];
//$password = $_POST['password'];
?>
是不是很方便呢?
extract的作用分析
addslashes -- 使用反斜线引用字符串
extract(addslashes($_POST)); --处理POST表单
把客户端<FORM METHOD="POST"...>表单中的变量名取出来。
extract(addslashes($_GET)); --处理GET表单
把客户端<FORM METHOD="GET"...>表单中的变量名取出来。
本文是一篇综合知识应用类文章,需要您具备PHP、jQuery、MySQL以及html和css方面的基本知识。本文在《PHP+MySql+jQuery实现的“顶”和“踩”投票功能》一文基础上做了适当改进,共用了数据表,您可以先点击了解这篇文章。
HTML
我们需要在页面中展示红蓝双方的观点,以及对应的投票数和比例,以及用于投票交互的手型图片,本例以#red和#blue分别表示红蓝双方。.redhand和.bluehand用来做手型投票按钮,.redbar和.bluebar展示红蓝双方比例调,#red_num和#blue_num展示双方投票数。
<div class="vote">
<div class="votetitle">您对Helloweba提供的文章的看法?</div>
<div class="votetxt">非常实用<span>完全看不懂</span></div>
<div class="red" id="red">
<div class="redhand"></div>
<div class="redbar" id="red_bar">
<span></span>
<p id="red_num"></p>
</div>
</div>
<div class="blue" id="blue">
<div class="bluehand"></div>
<div class="bluebar" id="blue_bar">
<span></span>
<p id="blue_num"></p>
</div>
</div>
</div>
CSS
使用CSS将页面美化,加载背景图片,确定相对位置等等,你可以直接复制以下代码,在自己的项目中稍作修改即可。
.vote{width:288px; height:220px; margin:60px auto 20px auto;position:relative}
.votetitle{width:100%;height:62px; background:url(icon.png) no-repeat 0 30px; font-size:15px}
.red{position:absolute; left:0; top:90px; height:80px;}
.blue{position:absolute; right:0; top:90px; height:80px;}
.votetxt{line-height:24px}
.votetxt span{float:right}
.redhand{position:absolute; left:0;width:36px; height:36px; background:url(icon.png) no-repeat -1px -38px;cursor:pointer}
.bluehand{position:absolute; right:0;width:36px; height:36px; background:url(icon.png) no-repeat -41px -38px;cursor:pointer}
.grayhand{width:34px; height:34px; background:url(icon.png) no-repeat -83px -38px;cursor:pointer}
.redbar{position:absolute; left:42px; margin-top:8px;}
.bluebar{position:absolute; right:42px; margin-top:8px; }
.redbar span{display:block; height:6px; background:red; width:100%;border-radius:4px;}
.bluebar span{display:block; height:6px; background:#09f; width:100%;border-radius:4px; position:absolute; right:0}
.redbar p{line-height:20px; color:red;}
.bluebar p{line-height:20px; color:#09f; text-align:right; margin-top:6px}
jQuery
当点击手型按钮时,利用jQuery的$.getJSON()向后台php发送Ajax请求,如果请求成功,将会得到后台返回的json数据,jQuery再将json数据进行处理。以下函数:getdata(url,sid),传递了两个参数,url是请求的后台php地址,sid表示当前投票主题ID,我们在该函数中,返回的json数据有红蓝双方的投票数,以及双方比例,根据比例计算比例条的宽度,异步交互展示投票效果。
function getdata(url,sid){
$.getJSON(url,{id:sid},function(data){
if(data.success==1){
var w = 208; //定义比例条的总宽度
//红方投票数
$("#red_num").html(data.red);
$("#red").css("width",data.red_percent*100+"%");
var red_bar_w = w*data.red_percent-10;
//红方比例条宽度
$("#red_bar").css("width",red_bar_w);
//蓝方投票数
$("#blue_num").html(data.blue);
$("#blue").css("width",data.blue_percent*100+"%");
var blue_bar_w = w*data.blue_percent;
//蓝方比例条宽度
$("#blue_bar").css("width",blue_bar_w);
}else{
alert(data.msg);
}
});
}
当页面初次加载时,即调用getdata(),然后点击给红方投票或给蓝方投票同样调用getdata(),只是传递的参数不一样。注意本例中的参数sid我们设置为1,是根据数据表中的id设定的,开发者可以根据实际项目读取准确的id。
$(function(){
//获取初始数据
getdata("vote.php",1);
//红方投票
$(".redhand").click(function(){
getdata("vote.php?action=red",1);
});
//蓝方投票
$(".bluehand").click(function(){
getdata("vote.php?action=blue",1);
});
});
PHP
前端请求了后台的vote.php,vote.php将根据接收的参数,连接数据库,调用相关函数。
include_once("connect.php");
$action = $_GET['action'];
$id = intval($_GET['id']);
$ip = get_client_ip();//获取ip
if($action=='red'){//红方投票
vote(1,$id,$ip);
}elseif($action=='blue'){//蓝方投票
vote(0,$id,$ip);
}else{//默认返回初始数据
echo jsons($id);
}
函数vote($type,$id,$ip)用来做出投票动作,$type表示投票方,$id表示投票主题的id,$ip表示用户当前ip。首先根据用户当前IP,查询投票记录表votes_ip中是否已经存在当前ip记录,如果存在,则说明用户已投票,否则更新红方或蓝方的投票数,并将当前用户投票记录写入到votes_ip表中以防重复投票。
function vote($type,$id,$ip){
$ip_sql=mysql_query("select ip from votes_ip where vid='$id' and ip='$ip'");
$count=mysql_num_rows($ip_sql);
if($count==0){//还没有投票
if($type==1){//红方
$sql = "update votes set likes=likes+1 where id=".$id;
}else{//蓝方
$sql = "update votes set unlikes=unlikes+1 where id=".$id;
}
mysql_query($sql);
$sql_in = "insert into votes_ip (vid,ip) values ('$id','$ip')";
mysql_query($sql_in);
if(mysql_insert_id()>0){
echo jsons($id);
}else{
$arr['success'] = 0;
$arr['msg'] = '操作失败,请重试';
echo json_encode($arr);
}
}else{
$arr['success'] = 0;
$arr['msg'] = '已经投票过了';
echo json_encode($arr);
}
}
函数jsons($id)通过查询当前id的投票数,计算比例并返回json数据格式供前端调用。
function jsons($id){
$query = mysql_query("select * from votes where id=".$id);
$row = mysql_fetch_array($query);
$red = $row['likes'];
$blue = $row['unlikes'];
$arr['success']=1;
$arr['red'] = $red;
$arr['blue'] = $blue;
$red_percent = round($red/($red+$blue),3);
$arr['red_percent'] = $red_percent;
$arr['blue_percent'] = 1-$red_percent;
return json_encode($arr);
}
文中还涉及到获取用户真实IP的函数:get_client_ip(),点击这里可以看相关代码:
//获取用户真实IP
function getIp() {
if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
$ip = getenv("HTTP_CLIENT_IP");
else
if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else
if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
$ip = getenv("REMOTE_ADDR");
else
if (isset ($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
$ip = $_SERVER['REMOTE_ADDR'];
else
$ip = "unknown";
return ($ip);
}
最后,贴上Mysql数据表,votes表用来记录红蓝双方的投票总数,votes_ip表则用来存放用户的投票IP记录。
CREATE TABLE IF NOT EXISTS `votes` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`likes` int(10) NOT NULL DEFAULT '0',
`unlikes` int(10) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `votes` (`id`, `likes`, `unlikes`) VALUES
(1, 30, 10);
CREATE TABLE IF NOT EXISTS `votes_ip` (
`id` int(10) NOT NULL,
`vid` int(10) NOT NULL,
`ip` varchar(40) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
再次提醒,下载的demo如果运行不了,请先检查数据库连接配置是否正确
PHP预定义了6个接口介绍如下:
Traversable | 遍历接口(检测一个类是否可以使用�0�2foreach�0�2进行遍历的接口) |
Iterator | 迭代器接口(可在内部迭代自己的外部迭代器或类的接口) |
IteratorAggregate | 聚合式迭代器接口(创建外部迭代器的接口) |
OuterIterator | 迭代器嵌套接口(将一个或多个迭代器包裹在另一个迭代器中) |
RecursiveIterator | 递归迭代访问接口(提供递归访问功能) |
SeekableIterator | 可索引迭代访问接口(实现查找功能) |
1.Traversable遍历接口
呵呵!其实它不是一个在PHP中可以使用的接口,内部类才可使用,它有一个用途就是检测一个类是否可以遍历。
if($class instanceof Traversable) {
//foreach
}
2.Iterator迭代器接口
接口摘要:
Iterator extends Traversable
{
//返回当前索引游标指向的元素
abstract public mixed current(void)
//返回当前索引游标指向的元素的键名
abstract public scalar key(void)
//移动当前索引游标指向下一元素
abstract public void next(void)
//重置索引游标的指向第一个元素
abstract public void rewind(void)
//判断当前索引游标指向的是否是一个元素,常常在调用 rewind()或 next()使用
abstract public boolean valid(void)
}
以上可以让一个类实现一个基本的迭代功能,如下可以看到迭代的调用顺序:
class myIterator implements Iterator {
private $position = 0 ;
private $array = array(
"firstelement" ,
"secondelement" ,
"lastelement" ,
);
public function __construct () {
$this -> position = 0 ;
}
function rewind () {
var_dump ( __METHOD__ );
$this -> position = 0 ;
}
function current () {
var_dump ( __METHOD__ );
return $this -> array [ $this -> position ];
}
function key () {
var_dump ( __METHOD__ );
return $this -> position ;
}
function next () {
var_dump ( __METHOD__ );
++ $this -> position ;
}
function valid () {
var_dump ( __METHOD__ );
return isset( $this -> array [ $this -> position ]);
}
}
$it = new myIterator ;
foreach( $it as $key => $value ) {
var_dump ( $key , $value );
echo "\n" ;
}
3.IteratorAggregate聚合式迭代器接口
接口摘要:
IteratorAggregate extends Traversable {
//获取外部迭代器
abstract public Traversable getIterator ( void )
}
getIterator是一个Iterator或Traversable接口的类的一个实例。如下获取外部迭代器实现迭代访问。
class myData implements IteratorAggregate {
public $property1 = "Public property one" ;
public $property2 = "Public property two" ;
public $property3 = "Public property three" ;
public function __construct () {
$this -> property4 = "last property" ;
}
public function getIterator () {
return new ArrayIterator ( $this );
}
}
$obj = new myData ;
foreach( $obj as $key => $value ) {
var_dump ( $key , $value );
echo "\n" ;
}
4.ArrayAccess数组式访问接口
接口摘要:
ArrayAccess {
/* 方法 */
abstract public boolean offsetExists ( mixed $offset ) //检查偏移位置是否存在
abstract public mixed offsetGet ( mixed $offset ) //获取一个偏移位置的值
abstract public void offsetSet ( mixed $offset , mixed $value ) //设置一个偏移位置的值
abstract public void offsetUnset ( mixed $offset ) //复位一个偏移位置的值
}
如下可像访问数组一样访问对象:
class obj implements arrayaccess {
private $container = array();
public function __construct () {
$this -> container = array(
"one" => 1 ,
"two" => 2 ,
"three" => 3 ,
);
}
public function offsetSet ( $offset , $value ) {
if ( is_null ( $offset )) {
$this -> container [] = $value ;
} else {
$this -> container [ $offset ] = $value ;
}
}
public function offsetExists ( $offset ) {
return isset( $this -> container [ $offset ]);
}
public function offsetUnset ( $offset ) {
unset( $this -> container [ $offset ]);
}
public function offsetGet ( $offset ) {
return isset( $this -> container [ $offset ]) ? $this -> container [ $offset ] : null ;
}
}
$obj = new obj ;
var_dump (isset( $obj [ "two" ]));
var_dump ( $obj [ "two" ]);
unset( $obj [ "two" ]);
var_dump (isset( $obj [ "two" ]));
$obj [ "two" ] = "A value" ;
var_dump ( $obj [ "two" ]);
$obj [] = 'Append 1' ;
$obj [] = 'Append 2' ;
$obj [] = 'Append 3' ;
print_r ( $obj );
5.Serializable序列化接口
接口摘要:
Serializable {
/* 方法 */
abstract public string serialize ( void ) //对象的字符串表示
abstract public mixed unserialize ( string $serialized ) // 构造对象
}
实现该接口的类不再支持__sleep()和__wakeup()。使用很简单,只要序列化对象时serialize方法会被调用,当反序列化时,unserialize方法被调用。
class obj implements Serializable {
private $data ;
public function __construct () {
$this -> data = "My private data" ;
}
public function serialize () {
return serialize ( $this -> data );
}
public function unserialize ( $data ) {
$this -> data = unserialize ( $data );
}
public function getData () {
return $this -> data ;
}
}
$obj = new obj ;
$ser = serialize ( $obj );
print_r($ser);
$newobj = unserialize ( $ser );
print_r($newobj);
6.Closure
接口摘要:
Closure {
/* 方法 */
__construct ( void ) //用于禁止实例化的构造函数
public static Closure bind ( Closure $closure , object $newthis [, mixed $newscope = 'static' ] ) //复制一个闭包,绑定指定的$this对象和类作用域。
public Closure bindTo ( object $newthis [, mixed $newscope = 'static' ] ) //复制当前闭包对象,绑定指定的$this对象和类作用域。
}
class A {
private static $sfoo = 1 ;
private $ifoo = 2 ;
}
$cl1 = static function() {
return A :: $sfoo ;
};
$cl2 = function() {
return $this -> ifoo ;
};
$bcl1 = Closure :: bind ( $cl1 , null , 'A' );
$bcl2 = Closure :: bind ( $cl2 , new A (), 'A' );
echo $bcl1 (), "\n" ;
echo $bcl2 (), "\n" ;
一、正则法(当文本相当长时,速度会很快)
function stringToByteArray($str,$charset,$to_charset) {
$str = iconv($charset,$to_charset,$str);
preg_match_all(‘/(.)/s’,$str,$bytes);
$bytes=array_map(‘ord’,$bytes[1]) ;
return $bytes;
}
function byteArrayToString($bytes,$charset,$to_charset) {
$bytes=array_map(‘chr’,$bytes);
$str=implode(”,$bytes);
$str = iconv($to_charset,$charset,$str);
return $str;
}
$byteArray=stringToByteArray(‘http测试’,’utf-8′,’gbk’);
print_r($byteArray);
$retStr=byteArrayToString($byteArray,’utf-8′,’gbk’);
echo $retStr;
一、循环法
/**
* 转换一个String字符串为byte数组
* @param $str 需要转换的字符串
* @param $bytes 目标byte数组
* @author Zikie
*/
function getBytes($string) {
$bytes = array();
for($i = 0; $i < strlen($string); $i++){
$bytes[] = ord($string[$i]);
}
return $bytes;
}
/**
* 将字节数组转化为String类型的数据
* @param $bytes 字节数组
* @param $str 目标字符串
* @return 一个String类型的数据
*/
function toStr($bytes) {
$str = '';
foreach($bytes as $ch) {
$str .= chr($ch);
}
return $str;
}
$byteArray=getBytes(iconv('utf-8','gbk','http测试'));
print_r($byteArray);
$retStr=toStr($byteArray);
echo $retStr;
两种方法都是一样的
结果为:Array
(
[0] => 104
[1] => 116
[2] => 116
[3] => 112
[4] => 178
[5] => 226
[6] => 202
[7] => 212
)
结果为:http测试
补充一个通用函数
要加密,则需要将字符串转为ASCII的字节数组。反之,则要转回来。代码为什么速度快?那就是,能不用FOR循环的,直接不用。使用PHP原有的函数,让它实现,这是最快的
<?php
function stringToByteArray($str,$charset) {
$str = iconv($charset,'UTF-16',$str);
preg_match_all('/(.)/s',$str,$bytes); //注:本文的盗版已经有了。不过,提示一下读者,这里的正则改了。
$bytes=array_map('ord',$bytes[1]) ;
return $bytes;
}
function byteArrayToString($bytes,$charset) {
$bytes=array_map('chr',$bytes);
$str=implode('',$bytes);
$str = iconv('UTF-16',$charset,$str);
return $str;
}
$byteArray=stringToByteArray('13亿人口大国,自认为精通PHP的还是相当多的!','utf-8');
print_r($byteArray);
$retStr=byteArrayToString($byteArray,'utf-8');
echo $retStr;
?>
每个函数只有4行代码,没有FOR循环,但当文本相当长时,你就能发现,差别真的很大
PHP投票程序在做活动时会用到了,我们今天就为各位朋友分享一个PHP投票程序,有需要了解的同学不防一起来看看吧.
PHP刷投票,让你高居榜首!本文附上刷票方法和防御策略。
案例为一个半月以前。没有及时放出原因有二,一是因为博客域名备案没有下来,没有心情写东西。二是最主要的,及时放出对案例网站有严重的损害,不是我等IT人应有的。
Ps:刷票有风险,使用需谨慎。本文谨做学习研究讨论之用,不可用作不正当用途!
本文为本博客的处女之作,题材源于近日一朋友要求,是因为她的姐姐参加了一个书法比赛,问我能不能在网站上刷投票。作为刚刚出道一年的小菜鸟,我很惶恐。一年前刚刚接触PHP的时候,完全不知道做,现在第一反应就是Curl。
废话不多说了,直接上代码。
<?php
header('Content-type: text/html; charset=gb2312');
//随机生成IP
$ip1 = rand(101, 255).'.';
$ip2 = rand(1, 255).'.';
$ip3 = rand(1, 255).'.';
$ip4 = rand(1, 255);
$ip = $ip1 . $ip2 . $ip3 . $ip4;
$clientIp = 'CLIENT-IP:'.$ip;
$xforwarded = 'X-FORWARDED-FOR:'.$ip;
//设置目标和来源
$url = 'http://www.dunhuangwomen.org.cn/vote/Vote.asp?id=67';
$referer = 'http://www.dunhuangwomen.org.cn/vote/list.asp?id=2';
//Curl
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url); //目标
curl_setopt($ch, CURLOPT_HTTPHEADER, array($xforwarded, $clientIp)); //构造IP
curl_setopt($ch, CURLOPT_REFERER, $referer); //来源
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
$ret = curl_exec($ch);
curl_close($ch);
echo $ret;
?>
好,来分析一下。
1、仿造IP,网站有限制一个IP在一天只可以投一次
2、填写来源,网站会判断请求的来源是否合法路径
其他就是Curl的常规了选项了。
如何防治?
本人才疏学浅,仅作跑砖引玉。
1、限制IP
本文已经破解
2、限制来源
本文已经破解
3、验证码。作为最反人类的发明之一,可以使用这个拥有高大上的名字的全自动区分计算机和人类的图灵测试。
可用Opencv。
4、记录MAC地址。
理论上每块网卡都有一个唯一的MAC地址,如果更改可能引起冲突而无法上网。目前也可以用软件修改
5、注册会员
虽说仍然可以突破验证码,Curl填写参数然后POST过去,但是门槛毕竟高了一丁点,还是忽略吧。
6、手机
投票时输入手机号和短信验证码,成本高,单位不愿意。用户发送某某指令到某某,用户自掏腰包,用户不愿意。
目前来说,只有验证码,手机并且验证手机的有效性是最好的防治措施。
相关文章
- 这篇文章主要介绍了C# 字段和属性的的相关资料,文中示例代码非常详细,供大家参考和学习,感兴趣的朋友可以了解下...2020-11-03
- eval函数在php中是一个函数并不是系统组件函数,我们在php.ini中的disable_functions是无法禁止它的,因这他不是一个php_function哦。 eval()针对php安全来说具有很...2016-11-25
- 在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
- 下面本文章来给大家介绍在php中成员变量的一些对比了,文章举了四个例子在这例子中分别对不同成员变量进行测试与获取操作,下面一起来看看。 有如下4个代码示例,你认...2016-11-25
Python astype(np.float)函数使用方法解析
这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08- 这篇文章主要介绍了Mybatis Plus select 实现只查询部分字段的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-01
- 这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
- 本文主要介绍了C#变量命名规则小结,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-09
- 本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
- 下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
- 这篇文章主要介绍了mybatis-plus 返回部分字段的解决方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-02
- 这篇文章主要介绍了R语言删除指定变量或对象的操作方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-06
- CREATE FUNCTION ChangeBigSmall (@ChangeMoney money) RETURNS VarChar(100) AS BEGIN Declare @String1 char(20) Declare @String2 char...2016-11-25
解决vue的router组件component在import时不能使用变量问题
这篇文章主要介绍了解决vue的router组件component在import时不能使用变量问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-27- 这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
Android开发中findViewById()函数用法与简化
findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20- 这篇文章主要介绍了postgresql数据添加两个字段联合唯一的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-04
- strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。语法:strstr(string,search)参数string,必需。规定被搜索的字符串。 参数sea...2013-10-04
- 这篇文章主要介绍了Vue select 绑定动态变量的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-23
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
废话不多说直接上代码复制代码 代码如下:/********************** curl 系列 ***********************///直接通过curl方式取得数据(包含POST、HEADER等)/* * $url: 如果非数组,则为http;如是数组,则为https * $header:...2014-06-07