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。