ramzes, короч так, файл при обработке один раз качает, и далее его локально играет
архив кому интересно потестить
ramzes, тебе отдельно код для теста
методы (+/-)
protected function mp3Player($mp3) {
return '<span class="green"><audio controls><source src="' . $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['SERVER_NAME'] . '/files/mp3/' . basename($mp3) . '"></audio></span>';
}
protected function downloadMp3($mp3)
{
$dir = ROOT_PATH . 'files/mp3';
if (!is_dir($dir)) {
mkdir($dir, '0777', 1);
}
$headers = get_headers($mp3, 1);
$newfile = md5($mp3) . '.mp3'; // START_TIME
if (!file_exists($dir . DIRECTORY_SEPARATOR . $newfile)) {
if ($headers['Content-Type'] == 'audio/mpeg') {
$uploadfil = new \SplFileObject($mp3, 'rb');
$file = new \SplFileObject($dir . DIRECTORY_SEPARATOR . $newfile, 'w');
$file->setFlags(\SplFileObject::SKIP_EMPTY);
if ($file->flock(LOCK_EX)) {
$file->ftruncate(0);
while (!$uploadfil->eof()) {
$file->fwrite($uploadfil->fgets());
}
}
$file->flock(LOCK_UN);
}
}
return (file_exists($dir . DIRECTORY_SEPARATOR . $newfile) ? $dir . DIRECTORY_SEPARATOR . $newfile : false);
}
protected function mp3($var)
{
return preg_replace_callback(
'#\[mp3](.+?)\[/mp3]#is',
function ($matches) {
$path = $this->downloadMp3(trim($matches[1]));
return $path ? $this->mp3Player($path) : false;
},
$var,
3
);
}
Koenig, эм....
а где тут обход их защиты? или у тебя качает и вк не палит?)
ramzes, ты попробовал? у меня норм качает
ramzes, я ему ссылку из контакта
://cs1-40v4.vk-cdn.net/p21/ff0fc7118af047.mp3?extra=kjd-cGN3yLQcR4RDzY9bi2cUGiz_OYPhqaGXjp58qrRjcEg5FrDrUal-S5OpSb2_6-box3EQm2es--ZPjxc9nXVWx39vLIz9p6ejQ2iBtypF-KWUaEcamr-k2UgVCispbTtrn48tOckX
тогда понятно.. я не это имел ввиду.
это ты просто перешел по ссылке усложненным способом. треки по 20мб могут весить, хранить их у себя довольно накладно.
я имел ввиду генерацию хеша
ramzes, ну они в норм качестве так и весят, я не говорю уже об часовых сетах, этот способ качает очень хитро, даже игнорит execution time , то есть кинешь ссылку на 1.5 Гб , оно его утянет, если пых собран как 64 битный, то думаю и более 2 гб файлы потянет
Кстати, класс переделал.
Теперь определения BBcode тэгов находятся в файле-конфиге и для переделки, или добавления новых тэгов не надо кромсать ядро системы.
Конфиг:
https://github.com/john-cms/jo ... l.php
Класс:
https://github.com/john-cms/jo ... 9-L50
https://github.com/john-cms/jo ... #L501
Там удален метод и опеределения тэгов берутся через DI контейнер из глобального конфига.
Надеюсь помните, что xxx.global.php это системные конфиги, которые трогать нежелательно, ибо могут измениться с последующим обновлением. Если надо что-то переписать, кидаете в папку с конфигами свой файл, но имеющий в названии не global а local. К примеру xxx.local.php
Файлы .local. грузятся ПОСЛЕ .global. и перезаписывают их значения.
Хотел вынести в конфиг еще и определения кнопок, но там дело сложнее и надо серьезно переписывать сам код, формирующий кнопки. А этим пока некогда было заниматься.
Audio Player with javascript