atdefinephp
A. php中curl模拟登入可用例子贴一个
<?php
// Class HttpCurl
class HttpCurl {
private $_ch, $_cookie, $_info, $_body, $_error;
public function __construct() {
if (!function_exists('curl_init')) {
throw new Exception('cURL not enabled!');
}
}
public function get($url) {
$this->_ch = curl_init();
curl_setopt($this->_ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; rv:22.0) Gecko/20100101 Firefox/22.0');
curl_setopt($this->_ch, CURLOPT_POST, 0);
curl_setopt($this->_ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($this->_ch, CURLOPT_MAXREDIRS, 5);
curl_setopt($this->_ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($this->_ch, CURLOPT_COOKIEFILE, getcwd () . '/facebook_cookie' );
curl_setopt($this->_ch, CURLOPT_COOKIEJAR, getcwd () . '/facebook_cookie' );
curl_setopt($this->_ch, CURLOPT_SSL_VERIFYPEER, false );
curl_setopt($this->_ch, CURLOPT_SSL_VERIFYHOST, false );
curl_setopt($this->_ch, CURLOPT_URL, $url);
$this->_body = curl_exec($this->_ch);
$this->_info = curl_getinfo($this->_ch);
$this->_error = curl_error($this->_ch);
curl_close($this->_ch);
}
public function post($url, $post_data) {
$this->_ch = curl_init();
curl_setopt($this->_ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; rv:22.0) Gecko/20100101 Firefox/22.0');
curl_setopt($this->_ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($this->_ch, CURLOPT_MAXREDIRS, 5);
curl_setopt($this->_ch, CURLOPT_HEADER, 0);
curl_setopt($this->_ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($this->_ch, CURLOPT_SSL_VERIFYPEER, false );
curl_setopt($this->_ch, CURLOPT_SSL_VERIFYHOST, false );
curl_setopt($this->_ch, CURLOPT_ENCODING, "" );
curl_setopt($this->_ch, CURLOPT_POST, TRUE);
curl_setopt($this->_ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($this->_ch, CURLOPT_COOKIEFILE, getcwd () . '/facebook_cookie' );
curl_setopt($this->_ch, CURLOPT_COOKIEJAR, getcwd () . '/facebook_cookie' );
curl_setopt($this->_ch, CURLOPT_URL, $url);
$this->_body = curl_exec($this->_ch);
$this->_info = curl_getinfo($this->_ch);
$this->_error = curl_error($this->_ch);
curl_close($this->_ch);
}
// Get http_code
public function getStatus() {
return $this->_info[http_code];
}
// Get web page header information
public function getHeader() {
return $this->_info;
}
public function getHandle() {
return $this->_ch;
}
// Get web page content
public function getBody() {
return $this->_body;
}
public function __destruct() {
}
}
?>
<?php
define('FORM','~<form method="post" (.*?)</form>~s');
define('ACTION','~action=(?:["\'])?([^"\'\s]*)~i');
define('INPUT','~<input(.*?)>~');
define('NAME','~name=(?:["\'])?([^"\'\s]*)~i');
define('VALUE','~value=(?:["\'])?([^"\'\s]*)~i');
class FBform extends HttpCurl {
private $_url;
private $_inputs = array();
public function __construct() {}
public function __destruct() {}
public function fbLogin($username, $password) {
unset ($this->_inputs);
unset ($this->_url);
$this->getFormFields();
echo "<pre>";
echo "FB Login ";
echo $this->_url . "<br>";
print_r($this->_inputs);
echo "<pre>";
$this->_inputs['email']=$username;
$this->_inputs['pass']=$password;
$this->_url = FB . $this->_url;
$post_field = $this->arrayImplode( '=', '&', $this->_inputs);
$this->post($this->_url, $post_field);
}
public function fbStatusUpdate($status) {
unset ($this->_inputs);
unset ($this->_url);
$this->getFormFields();
echo "<pre>";
echo "FB Status Update ";
echo $this->_url . "<br>";
print_r($this->_inputs);
echo "<pre>";
$this->_inputs['status']=$status;
$this->_url = FB . $this->_url;
$post_field = $this->arrayImplode( '=', '&', $this->_inputs);
$this->post($this->_url, $post_field);
}
public function arrayImplode( $glue, $separator, $array ) {
$string = array();
foreach ( $array as $key => $val ) {
if ( is_array( $val ) )
$val = implode( ',', $val );
$string[] = "{$key}{$glue}{$val}";
}
return implode( $separator, $string );
}
public function getFormFields() {
if (preg_match(FORM, parent::getBody(), $form)) {
preg_match(ACTION, $form[0], $action);
$this->_url= $action[1];
preg_match_all(INPUT, $form[0], $fields);
foreach ($fields[0] as $field) {
if (preg_match(NAME, $field, $name)) {
$name = $name[1];
$value = '';
if (preg_match(VALUE, $field, $value)) $value = $value[1];
if ($value!=NULL) $this->_inputs[$name] = $value;
}
}
return $this->_inputs;
} else {
echo "Error, Form not found!"; }
}
}
?>
<?php
include 'httpcurl.php';
include 'fbform.php';
$fbhomepage = 'xxxxx';
$username = "xxxxxx"; // Insert your login email
$password = "xxxxxx"; // Insert your password
$status = "This is my script on remote status update with php/cURL on Facebook! Check it out at !";
$pages = new FBform();
$pages->get($fbhomepage);
$pages->fblogin($username, $password);
$pages->get($fbhomepage);
$pages->fbstatusupdate($status);
?>
B. Fatal error: Call to a member function fetch_array() on a non-objectinC:\1\admin\login.phponline10
$result不是一个对象。
C. Uncaught ReferenceError显示“is not defined错误”怎么办
最可能的是引用的各个js的调用顺序有误,重新调整其引用顺序。
D. Warning: preg_match() expects at least 2 parameters, 1 given in /
preg_match() 参数错了,你两个单引号把两个参数引起来了,而且没有定界符
eg: preg_match('/(\d+)/', $str);
E. php怎么抓取这个链接https://locate.apple.com/cn/zh/service/pt=3&lat=23.134521&lon=113.358803的源码
<?php
function dg_string($data,$flagA, $flagB, $start = 0){//配套截取字符串
$flagAL=strlen($flagA);
$flagBL=strlen($flagB);
$rn='';
$a=$b=0;
if(($findA=strpos($data,$flagA, $start))!==false){
$a=1;
$tmpA=$findA;
$findB=$findA+$flagAL;
$findA=$findB;
while($a!=$b){
if(($findB = strpos($data, $flagB, $findB))!==false){
$b++;
if(($findA = strpos($data, $flagA, $findA))!==false){
if($findA>$findB){
if($a==$b){
//结束
$findB+=$flagBL;
$rn=substr($data,$tmpA,$findB-$tmpA);
} else {
$a++;
$findB=$findA+$flagAL;
$findA=$findB;
}
} else {
$a++;
$findA+=$flagAL;
$findB+=$flagBL;
}
} else {
if($a==$b){
//结束
$findB+=$flagBL;
$rn=substr($data,$tmpA,$findB-$tmpA);
} else {
//标记不完整
$findB+=$flagBL;
}
}
} else {
//标记不完整
$rn=substr($data,$tmpA);
$rn.=str_repeat($flagB,$a-$b);
break;
}
}
}
return $rn;
}
$html = file_get_contents('https://locate.apple.com/cn/zh/service/?pt=3&lat=23.134521&lon=113.358803');//获取源码
$find = strpos($html, 'window.resourceLocator.setup');
$json1 = dg_string($html, '{', '}', $find);//获取第一个JSON数据
$find = strpos($html, 'window.resourceLocator.storeSetup');
$json2 = dg_string($html, '{', '}', $find);//获取第二个JSON数据
$arr1 = json_decode($json1, true);//第一个JSON数据转为数组
$arr2 = json_decode($json2, true);//第二个JSON数据转为数组
print_r($arr1);
print_r($arr2);
//得到了数组,你想获取哪个参数都行了,你自己看着办吧,楼主可亲测代码
?>
F. php7有哪些特有更新细节
标量类型声明¶
标量类型声明有两种模式: 强制 (默认) 和 严格模式。 现在可以使用下列类型参数(无论用强制模式还是严格模式): 字符串(string), 整数 (int), 浮点数 (float), 以及布尔值 (bool)。它们扩充了PHP5中引入的其他类型:类名,接口,数组和回调类型。
<?php
//Coercivemode
functionsumOfInts(int...$ints)
{
returnarray_sum($ints);
}
var_mp(sumOfInts(2,'3',4.1));
以上例程会输出:
int(9)
要使用严格模式,一个declare声明指令必须放在文件的顶部。这意味着严格声明标量是基于文件可配的。 这个指令不仅影响参数的类型声明,也影响到函数的返回值声明(参见返回值类型声明, 内置的PHP函数以及扩展中加载的PHP函数)
完整的标量类型声明文档和示例参见类型声明章节。
返回值类型声明¶
PHP 7 增加了对返回类型声明的支持。 类似于参数类型声明,返回类型声明指明了函数返回值的类型。可用的类型与参数声明中可用的类型相同。
<?php
functionarraysSum(array...$arrays):array
{
returnarray_map(function(array$array):int{
returnarray_sum($array);
},$arrays);
}
print_r(arraysSum([1,2,3],[4,5,6],[7,8,9]));
以上例程会输出:
Array
(
[0] => 6
[1] => 15
[2] => 24
)
完整的标量类型声明文档和示例可参见返回值类型声明.
null合并运算符¶
由于日常使用中存在大量同时使用三元表达式和isset()的情况, 我们添加了null合并运算符 (??) 这个语法糖。如果变量存在且值不为NULL, 它就会返回自身的值,否则返回它的第二个操作数。
<?php
//Fetchesthevalueof$_GET['user']andreturns'nobody'
//ifitdoesnotexist.
$username=$_GET['user']??'nobody';
//Thisisequivalentto:
$username=isset($_GET['user'])?$_GET['user']:'nobody';
//Coalescescanbechained:thiswillreturnthefirst
//definedvalueoutof$_GET['user'],$_POST['user'],and
//'nobody'.
$username=$_GET['user']??$_POST['user']??'nobody';
?>
太空船操作符(组合比较符)¶
太空船操作符用于比较两个表达式。当$a小于、等于或大于$b时它分别返回-1、0或1。 比较的原则是沿用 PHP 的常规比较规则进行的。
<?php
//整数
echo1<=>1;//0
echo1<=>2;//-1
echo2<=>1;//1
//浮点数
echo1.5<=>1.5;//0
echo1.5<=>2.5;//-1
echo2.5<=>1.5;//1
//字符串
echo"a"<=>"a";//0
echo"a"<=>"b";//-1
echo"b"<=>"a";//1
?>
通过define()定义常量数组¶
Array类型的常量现在可以通过define()来定义。在 PHP5.6 中仅能通过const定义。
<?php
define('ANIMALS',[
'dog',
'cat',
'bird'
]);
echoANIMALS[1];//输出"cat"
?>
匿名类¶
现在支持通过new class来实例化一个匿名类,这可以用来替代一些“用后即焚”的完整类定义。
<?php
interfaceLogger{
publicfunctionlog(string$msg);
}
classApplication{
private$logger;
publicfunctiongetLogger():Logger{
return$this->logger;
}
publicfunctionsetLogger(Logger$logger){
$this->logger=$logger;
}
}
$app=newApplication;
$app->setLogger(newclassimplementsLogger{
publicfunctionlog(string$msg){
echo$msg;
}
});
var_mp($app->getLogger());
?>
以上例程会输出:
object(class@anonymous)#2 (0) {
}
详细文档可以参考匿名类.
Unicode codepoint 转译语法¶
这接受一个以16进制形式的 Unicode codepoint,并打印出一个双引号或heredoc包围的 UTF-8 编码格式的字符串。 可以接受任何有效的 codepoint,并且开头的 0 是可以省略的。
echo"u{aa}";
echo"u{0000aa}";
echo"u{9999}";
以上例程会输出:
ª
ª (same as before but with optional leading 0's)
香
Closure::call()¶
Closure::call()现在有着更好的性能,简短干练的暂时绑定一个方法到对象上闭包并调用它。
<?php
classA{private$x=1;}
//PHP7之前版本的代码
$getXCB=function(){return$this->x;};
$getX=$getXCB->bindTo(newA,'A');//中间层闭包
echo$getX();
//PHP7+及更高版本的代码
$getX=function(){return$this->x;};
echo$getX->call(newA);
以上例程会输出:
1
1
为unserialize()提供过滤¶
这个特性旨在提供更安全的方式解包不可靠的数据。它通过白名单的方式来防止潜在的代码注入。
<?php
//将所有的对象都转换为__PHP_Incomplete_Class对象
$data=unserialize($foo,["allowed_classes"=>false]);
//将除MyClass和MyClass2之外的所有对象都转换为__PHP_Incomplete_Class对象
$data=unserialize($foo,["allowed_classes"=>["MyClass","MyClass2"]);
//默认情况下所有的类都是可接受的,等同于省略第二个参数
$data=unserialize($foo,["allowed_classes"=>true]);
IntlChar¶
新增加的IntlChar类旨在暴露出更多的 ICU 功能。这个类自身定义了许多静态方法用于操作多字符集的 unicode 字符。
<?php
printf('%x',IntlChar::CODEPOINT_MAX);
echoIntlChar::charName('@');
var_mp(IntlChar::ispunct('!'));
以上例程会输出:
10ffff
COMMERCIAL AT
bool(true)
若要使用此类,请先安装Intl扩展
预期¶
预期是向后兼用并增强之前的assert()的方法。 它使得在生产环境中启用断言为零成本,并且提供当断言失败时抛出特定异常的能力。
老版本的API出于兼容目的将继续被维护,assert()现在是一个语言结构,它允许第一个参数是一个表达式,而不仅仅是一个待计算的string或一个待测试的boolean。
<?php
ini_set('assert.exception',1);
{}
assert(false,newCustomError('Someerrormessage'));
?>
以上例程会输出:
Fatal error: Uncaught CustomError: Some error message
关于这个特性的完整说明,包括如何在开发和生产环境中配置它,可以在assert()的expectations section章节找到。
Groupusedeclarations¶
从同一namespace导入的类、函数和常量现在可以通过单个use语句 一次性导入了。
<?php
//PHP7之前的代码
usesome
amespaceClassA;
usesome
amespaceClassB;
usesome
amespaceClassCasC;
usefunctionsome
amespacefn_a;
usefunctionsome
amespacefn_b;
usefunctionsome
amespacefn_c;
useconstsome
amespaceConstA;
useconstsome
amespaceConstB;
useconstsome
amespaceConstC;
//PHP7+及更高版本的代码
usesome
amespace{ClassA,ClassB,ClassCasC};
usefunctionsome
amespace{fn_a,fn_b,fn_c};
useconstsome
amespace{ConstA,ConstB,ConstC};
?>
生成器可以返回表达式¶
此特性基于 PHP 5.5 版本中引入的生成器特性构建的。 它允许在生成器函数中通过使用return语法来返回一个表达式 (但是不允许返回引用值), 可以通过调用Generator::getReturn()方法来获取生成器的返回值, 但是这个方法只能在生成器完成产生工作以后调用一次。
<?php
$gen=(function(){
yield1;
yield2;
return3;
})();
foreach($genas$val){
echo$val,PHP_EOL;
}
echo$gen->getReturn(),PHP_EOL;
以上例程会输出:
1
2
3
在生成器中能够返回最终的值是一个非常便利的特性, 因为它使得调用生成器的客户端代码可以直接得到生成器(或者其他协同计算)的返回值, 相对于之前版本中客户端代码必须先检查生成器是否产生了最终的值然后再进行响应处理 来得方便多了。
Generator delegation¶
现在,只需在最外层生成其中使用yield from, 就可以把一个生成器自动委派给其他的生成器,Traversable对象或者array。
<?php
functiongen()
{
yield1;
yield2;
yieldfromgen2();
}
functiongen2()
{
yield3;
yield4;
}
foreach(gen()as$val)
{
echo$val,PHP_EOL;
}
?>
以上例程会输出:
1
2
3
4
整数除法函数intdiv()¶
新加的函数intdiv()用来进行 整数的除法运算。
<?php
var_mp(intdiv(10,3));
?>
以上例程会输出:
int(3)
会话选项¶
session_start()可以接受一个array作为参数, 用来覆盖 php.ini 文件中设置的会话配置选项。
在调用session_start()的时候, 传入的选项参数中也支持session.lazy_write行为, 默认情况下这个配置项是打开的。它的作用是控制 PHP 只有在会话中的数据发生变化的时候才 写入会话存储文件,如果会话中的数据没有发生改变,那么 PHP 会在读取完会话数据之后, 立即关闭会话存储文件,不做任何修改,可以通过设置read_and_close来实现。
例如,下列代码设置session.cache_limiter为private,并且在读取完毕会话数据之后马上关闭会话存储文件。
<?php
session_start([
'cache_limiter'=>'private',
'read_and_close'=>true,
]);
?>
preg_replace_callback_array()¶
在 PHP 7 之前,当使用preg_replace_callback()函数的时候, 由于针对每个正则表达式都要执行回调函数,可能导致过多的分支代码。 而使用新加的preg_replace_callback_array()函数, 可以使得代码更加简洁。
现在,可以使用一个关联数组来对每个正则表达式注册回调函数, 正则表达式本身作为关联数组的键, 而对应的回调函数就是关联数组的值。
CSPRNGFunctions¶
新加入两个跨平台的函数:random_bytes()和random_int()用来产生高安全级别的随机字符串和随机整数。
可以使用list()函数来展开实现了ArrayAccess接口的对象¶
在之前版本中,list()函数不能保证 正确的展开实现了ArrayAccess接口的对象, 现在这个问题已经被修复。
其他特性¶
允许在克隆表达式上访问对象成员,例如:(clone $foo)->bar()。
参见网页链接
G. php中如何给类规范的注释
需要准备的材料分别是:电脑、phpstrom编辑器。
1、首先,打开phpstrom编辑器,新建php文件,例如:index.php,定义一个函数示例。
H. You have an error in your SQL syntax,php执行mysql错误
问题就出现在这个地方:$query="INSERT INTO grade (name,email,point,regdate) values ($a,$b,$c,now())";
不能在这条语句中用now(),而且php中是没有now这个函数的,应该用time(),而且应该先设置这个值再添加,而且必须在char型的数据外面加单引号如下:
$addtime = time();//时间戳形式!整型数据,如果你的regdate是int型的话用这个
$query="INSERT INTO grade (name,email,point,regdate) values ('$a','$b','$c',$addtime)";
如果你的regdate是datetime的话:如下
$addtime = date('Y-m-d H:i:s');
$query="INSERT INTO grade (name,email,point,regdate) values ('$a','$b','$c','$addtime')";
I. 有关PHP中require的问题
看看之前是不是有一个这样的语句
define("ROOT", "**********");
这个语句是定义常数ROOT的值
define
(PHP 3, PHP 4, PHP 5)
define -- Defines a named constant
说明
bool define ( string name, mixed value [, bool case_insensitive] )
Defines a named constant at runtime.
参数
name
The name of the constant.
value
The value of the constant.
case_insensitive
If set to TRUE, the constant will be defined case-insensitive. The default behaviour is case-sensitive; i.e. CONSTANT and Constant represent different values.
返回值
如果成功则返回 TRUE,失败则返回 FALSE。