PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Страниц (3): « 1 [2] 3 »
Найдено сообщений: 32
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
Примеры:
Нужно выделить *URL*
Заранее благодарен.
Вот, нашел данный шаблон, но он выводит все подряд сылки, нужно оставлять только с раширением .mp3
Maiai
Отправлено: 09 Сентября, 2009 - 18:40:04 • Тема: Не могу найти ошибку в алгоритме. • Форум: Программирование на PHP
Ответов: 10 Просмотров: 480
Цитата: А если song.mp3 заменить на $url?
Ну это ничего не дает. Сейчас постараюсь разъяснить надобность ф-ции.
Что бы получить данные о mp3 файле, его нужно сначала загрузить с фтп на хост (file_get_contents()) после чего полученный контент, записывается в файл song.mp3, после чего с записанного файла считываются все необходимые данные, и закрывается файл. и так каждый раз при вызове ф-ции.
Если сказать короче, для загрузки файла на сервер, и считывания с него данных.
Так как работаю с большим числом файлов, использую буферизацию, что бы в случае чего, был виден текущий ход выполнения операции.
Maiai
Отправлено: 09 Сентября, 2009 - 18:20:24 • Тема: Не могу найти ошибку в алгоритме. • Форум: Программирование на PHP
Ответов: 10 Просмотров: 480
Тогда извиняюсь, вот подчистил:
PHP:
скопировать код в буфер обмена
function get_song( $url )
{
if ( ! $f ) {
echo "Не возможно получить файл $url " ;
} else {
$open = fopen ( "song.mp3" , "w+" ) ; if ( ! $open ) {
echo "Не возможно открыть файл song.mp3" ;
} else {
$id3 = new id3( 'song.mp3' ) ;
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>" ;
}
}
}
}
За вывод размера отвечает $id3->filesize
Вот часть кода
Как можно подправить данный скрипт, для решения проблемы?
Maiai
Отправлено: 09 Сентября, 2009 - 17:44:00 • Тема: Не могу найти ошибку в алгоритме. • Форум: Программирование на PHP
Ответов: 10 Просмотров: 480
Здравствуйте, пишу скрипт для работы с мп3 файлами, но возникла проблема, а именно не корректно идут данные о размере файла.
Вот сама ф-ция:
PHP:
скопировать код в буфер обмена
require_once ( 'class.php' ) ;
function get_song( $url )
{
if ( ! $f ) {
echo "Не возможно получить файл $url " ;
} else {
$open = fopen ( "song.mp3" , "w+" ) ; if ( ! $open ) {
echo "Не возможно открыть файл song.mp3" ;
} else {
$id3 = new id3( 'song.mp3' ) ;
//echo "".$razmer."<br><hr>";
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>" ;
}
}
}
}
require_once('class.php'); подключения скрипта для работы с id3 тегами.
при использовании ф-ции
PHP:
скопировать код в буфер обмена
get_song( "http://127.0.0.1/123/mp3/01_-_Nickelback_-_Little_Friend.mp3" ) ;
get_song( "http://127.0.0.1/123/mp3/01_-_Nickelback_-_Something_In_Your_Mouth.mp3" ) ;
Размер у всех файлов, выводится такой, как был у первого в списке.
Надеюсь смог правильно изложить суть проблемы и сам вопрос, заранее благодарен.
Maiai
Отправлено: 07 Августа, 2009 - 13:04:47 • Тема: Выдергивание информации о файле с фтп. • Форум: Напишите за меня, пожалуйста
Ответов: 10 Просмотров: 164
Вот, побродил по сети, и наткнулся на статейку http://www[dot]easywebscripts[dot]net/php/php_mp3.php . Оказалось все относительно просто.
Выкладываю здесь, может кто-то тоже сталкнется с подобной проблемой.
Определяем: название, артиста, альбом, год, коментарий и номер трека.
PHP:
скопировать код в буфер обмена
<?PHP
$f = fopen ( 'mp3.mp3' , 'rb' ) ; fseek ( $f , - 128
, SEEK_END
) ; if ( $tmp [ 125
] == Chr ( 0
) and
$tmp [ 126
] != Chr ( 0 ) ) { // <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
$format = 'a3TAG/a30NAME/a30ARTISTS/a30ALBUM/a4YEAR/a28COMMENT/x1/C1TRACK/C1GENRENO' ;
} else {
// <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
$format = 'a3TAG/a30NAME/a30ARTISTS/a30ALBUM/a4YEAR/a30COMMENT/C1GENRENO' ;
}
$id3tag = unpack ( $format , $tmp ) ; ?>
Определяем: размер файла в байтах, тип кодировки, версию mpeg, бит рейт, частоту(frequency), длительность(секундах, минутах, часах), размер и еще несколько других параметров.
PHP:
скопировать код в буфер обмена
<?PHP
function readframe( $file ) {
if ( ! ( $f = fopen ( $file , 'rb' ) ) ) die ( "Unable to open " . $file ) ; do {
while ( fread ( $f , 1
) != Chr ( 255 ) ) { // Find the first frame if ( feof ( $f ) ) die ( "No mpeg frame found" ) ; }
$frameoffset = ftell ( $f ) ;
}
while ( ! $bits [ 8] and ! $bits [ 9] and ! $bits [ 10] ) ; // 1st 8 bits true from the while
// Detect VBR header
if ( $bits [ 11] == 0) {
if ( ( $bits [ 24] == 1) && ( $bits [ 25] == 1) ) {
$vbroffset = 9 ; // MPEG 2.5 Mono
} else {
$vbroffset = 17 ; // MPEG 2.5 Stereo
}
} else if ( $bits [ 12] == 0) {
if ( ( $bits [ 24] == 1) && ( $bits [ 25] == 1) ) {
$vbroffset = 9 ; // MPEG 2 Mono
} else {
$vbroffset = 17 ; // MPEG 2 Stereo
}
} else {
if ( ( $bits [ 24] == 1) && ( $bits [ 25] == 1) ) {
$vbroffset = 17 ; // MPEG 1 Mono
} else {
$vbroffset = 32 ; // MPEG 1 Stereo
}
}
switch ( $r ) {
case 'Xing' :
$res [ 'encoding_type' ] = 'VBR' ;
case 'VBRI' :
default :
if ( $vbroffset != 32 ) {
// VBRI Header is fixed after 32 bytes, so maybe we are looking at the wrong place.
if ( $r != 'VBRI' ) {
$res [ 'encoding_type' ] = 'CBR' ;
break ;
}
} else {
$res [ 'encoding_type' ] = 'CBR' ;
break ;
}
$res [ 'encoding_type' ] = 'VBR' ;
}
if ( $bits [ 11] == 0) {
$res [ 'mpeg_ver' ] = "2.5" ;
'1' => array ( 0 , 32 , 48 , 56 , 64 , 80 , 96 , 112 , 128 , 144 , 160 , 176 , 192 , 224 , 256 , 0 ) , '2' => array ( 0 , 8 , 16 , 24 , 32 , 40 , 48 , 56 , 64 , 80 , 96 , 112 , 128 , 144 , 160 , 0 ) , '3' => array ( 0
, 8
, 16
, 24
, 32
, 40
, 48
, 56
, 64
, 80
, 96
, 112
, 128
, 144
, 160
, 0
) , ) ;
} else if ( $bits [ 12] == 0) {
$res [ 'mpeg_ver' ] = "2" ;
'1' => array ( 0 , 32 , 48 , 56 , 64 , 80 , 96 , 112 , 128 , 144 , 160 , 176 , 192 , 224 , 256 , 0 ) , '2' => array ( 0 , 8 , 16 , 24 , 32 , 40 , 48 , 56 , 64 , 80 , 96 , 112 , 128 , 144 , 160 , 0 ) , '3' => array ( 0
, 8
, 16
, 24
, 32
, 40
, 48
, 56
, 64
, 80
, 96
, 112
, 128
, 144
, 160
, 0
) , ) ;
} else {
$res [ 'mpeg_ver' ] = "1" ;
'1' => array ( 0 , 32 , 64 , 96 , 128 , 160 , 192 , 224 , 256 , 288 , 320 , 352 , 384 , 416 , 448 , 0 ) , '2' => array ( 0 , 32 , 48 , 56 , 64 , 80 , 96 , 112 , 128 , 160 , 192 , 224 , 256 , 320 , 384 , 0 ) , '3' => array ( 0
, 32
, 40
, 48
, 56
, 64
, 80
, 96
, 112
, 128
, 160
, 192
, 224
, 256
, 320
, 0
) , ) ;
}
) ;
$res [ 'layer' ] = $layer [ $bits [ 13] ] [ $bits [ 14] ] ;
if ( $bits [ 15 ] == 0 ) {
// It's backwards, if the bit is not set then it is protected.
$res [ 'crc' ] = true ;
}
$bitrate = 0 ;
if ( $bits [ 16] == 1) $bitrate += 8 ;
if ( $bits [ 17] == 1) $bitrate += 4 ;
if ( $bits [ 18] == 1) $bitrate += 2 ;
if ( $bits [ 19] == 1) $bitrate += 1 ;
$res [ 'bitrate' ] = $bitrates [ $res [ 'layer' ] ] [ $bitrate ] ;
'0' => array ( 44100 , 48000 ) , ) ,
'0' => array ( 22050 , 24000 ) , ) ,
'0' => array ( 11025 , 12000 ) , ) ,
) ;
$res [ 'frequency' ] = $frequency [ $res [ 'mpeg_ver' ] ] [ $bits [ 20] ] [ $bits [ 21] ] ;
array ( 'Stereo' , 'Joint Stereo' ) , array ( 'Dual Channel' , 'Mono' ) , ) ;
$res [ 'mode' ] = $mode [ $bits [ 24] ] [ $bits [ 25] ] ;
$samplesperframe = array ( '1' => 384 ,
'2' => 1152 ,
'3' => 1152
) ,
'1' => 384 ,
'2' => 1152 ,
'3' => 576
) ,
'1' => 384 ,
'2' => 1152 ,
'3' => 576
) ,
) ;
$res [ 'samples_per_frame' ] = $samplesperframe [ $res [ 'mpeg_ver' ] ] [ $res [ 'layer' ] ] ;
if ( $res [ 'encoding_type' ] != 'VBR' ) {
if ( $res [ 'bitrate' ] == 0) {
$s = - 1 ;
} else {
$s = ( ( 8
* filesize ( $file ) ) / 1000
) / $res [ 'bitrate' ] ; }
$res [ 'lengths' ] = ( int) $s ;
$res [ 'samples' ] = ceil ( $res [ 'lengths' ] * $res [ 'frequency' ] ) ; if ( 0 != $res [ 'samples_per_frame' ] ) {
$res [ 'frames' ] = ceil ( $res [ 'samples' ] / $res [ 'samples_per_frame' ] ) ; } else {
$res [ 'frames' ] = 0 ;
}
$res [ 'musicsize' ] = ceil ( $res [ 'lengths' ] * $res [ 'bitrate' ] * 1000
/ 8
) ; } else {
$res [ 'samples' ] = $res [ 'samples_per_frame' ] * $res [ 'frames' ] ;
$s = $res [ 'samples' ] / $res [ 'frequency' ] ;
$res [ 'lengths' ] = ( int) $s ;
$res [ 'bitrate' ] = ( int) ( ( $res [ 'musicsize' ] / $s ) * 8 / 1000) ;
}
return $res ;
}
$xx = readframe( "mp3.mp3" ) ;
?>
Отдельное спасибо автору той темы. Тему можно закрывать.
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 - 11:10:57 • Тема: Выдергивание информации о файле с фтп. • Форум: Напишите за меня, пожалуйста
Ответов: 10 Просмотров: 164
Цель: Музыка находящаяся на ФТП.
Задача: Брать информацию о музыкальных файлах с фтп, продолжительность, размер, название, качество и прочее.
Способ решения: Даже не знаю, первое что приходит на ум, обрабатывать теги с фтп, но там довольно скудно все. Вот и прошу помощи.
Страниц (3): « 1 [2] 3 »
Powered by ExBB FM 1.0 RC1. InvisionExBB