2016-05-24 19 views
0

私のクライアントは、ユーザーがマシン上のパスを入力できるWebサイトを作成するように頼んだので、PHPはパスをスキャンし、ディレクトリとサブディレクトリ内のすべてのメディアファイルをロードする必要があります。ユーザーはルートディレクトリの外にある任意のパス、デスクトップ、または外部ドライブを入力できます。それはクライアントが望むもので、彼はLinux上で動作しています。ルートディレクティング以外のファイルへのアクセス

は、私はPHPがルート外のファイルにアクセスすることはできません彼に言った、彼はそれができそう、彼は私がいくつかのプロキシを使用するべきであると述べたと、彼は

<!doctype html> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>Untitled Document</title> 
</head> 

<?PHP 
session_start(); 
function getFileList($dir) 
    { 
    // array to hold return value 
    $retval = array(); 

    // add trailing slash if missing 
    if(substr($dir, -1) != "/") $dir .= "/"; 

    // open pointer to directory and read list of files 
    $d = @dir($dir) or die("getFileList: Failed opening directory $dir for reading"); 
    while(false !== ($entry = $d->read())) { 
     // skip hidden files 
     if($entry[0] == ".") continue; 
     if(is_dir("$dir$entry")) { 
     $retval[] = array(
      "name" => "$entry/" 
     ); 
     } elseif(is_readable("$dir$entry")) { 
     $retval[] = array(
      "name" => "$entry" 
     ); 
     } 
    } 
    $d->close(); 

    return $retval; 
    } 
$dirlist = getFileList("F:\uni\M2\Thesis\hmayed\ali\songs wav"); 

    // output file list in HTML TABLE format 
    echo "<table border=\"1\">\n"; 
    echo "<thead>\n"; 
    echo "<tr><th>Name</th></tr>\n"; 
    echo "</thead>\n"; 
    echo "<tbody>\n"; 
    foreach($dirlist as $file) { 
    echo "<form action=\"MusicP.php\" Method = \"POST\" \">\n"; 

    echo "<input value =\" F:\\uni\\M2\\Thesis\\hmayed\\ali\\songs wav\\{$file['name']}\" type = \"submit\" name= \"submit\" id=\"{$file['name']}\">\n"; 

    echo "</tr>\n"; 
    } 
    echo "</form>\n"; 
    echo "</table>\n\n"; 


?> 
<audio src = "File:///F:\uni\M2\Thesis\songs\1.mp3" type= "audio/mp3" controls> 
Your browser does not support the audio element. 
</audio> 

<body> 
</body> 
</html> 

だから、私に私の質問に、このスクリプトを送りました

  • このスクリプトまたはこのタイプのスクリプトは機能しますか?プロジェクト は実現可能ですか?
  • そして、私が/というApache仮想サーバーを作成すると、すべてのファイルシステムが読み込まれますか?私はそれを試みたことはありません。
+1

どちらのアプローチが可能であり、両方とも同じように安全ではありません。技術的な問題を引き起こす唯一のものは、ファイルシステムのアクセス許可です。 'sudo'のような拡張機能を使うと、それを回避することもできますが、明らかに物事はさらに不安になります。たとえば、システムアカウントのパスワードを読み取ることができます。いいことではないですか? – arkascha

+0

@arkascha彼はラズベリーパイのデモンストレーションをしているだけで、セキュリティについては心配していません。 – Lynob

+1

なぜセキュリティを気にしてはいけないのかわかりません。私は私のネットワークにこのようなゾンビを持っていたいとは思わない。しかし、あなたが主張している場合... URLをシステムに公開するよう依頼できますか?私たちは皆それを使用したいと思っています... – arkascha

答えて

2

あなたはファイルリストを取得するには、シェルコマンドにプロキシへのPHPスクリプトを使用することができます。

<?php 

print nl2br(shell_exec('find /tmp')); 

は、ユーザーが値を拠出して上記の例では/ tmpを交換してください。

さらに、メディアファイルを再生するために、あなたは(心の中で、セキュリティの波及効果をご負担ください)以下のような何かができる:

<?php 

$file = isset($_GET['file']) ? $_GET['file'] : null; 

if($file) serve_file($file); 

function serve_file($file) { 
    header('Content-Type: audio/mpeg'); 
    readfile($file); 
    exit; 
} 

$dir = '/tmp'; 
$music = shell_exec("find $dir -name '*.mp3'"); 
$music = explode("\n", $music); 
$music = array_filter($music); 

// html here... 

foreach($music as $file) {?> 
    <a href="?file=<?php echo urlencode($file) ?>"><?php echo $file; ?></a><br /> 
<? 
} 
+0

それを試してみると大いにありがとう – Lynob

+0

私はfindを使って 'find' mp3sをPHPのリストにロードする方法を知っていますので、jquery playerで再生できますか?またはmplayerの使用を提案していますか? – Lynob

+0

@Lynobそれは別の質問です。申し訳ありませんが、私はその部分を逃しました。 – Progrock

関連する問題