PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (3): « 1 [2] 3 »

> Найдено сообщений: 32
Maiai Отправлено: 29 Сентября, 2009 - 18:54:16 • Тема: Ограничение скорости file_get_contents() • Форум: Программирование на PHP

Ответов: 10
Просмотров: 704
ну я к примеру привел ф-цию, задача состоит в следующем.

Нужно ограничить скорость загрузки файла на PHP, до определенной скорости
Maiai Отправлено: 29 Сентября, 2009 - 17:55:14 • Тема: Ограничение скорости file_get_contents() • Форум: Программирование на PHP

Ответов: 10
Просмотров: 704
Здравствуйте, вот возникла данная проблема, нужно осуществить, желательно средствами php, ограничение закачки файла (file_get_contents();), погуглив нашел только ограничение скорости отдачи файла.

Заранее благодарен.
Maiai Отправлено: 23 Сентября, 2009 - 12:06:21 • Тема: Не могу разобраться с регулярными выражениями • Форум: Программирование на PHP

Ответов: 1
Просмотров: 169
Здравствуйте,
Никак не могу разобраться с шаблонами ф-ций типа preg_match_all, поэтому прошу помощь составить шаблон что бы выделять url

Примеры:

CODE (text):
скопировать код в буфер обмена
  1. <td id="at"><a href="*URL*" class="ar">*NAME*</a></td>


CODE (text):
скопировать код в буфер обмена
  1. <td style="text-align:left"><a href="*URL*">*NAME*</a>&nbsp;&nbsp;</td>


CODE (text):
скопировать код в буфер обмена
  1. <a href="*URL*" onclick="clck(153746)" title="Download" class="lisdown">Скачать</a>


Нужно выделить *URL*

Заранее благодарен.

Вот, нашел данный шаблон, но он выводит все подряд сылки, нужно оставлять только с раширением .mp3

PHP:
скопировать код в буфер обмена
  1. preg_match_all("!<a[^>]*\shref=[\"']?([^>\"'#\s]+)[\"']?[^>]*>!is",$str,$matches);
Maiai Отправлено: 09 Сентября, 2009 - 19:42:32 • Тема: Не могу найти ошибку в алгоритме. • Форум: Программирование на PHP

Ответов: 10
Просмотров: 480
Ch_chov пишет:
Добавь перед каждым filesize функцию clearstatcache.


Вот, большое спасибо за помощь, эх.. кеширование есть кеширование Улыбка
Maiai Отправлено: 09 Сентября, 2009 - 18:40:04 • Тема: Не могу найти ошибку в алгоритме. • Форум: Программирование на PHP

Ответов: 10
Просмотров: 480
Цитата:
А если song.mp3 заменить на $url?


Ну это ничего не дает. Сейчас постараюсь разъяснить надобность ф-ции.

Что бы получить данные о mp3 файле, его нужно сначала загрузить с фтп на хост (file_get_contents()) после чего полученный контент, записывается в файл song.mp3, после чего с записанного файла считываются все необходимые данные, и закрывается файл. и так каждый раз при вызове ф-ции.

Если сказать короче, для загрузки файла на сервер, и считывания с него данных.

Так как работаю с большим числом файлов, использую буферизацию, что бы в случае чего, был виден текущий ход выполнения операции.
Maiai Отправлено: 09 Сентября, 2009 - 18:27:47 • Тема: Не могу найти ошибку в алгоритме. • Форум: Программирование на PHP

Ответов: 10
Просмотров: 480
Но с остальными данными все нормально, будь то автор жанр и прочее, только размер, song.mp3 каждый раз при вызове ф-ции меняется на загруженный.
Maiai Отправлено: 09 Сентября, 2009 - 18:20:24 • Тема: Не могу найти ошибку в алгоритме. • Форум: Программирование на PHP

Ответов: 10
Просмотров: 480
Тогда извиняюсь, вот подчистил:

