那如果考慮突破防盜鏈的措施,就需要考慮在 HTTP_REFERER 上面做手腳了。 PHP 腳本中對應的變數是 $_SERVER['HTTP_REFERER'] ,它儲存了 HTTP_REFERER 的值。
由於直接存取目標 URL 資源已經被上述防盜鏈的措施所屏蔽,所以我們需要個類似網關的玩意去獲取。說穿了就是寫已經包裝過的 HTTP 頭的 PHP 腳本。
以下是簡單的函數實作:
複製程式碼 程式碼如下:
function getRemoteFile(>
function getRemoteFile($url, $refer = '') {
$option = array(
'http' => array(
'header' => "Referer:$refer")
);
$context = stream_context_create ($option);
return file_get_contents($url, false, $context);
這是比較簡單的函數,其功能就是偽造Referer (使用stream_context_create 函數)接著取得對方的資料(使用file_get_contents,需要開啟allow_url_fopen )。
如果想「複雜」一點,可以使用 sockets 擴展,這不在這裡的討論範圍以內。
另外,再提供一個取得主機名稱的正規函數複製程式碼
程式碼如下:
程式碼如下:
function getHost($url) {
$result = preg_match('/^http://([d|w|.]+)//', $url, $matches);
if (sizeof($ matches) >= 2) {
}
再進一步的擴展,可以封裝成腳本,然後譬如調用http://127.0.0.1/proxy.php?url=http://i.am/img就可以獲得那些開啟防盜鏈措施的連結了(再發揮下,使用Javascript 將圖片連結全部替換)。 以上就介紹了 php中突破基於HTTP_REFERER的防盜鏈措施stream_context_create,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。