2012-08-13 3 views
1

Я встраиваю некоторые mp3-файлы на свой сайт. Проблема в том, что некоторые из этих имен различны, и мой сайт не знает, как вставлять - если я не определяю все файлы с правильными именами.PHP Scrape Mp3 File

Например,

http://example.com/chapter1/book-[some random name].001.mp3

Я создал свой сайт, чтобы он встраивается как этот

http://example.com/chapter1/book.001.mp3

Есть ли возможно решение, которое можно использовать с PHP, так это авто заполняет [some random name].

+2

Большинство веб-серверов, как правило, работают на том основании, что ссылки вы положили в них указывают на реальные файлы. Вы хотите автоматически генерировать эти ссылки? загляните в «DirectoryIterator» или даже «glob». если вы делаете это вручную, затем кусаете пулю и сами вводите правильные имена файлов или переименовываете свои файлы в соответствии с сайтом. –

ответ

1

У вас есть несколько вариантов,

  1. Вывести путь к файлу правильно (простой)

  2. Создание и хранение реестра из mp3s в БД или плоский файл и использовать mod_rewrite для передачи параметры сценария загрузчика. (Пример ниже)

<?php 
/* mod_rewrite .htaccess in chapters folder 
RewriteEngine On 
Options -Indexes 
RewriteBase /chapter1 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*).mp3$ index.php?loadmp3=$1 [L] 
*/ 
$mp3_dir='./mp3s/'; 
//Example passed url: http://localhost/chapter1/book.002.mp3 
if(isset($_GET['loadmp3'])){ 
    $real_path = get_mp3_list($_GET['loadmp3']); 
    if($real_path != false){ 
     //Result: ./mp3s/book-next_random_name.002.mp3 
     print_r($real_path); 
     //Pass the url to a streamer script 
    }else{ 
     //not found 
    } 
} 
/** 
* Build & cache, search for mp3 from array 
*/ 
function get_mp3_list($search){ 
    global $mp3_dir; 
    if(file_exists($mp3_dir.'mp3s.json')){ 
     $list = json_decode(file_get_contents($mp3_dir.'mp3s.json'),true); 
    }else{ 
     $mp3s = glob($mp3_dir."*.mp3"); 
     $list = array(); 
     foreach($mp3s as $mp3){ 
      if(preg_match("#(\w+)-(\w+).(\d+).mp3#", $mp3, $match)){ 
       $list[]=array('location'=>$mp3, 
       'type'=>$match[1], 
       'name'=>$match[2], 
       'episode'=>$match[3]); 
      } 
      if(!empty($list)){file_put_contents($mp3_dir.'mp3s.json', json_encode($list));} 
     } 
    } 

    $search = explode('.',$search,2); 
    foreach($list as $mp3){ 
     if($mp3['type'] == $search[0] && $mp3['episode'] == $search[1]){ 
      return $mp3['location']; 
     } 
    } 
    return false; 
} 
/* 
$list Example Array 
(
    [0] => Array 
     (
      [location] => ./mp3s/book-next_random_name.002.mp3 
      [type] => book 
      [name] => next_random_name 
      [episode] => 002 
     ) 

    [1] => Array 
     (
      [location] => ./mp3s/book-some_random_name.001.mp3 
      [type] => book 
      [name] => some_random_name 
      [episode] => 001 
     ) 

) 
*/ 
?> 

Надеюсь, что это помогает

+0

Спасибо за этот код! – sliceruk