PHP:
скопировать код в буфер обмена
  1.  
  2. function get_song($url)
  3. {
  4. flush ();
  5.         $f = file_get_contents($url);
  6.         if(!$f){
  7.                 echo "Не возможно получить файл $url";
  8.         }else{ 
  9.                 $open = fopen("song.mp3", "w+");
  10.                 if(!$open){
  11.                         echo "Не возможно открыть файл song.mp3";
  12.                 }else{
  13.                         if(is_writable("song.mp3")){           
  14.                                 $fr = fwrite($open, $f);
  15.                                 $id3 = new id3('song.mp3');
  16.                                 echo "(null, '".$id3->track."', '".URLHak($id3->name)."', '".URLHak($id3->artists)."', '".URLHak($id3->album)."', '".URLHak($id3->genre)."', '".$url."', '".$id3->year."', '".$id3->filesize."', '".$id3->bitrate."', '".$id3->frequency."', '".$id3->lenght."', '".$id3->layer."', '".$id3->mode."', '".$id3->mpeg_ver."', ' ', '1'),<br>";
  17.                         }
  18.                 }
  19.         }      
  20.         fclose($open);
  21. @flush ();
  22. }
  23.  


За вывод размера отвечает $id3->filesize

Вот часть кода

PHP:
скопировать код в буфер обмена
  1.  
  2. function id3($file, $study = false) {
  3. .....
  4.  
  5.     $this->filesize = filesize($file);
  6. ....
  7.  
  8. }
  9.  
  10.  


Как можно подправить данный скрипт, для решения проблемы?
Maiai Отправлено: 09 Сентября, 2009 - 18:03:05 • Тема: Не могу найти ошибку в алгоритме. • Форум: Программирование на PHP

Ответов: 10
Просмотров: 480
$razmer = filesize("song.mp3"); - тут я хотел перепроверить $id3->filesize, но результат оказался одним и тем же, так и так выводит не верные данные.
Maiai Отправлено: 09 Сентября, 2009 - 17:44:00 • Тема: Не могу найти ошибку в алгоритме. • Форум: Программирование на PHP

Ответов: 10
Просмотров: 480
Здравствуйте, пишу скрипт для работы с мп3 файлами, но возникла проблема, а именно не корректно идут данные о размере файла.
Вот сама ф-ция:
PHP:
скопировать код в буфер обмена
  1.  
  2. require_once('class.php');
  3.  
  4. function get_song($url)
  5. {
  6. flush ();
  7.         $f = file_get_contents($url);
  8.         if(!$f){
  9.                 echo "Не возможно получить файл $url";
  10.         }else{ 
  11.                 $open = fopen("song.mp3", "w+");
  12.                 if(!$open){
  13.                         echo "Не возможно открыть файл song.mp3";
  14.                 }else{
  15.                         if(is_writable("song.mp3")){           
  16.                                 $fr = fwrite($open, $f);
  17.                                 $razmer = filesize("song.mp3");
  18.                                 $id3 = new id3('song.mp3');
  19.                                 //echo "".$razmer."<br><hr>";
  20.                                 echo "(null, '".$id3->track."', '".URLHak($id3->name)."', '".URLHak($id3->artists)."', '".URLHak($id3->album)."', '".URLHak($id3->genre)."', '".$url."', '".$id3->year."', '".$id3->filesize."', '".$id3->bitrate."', '".$id3->frequency."', '".$id3->lenght."', '".$id3->layer."', '".$id3->mode."', '".$id3->mpeg_ver."', ' ', '1'),<br>";
  21.                         }
  22.                 }
  23.         }      
  24.         fclose($open);
  25. @flush ();
  26. }
  27.  


require_once('class.php'); подключения скрипта для работы с id3 тегами.

при использовании ф-ции

PHP:
скопировать код в буфер обмена
  1.  
  2. get_song("http://127.0.0.1/123/mp3/01_-_Nickelback_-_Little_Friend.mp3");
  3. get_song("http://127.0.0.1/123/mp3/01_-_Nickelback_-_Something_In_Your_Mouth.mp3");
  4.  


Размер у всех файлов, выводится такой, как был у первого в списке.

Надеюсь смог правильно изложить суть проблемы и сам вопрос, заранее благодарен.
Maiai Отправлено: 16 Августа, 2009 - 13:16:57 • Тема: Выдергивание информации о файле с фтп. • Форум: Напишите за меня, пожалуйста

Ответов: 10
Просмотров: 164
хм.. еще один вопрос по теме возник, как можно реализовать "паука", что бы он сам бродил по папкам ФТП и отсеявал все кроме mp3 файлов?
Maiai Отправлено: 07 Августа, 2009 - 13:04:47 • Тема: Выдергивание информации о файле с фтп. • Форум: Напишите за меня, пожалуйста

