phprefer
A. php 寫評論列表
我覺得可以這樣做,先備份一下這個數組,然後循環判斷這個數組中的每一個子元素,如果該子元素的next欄位有值,就把這個子元素作為子節點附加到其next的節點,這樣就會形成一個樹狀結構,其對應的子評論就好找了。可能有些麻煩了,不知道還有沒有其它更好的方法。
下面是給你寫的生成樹的方法:
function list_to_tree($list) {
// 創建Tree
$tree = array();
if(is_array($list)) {
$refer = array();
foreach ($list as $key => $data) {
$refer[$data['id']] =& $list[$key];
}
foreach ($list as $key => $data) {
$parentId = $data['next'];
if (0 == $parentId) {
$tree[$data['id']] =& $list[$key];
}else{
if (isset($refer[$parentId])) {
$parent =& $refer[$parentId];
$parent['_child'][$data['id']] =& $list[$key];
}
}
}
}
return $tree;
}
剩下的取每一個父節點的子節點就比較好取了,希望對你有幫助。
B. php如何實現登陸後返回原頁面
訪問網站頁面時,有的頁面需要授權才能訪問,這時候就會要求用戶登錄,跳轉到登錄頁面login.php,怎麼實現登錄後返回到剛才訪問的頁面
項目需求
訪問網站頁面時,有的頁面需要授權才能訪問,這時候就會要求用戶登錄,跳轉到登錄頁面login.php,怎麼實現登錄後返回到剛才訪問的頁面。
解決思路1:
在跳轉到登錄頁面之前要將當前訪問頁面的url保存到cookie裡面,登錄驗證授權通過後,從cookie中取出這個url值,跳轉到該 url指定的頁面。
具體實現
我現在的程序是基於ThinkPHP框架的,我們會有一個父類控制器,下面我就把這個設置cookie的代碼加到這個BaseAction裡面的_initialize()函數中,這樣程序就大大簡化工作量了。
代碼如下:
Cookie::set('refer', $refer);
登錄檢測的函數裡面我們加入:
代碼如下:
$refer = Cookie::get('refer');
現在這個$refer就是我們之前訪問的頁面,我們可以通過AJAX返回這個參數,然後進行跳轉,或者直接使用程序進行跳轉,具體要根據你程序的需求了。
解決思路2:
除了存成cookie的形式,相信大家也看到了很多大型網站直接採用GET的形式獲得,Drupal的登陸機制就是這樣。
這種思路具體是這樣的:
在跳轉到登錄頁面前要將訪客訪問的頁面的url作為參數傳遞過去,登錄驗證後,授予訪問許可權之後跳轉到該url指定的頁面。
比如登錄前的url為:openphp.html 當訪客訪問時,點擊無許可權,跳轉到登錄頁面的地址就為login.php?url=openphp.html,這樣在登錄時就可以用GET方式獲取該參數 openphp.html,登錄驗證成功後跳轉到openphp.html 這個頁面就可以了。
大致上我也就這兩種思路了,如果你有更好的思路,真心希望你可以告訴我。
C. php怎麼通過refer來禁止外部盜鏈
應該是reffer,判斷reffer是否為本站,如果是,則說明來源本站,可以提供圖片,反之,就拒絕
當然,reffer可以偽造,有的時候reffer丟失等會導致判斷出錯~,所以,並不是一個完美的解決方案
D. PHP中如何發送HTTP請求
看起來你的代碼正確,不知道你有什麼問題。
這個方法不錯,但是最好用一個封裝好的類。
比如http_client之類的,網上這樣的類挺多了,你可以搜索一下。
當然直接用socket也可以。
E. php遞歸查詢不會,,求教。就是一個三級分類傳個ID找到他的上級,還有父級。。
這種類型的數據,一般資料庫中,一張表會有存在兩個欄位,一個是它本身id,另一個是它的父級parent_id。
既然要找到它的祖父級,sql語句這樣寫:
$id = empty($_POST['id'])?'':$_POST['id'];
$parent_id = get_parent_id($id);
$p_p_id = get_parent_id($parent_id);
function get_parent_id($id){
$sql = "select parent_id from ecs_table1 where id=" . $id;
return($GLOBALS['db']->getone($sql ));
}
遞歸,就是根據現有的id,重復取。
上面get_parent_id只是獲取父id,當然,你可以寫一個直接獲取祖父id的函數。
不過,現在大部分php網站,都只會有獲取父類的函數,想discuz,ecshop等。獲取祖父id,就是不斷的獲取該id的父id。
F. php偽造referer獲取header,請大神指教
$out那部分不能這么寫
$out="GET$targetHTTP/1.1 Host:$host Referer:$referer Connection:Close ";
開頭不能有空行,且每一行必須有換行符分隔
或者用
$out="GET$targetHTTP/1.1 ";
$out.="Host:$host ";
$out.="Referer:$referer ";
$out.="Connection:Close ";
G. php獲取url參數程序代碼總結
parse_url函數
我們先來了解一下parse_url函數,官方解決
說明
mixed
parse_url
(
string
$url
[,
int
$component
=
-1
]
)
本函數解析一個
URL
並返回一個關聯數組,包含在
URL
中出現的各種組成部分。
本函數不是用來驗證給定
URL
的合法性的,只是將其分解為下面列出的部分。不完整的
URL
也被接受,
parse_url()
會嘗試盡量正確地將其解析。
要解析的
URL。無效字元將使用
_
來替換。
實例
代碼如下
$url
=
"http://www.45it.net/welcome/";
$parts
=
parse_url($url);
print_r($parts);
array
(
[scheme]
=>
http
[host]
=>
www.45it.net
[path]
=>
/welcome/
)
也可以自己去寫一個演算法!如下
代碼如下
function
getParams()
{
$url
=
'/index.php?_p=index&_a=show&x=12&y=23';
$refer_url
=
parse_url($url);
$params
=
$refer_url['query'];
$arr
=
array();
if(!empty($params))
{
$paramsArr
=
explode('&',$params);
foreach($paramsArr
as
$k=>$v)
{
$a
=
explode('=',$v);
$arr[$a[0]]
=
$a[1];
}
}
return
$arr;
}
調用方法
代碼如下
$arr
=
getParams();
print_r($arr);
結果
結果:
Array
(
[_p]
=>
index
[_a]
=>
show
[x]
=>
12
[y]
=>
23
)
H. php偽造referer,那個大神會高分懸賞!
要偽裝必須自己發送request,如果你想用瀏覽器發送request並且偽裝refer,那麼你就得破解了瀏覽器並且找出漏洞(顯然這個是不容易的)。
如果自己發送request的話,用curl就可以了
$url="";//要訪問的地址
$refer="";//偽造的來源
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_REFERER,$refer);
$r=curl_exec($ch);
curl_close($ch);
I. php一個下載地址防盜的判斷 大牛進來看下!
$_SERVER['HTTP_REFERER']可以判斷,如果是用戶直接訪問,那$_SERVER['HTTP_REFERER']的值應該為空。
J. php:如何實現根據不同的refer訪問到不同的頁面
$_SERVER[HTTP_REFERER]取得來源頁地址,然後比較下