2014-09-24 64 views
0

我想在家裏創建一個電影流媒體網站,以便它可以通過網絡瀏覽器在家中的任何地方到達。現在,我被困在瀏覽器中,因爲它位於另一個磁盤上,而不是在網站站點文件夾中,因而無法加載資源。PHP家庭電影流媒體

下面是代碼:

<!DOCTYPE html> 
<html> 
<body> 

<?php 
$type = "video/mp4"; 
$src = "E:/Movies/Movie.mp4"; 
if (file_exists($src)) { 
    echo "<p>File exists."; 
    echo '<video> 
       <source type="$type" src="$src"> 
      </video>'; 
    }?> 
</body> 
</html> 

我怎麼將使加載資源?

+0

我不想讓你分心,這顯然是一個有趣的項目,但是你之前是否遇到過像[Plex](https://plex.tv/)這樣的東西? – Clive 2014-09-24 17:40:38

+1

您可能需要在apache中設置別名以將遠程目錄指向文檔根目錄下的文件夾,或者只需創建一個位於文檔根目錄下的php腳本,然後發送正確的標題並調用'readfile($ src );'。 – 2014-09-24 17:40:39

+0

@Clive,謝謝我聽說過Plex,但是我希望像您建議的那樣將其作爲一個項目自己完成。:) – Warosaurus 2014-09-24 17:49:33

回答

2

從邏輯上考慮你在這裏做什麼。雖然服務器端代碼確實可以看到該文件,但客戶端瀏覽器當然不能。和代碼當前依賴於通過發送給客戶:

<source type="video/mp4" src="E:/Movies/Movie.mp4"> 

想着文件本身,而不是,想想瀏覽器需要對文件中的要求。瀏覽器實際上是使請求在這裏:

  1. 一個用於PHP輸出
  2. 一個在src屬性

對於第二個請求該文件的HTML,你需要另一個PHP「頁面」。 (雖然該「頁面」不會返回網頁,但它將返回實際的文件。)第二頁將需要知道哪個文件被請求並且將需要兩件事:

  1. 它需要知道客戶希望
  2. 它需要的文件流式傳輸到客戶端

在第一部分,你可以將文件名本身添加到URL上的查詢字符串的文件。 你會在這裏小心,因爲客戶端可以請求任何文件,所以在你的服務器端代碼,你要確保未經授權的文件請求被拒絕。但本質上是代碼可能是這個樣子:

$src = "streamMovie.php?file=" . urlencode("E:/Movies/Movie.mp4"); 

這將導致類似:

<source type="video/mp4" src="streamMovie.php?file=E%3A%2FMovies%2FMovie.mp4"> 

現在steamMovie.php知道通過檢查$_GET["file"]值所請求的文件。然後它只需要流式傳輸該文件。我可能進入該部分的細節,但它已經是answered elsewhere

+1

我只是想說,要非常小心這樣的事情。您基本上允許訪問系統上的任何文件,包括敏感文件和php源文件。這裏需要有一些保護來防止加載電影目錄之外的文件。 – 2014-09-24 18:00:52