Ответов: 10
Просмотров: 164
Вот, побродил по сети, и наткнулся на статейку http://www[dot]easywebscripts[dot]net/php/php_mp3.php . Оказалось все относительно просто.

Выкладываю здесь, может кто-то тоже сталкнется с подобной проблемой.

Определяем: название, артиста, альбом, год, коментарий и номер трека.

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $f = fopen('mp3.mp3', 'rb');
  4. rewind($f);
  5. fseek($f, -128, SEEK_END);
  6. $tmp = fread($f,128);
  7. if ($tmp[125] == Chr(0) and $tmp[126] != Chr(0)) {
  8. // <UserJS-USH-highlight class="UserJS-USH-highlight" style="background-attachment: scroll; background-repeat: repeat; background-position: 0% 0%; background-image: none; background-color: #ffff66" id="UserJS-USH-0_3">ID3</UserJS-USH-highlight> v1.1
  9. $format = 'a3TAG/a30NAME/a30ARTISTS/a30ALBUM/a4YEAR/a28COMMENT/x1/C1TRACK/C1GENRENO';
  10. } else {
  11. // <UserJS-USH-highlight class="UserJS-USH-highlight" style="background-attachment: scroll; background-repeat: repeat; background-position: 0% 0%; background-image: none; background-color: #ffff66" id="UserJS-USH-0_4">ID3</UserJS-USH-highlight> v1
  12. $format = 'a3TAG/a30NAME/a30ARTISTS/a30ALBUM/a4YEAR/a30COMMENT/C1GENRENO';
  13. }
  14.  
  15. $id3tag = unpack($format, $tmp);
  16. var_dump($id3tag);
  17. ?>


