2012-11-01 24 views
1

工作,下面的代碼沒有得到我正確的文件:ReadFile的()不能與某些URL

<?php 
header("Content-Type: application/octet-stream"); 
readfile("http://player.vimeo.com/play_redirect?clip_id=24195442&sig=49daac0ff885745c27601a80402bba14&time=1351783454&quality=hd&codecs=H264&type=moogaloop_local&embed_location="); 
?> 

相反,它似乎下載http://player.vimeo.com/play_redirect?clip_id=24195442。 我曾嘗試使用htmlentitieshtmlspecialchars但它不會改變任何東西。

+1

我沒有花太多時間看這個,但你確定vimeo沒有做一些neato驗證,你不是代理(你在這種情況下)。我曾經經營一個網站,並且人們使用我的服務來代理我們的圖片和視頻,所以我添加了檢查(使用cookie)以確保他們無法做到這一點... vimeo可能有更好的方法來阻止你做這種類型的內容偷竊。 – belial

+0

URL http://player.vimeo.com/play_redirect?clip_id=24195442&sig=49daac0ff885745c27601a80402bba14&time=1351783454&quality=hd&codecs=H264&type=moogaloop_local&embed_location=也會返回Permission denied ..您爲什麼期待另一個結果? – Baba

回答

0

這是視頻和下載網站上常見的事情。爲了防止簡單的直接鏈接或熱鏈接,它們在用戶與頁面,視頻播放器或CAPTCHA交互之後爲主數據生成唯一的URL。這就是您的網址的sigtime部分。這種生成的URL通常通過IP地址綁定到用戶,並在一段時間後過期。

要傳遞該類型的內容,您必須解密用於生成視頻URL的步驟。這通常與請求HTML頁面一樣簡單,然後在Flash小程序參數或腳本標記中查找URL。其他網站在複雜的客戶端腳本或Flash小程序中生成URL。

我快速查看了Vimeo並找出瞭如何獲取URL,它似乎工作正常。試試這個:

$clipId = 24195442; 

ini_set('user_agent', 'Mozilla/5.0 (Windows NT 6.1; rv:10.0.9) Gecko/20100101 Firefox/10.0.9'); 
$config = json_decode(file_get_contents('http://player.vimeo.com/config/' . $clipId)); 
$videoUrl = 'http://player.vimeo.com/play_redirect?clip_id=' . $clipId . 
    '&sig=' . $config->request->signature . 
    '&time=' . $config->request->timestamp; 
header('Content-Type: application/octet-stream'); 
readfile($videoUrl); 

是你必須設置User-Agent字符串。當Vimeo看起來不像真正的瀏覽器時,Vimeo拒絕了它。

我不知道是否有一個Vimeo的API,它說,這是應該工作。要警告的是,只要Vimeo不改變他們的網站結構,它可能只會工作。如果可能的話,最可靠的做法是保存或緩存視頻文件,並從您自己的服務器本地提供。

+0

用戶代理做了竅門,謝謝! – Rudloff

0

試試這個例子,它基於Vimeo Simple API(版本2)。只需複製粘貼&自己嘗試...

http://www.lib.montana.edu/~jason/files/api/vimeo/item.txt

檢查,有必要時要行註釋,以便於使用curl_init()方法。 從第57行開始,最後在第69行開始。但如果第一次運行示例,則忽略它。