Определяем: размер файла в байтах, тип кодировки, версию mpeg, бит рейт, частоту(frequency), длительность(секундах, минутах, часах), размер и еще несколько других параметров.

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. function readframe($file) {
  4.         if (! ($f = fopen($file, 'rb')) ) die("Unable to open " . $file);
  5.     $res['filesize'] = filesize($file);
  6.     do {
  7.         while (fread($f,1) != Chr(255)) { // Find the first frame        
  8.                 if (feof($f))  die( "No mpeg frame found") ;
  9.         }
  10.         fseek($f, ftell($f) - 1); // back up one byte
  11.  
  12.         $frameoffset = ftell($f);
  13.  
  14.         $r = fread($f, 4);
  15.        
  16.         $bits = sprintf("%'08b%'08b%'08b%'08b", ord($r{0}), ord($r{1}), ord($r{2}), ord($r{3}));
  17.     }
  18.         while (!$bits[8] and !$bits[9] and !$bits[10]); // 1st 8 bits true from the while    
  19.  
  20.     // Detect VBR header
  21.     if ($bits[11] == 0) {
  22.         if (($bits[24] == 1) && ($bits[25] == 1)) {
  23.             $vbroffset = 9; // MPEG 2.5 Mono
  24.         } else {
  25.             $vbroffset = 17; // MPEG 2.5 Stereo
  26.         }
  27.     } else if ($bits[12] == 0) {
  28.         if (($bits[24] == 1) && ($bits[25] == 1)) {
  29.             $vbroffset = 9; // MPEG 2 Mono
  30.         } else {
  31.             $vbroffset = 17; // MPEG 2 Stereo
  32.         }
  33.     } else {
  34.         if (($bits[24] == 1) && ($bits[25] == 1)) {
  35.             $vbroffset = 17; // MPEG 1 Mono
  36.         } else {
  37.             $vbroffset = 32; // MPEG 1 Stereo
  38.         }
  39.     }
  40.  
  41.     fseek($f, ftell($f) + $vbroffset);
  42.     $r = fread($f, 4);
  43.  
  44.     switch ($r) {
  45.         case 'Xing':
  46.             $res['encoding_type'] = 'VBR';
  47.         case 'VBRI':
  48.         default:
  49.             if ($vbroffset != 32) {
  50.                 // VBRI Header is fixed after 32 bytes, so maybe we are looking at the wrong place.
  51.                 fseek($f, ftell($f) + 32 - $vbroffset);
  52.                 $r = fread($f, 4);
  53.  
  54.                 if ($r != 'VBRI') {
  55.                     $res['encoding_type'] = 'CBR';
  56.                     break;
  57.                 }
  58.             } else {
  59.                 $res['encoding_type'] = 'CBR';
  60.                 break;
  61.             }
  62.  
  63.             $res['encoding_type'] = 'VBR';
  64.     }
  65.  
  66.     fclose($f);
  67.  
  68.     if ($bits[11] == 0) {
  69.         $res['mpeg_ver'] = "2.5";
  70.         $bitrates = array(
  71.             '1' => array(0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, 0),
  72.             '2' => array(0,  8, 16, 24, 32, 40, 48,  56,  64,  80,  96, 112, 128, 144, 160, 0),
  73.             '3' => array(0,  8, 16, 24, 32, 40, 48,  56,  64,  80,  96, 112, 128, 144, 160, 0),
  74.                  );
  75.     } else if ($bits[12] == 0) {
  76.         $res['mpeg_ver'] = "2";
  77.         $bitrates = array(
  78.             '1' => array(0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, 0),
  79.             '2' => array(0,  8, 16, 24, 32, 40, 48,  56,  64,  80,  96, 112, 128, 144, 160, 0),
  80.             '3' => array(0,  8, 16, 24, 32, 40, 48,  56,  64,  80,  96, 112, 128, 144, 160, 0),
  81.                  );
  82.     } else {
  83.         $res['mpeg_ver'] = "1";
  84.         $bitrates = array(
  85.             '1' => array(0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 0),
  86.             '2' => array(0, 32, 48, 56,  64,  80,  96, 112, 128, 160, 192, 224, 256, 320, 384, 0),
  87.             '3' => array(0, 32, 40, 48,  56,  64,  80,  96, 112, 128, 160, 192, 224, 256, 320, 0),
  88.                  );
  89.     }
  90.    
  91.     $layer = array(
  92.         array(0,3),
  93.         array(2,1),
  94.               );
  95.     $res['layer'] = $layer[$bits[13]][$bits[14]];
  96.    
  97.     if ($bits[15] == 0) {
  98.         // It's backwards, if the bit is not set then it is protected.
  99.         $res['crc'] = true;
  100.     }
  101.  
  102.     $bitrate = 0;
  103.     if ($bits[16] == 1) $bitrate += 8;
  104.     if ($bits[17] == 1) $bitrate += 4;
  105.     if ($bits[18] == 1) $bitrate += 2;
  106.     if ($bits[19] == 1) $bitrate += 1;
  107.     $res['bitrate'] = $bitrates[$res['layer']][$bitrate];
  108.  
  109.     $frequency = array(
  110.         '1' => array(
  111.             '0' => array(44100, 48000),
  112.             '1' => array(32000, 0),
  113.                 ),
  114.         '2' => array(
  115.             '0' => array(22050, 24000),
  116.             '1' => array(16000, 0),
  117.                 ),
  118.         '2.5' => array(
  119.             '0' => array(11025, 12000),
  120.             '1' => array(8000, 0),
  121.                   ),
  122.           );
  123.     $res['frequency'] = $frequency[$res['mpeg_ver']][$bits[20]][$bits[21]];
  124.  
  125.     $mode = array(
  126.         array('Stereo', 'Joint Stereo'),
  127.         array('Dual Channel', 'Mono'),
  128.              );
  129.     $res['mode'] = $mode[$bits[24]][$bits[25]];
  130.    
  131.     $samplesperframe = array(
  132.         '1' => array(
  133.             '1' => 384,
  134.             '2' => 1152,
  135.             '3' => 1152
  136.         ),
  137.         '2' => array(
  138.             '1' => 384,
  139.             '2' => 1152,
  140.             '3' => 576
  141.         ),
  142.         '2.5' => array(
  143.             '1' => 384,
  144.             '2' => 1152,
  145.             '3' => 576
  146.         ),
  147.     );
  148.     $res['samples_per_frame'] = $samplesperframe[$res['mpeg_ver']][$res['layer']];
  149.  
  150.     if ($res['encoding_type'] != 'VBR') {
  151.         if ($res['bitrate'] == 0) {
  152.             $s = -1;
  153.         } else {
  154.             $s = ((8*filesize($file))/1000) / $res['bitrate'];
  155.         }
  156.         $res['length'] = sprintf('%02d:%02d',floor($s/60),floor($s-(floor($s/60)*60)));
  157.         $res['lengthh'] = sprintf('%02d:%02d:%02d',floor($s/3600),floor($s/60),floor($s-(floor($s/60)*60)));
  158.         $res['lengths'] = (int)$s;
  159.  
  160.         $res['samples'] = ceil($res['lengths'] * $res['frequency']);
  161.         if(0 != $res['samples_per_frame']) {
  162.             $res['frames'] = ceil($res['samples'] / $res['samples_per_frame']);
  163.         } else {
  164.             $res['frames'] = 0;
  165.         }
  166.         $res['musicsize'] = ceil($res['lengths'] * $res['bitrate'] * 1000 / 8);
  167.     } else {
  168.         $res['samples'] = $res['samples_per_frame'] * $res['frames'];
  169.         $s = $res['samples'] / $res['frequency'];
  170.  
  171.         $res['length'] = sprintf('%02d:%02d',floor($s/60),floor($s-(floor($s/60)*60)));
  172.         $res['lengthh'] = sprintf('%02d:%02d:%02d',floor($s/3600),floor($s/60),floor($s-(floor($s/60)*60)));
  173.         $res['lengths'] = (int)$s;
  174.  
  175.         $res['bitrate'] = (int)(($res['musicsize'] / $s) * 8 / 1000);
  176.     }
  177.    
  178.     return $res;
  179. }
  180. $xx = readframe("mp3.mp3");
  181. var_dump($xx);
  182. ?>
  183.  


Отдельное спасибо автору той темы. Тему можно закрывать.
Maiai Отправлено: 06 Августа, 2009 - 12:53:00 • Тема: Выдергивание информации о файле с фтп. • Форум: Напишите за меня, пожалуйста

Ответов: 10
Просмотров: 164
Champion пишет:
функции id3_*** вроде для этого. Вот такая, например. id3_get_tag. Посмотри.


Вот, пожалуй решение, только модуль установить нужно на хост. Спасибо.

pifon1989 пишет:
<?PHP
$connect = ftp_connect("");
$login = ftp_login($connect, "", "");

$list = ftp_rawlist($connect, "");

foreach($list as $_)
preg_replace(

'`^(.{10}+)(\s*)(\d{1})(\s*)(\d*|\w*)'.
'(\s*)(\d*|\w*)(\s*)(\d*)\s'.
'([a-zA-Z]{3}+)(\s*)([0-9]{1,2}+)'.
'(\s*)([0-9]{2}+)Недовольство, огорчение[0-9]{2}+)(\s*)(.*)$`Ue',

'$items[]=array(
"rights"=>"$1",
"number"=>"$3",
"owner"=>"$5", "group"=>"$7",
"file_size"=>"$9",
"mod_time"=>"$10 $12 $14:$15",
"file"=>"$17",
"type"=>print_r((preg_match("/^d/","$1"))?"dir":"file",1));',

$_) ;
print_r($items);
ftp_close($connect);
?>


Спасибо, за предоставленную помощь, пожалуй времено воспользуюсь этим решением, для работы над самим двигом сайта.
Maiai Отправлено: 06 Августа, 2009 - 12:11:33 • Тема: Выдергивание информации о файле с фтп. • Форум: Напишите за меня, пожалуйста

Ответов: 10
Просмотров: 164
Спасибо, уже что-то, но все же информация не совсем полная.
Конечная цель - создание каталога музыки.
А есть ли функции для обработки mp3 файлов, сортировке по mp3-тегам?
Maiai Отправлено: 06 Августа, 2009 - 11:54:43 • Тема: Выдергивание информации о файле с фтп. • Форум: Напишите за меня, пожалуйста

Ответов: 10
Просмотров: 164
Доступ до ФТП есть, проблема какраз таки с ф-циями, не знаю как выдергивать время бит рейт, название и прочее.
Maiai Отправлено: 06 Августа, 2009 - 11:10:57 • Тема: Выдергивание информации о файле с фтп. • Форум: Напишите за меня, пожалуйста

Ответов: 10
Просмотров: 164
Цель: Музыка находящаяся на ФТП.
Задача: Брать информацию о музыкальных файлах с фтп, продолжительность, размер, название, качество и прочее.
Способ решения: Даже не знаю, первое что приходит на ум, обрабатывать теги с фтп, но там довольно скудно все. Вот и прошу помощи.

Страниц (3): « 1 [2] 3 »
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB