#1061 2014.10.13 22:52

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Re: Общие вопросы по PHP

meison написал:

каким способом отдавать файл?


header("Location: http://site.net/file.mp3");

Здесь все что тебе нужно http://habrahabr.ru/post/151795/

Неактивен

#1062 2014.10.22 02:42

miseterweb
Гость

Re: Общие вопросы по PHP

привет, подскажите что в етом коде не так?

Код:

1
span style="color: #0000BB"><?phpclass download { public $properties = array('old_name' => '', 'new_name' => '', 'type' => '', 'size' => '', 'resume' => '', 'max_speed' => ''); public $range = 0; public function download($path, $name, $resume = 0, $max_speed = 0) { $name = ($name == '') ? substr(strrchr('/' . $path, '/'), 1) : $name; $name = explode('/', $name); $name = end($name); $file_size = $this->getFilesize($path); $this->properties = array('old_name' => $path, 'new_name' => $name, 'type' => "application/force-download", 'size' => $file_size, 'resume' => $resume, 'max_speed' => $max_speed); if ($this->properties['resume']) { if (isset($_SERVER['HTTP_RANGE'])) { $this->range = $_SERVER['HTTP_RANGE']; $this->range = str_replace("bytes=", '', $this->range); $this->range = str_replace("-", '', $this->range); } else { $this->range = 0; } if ($this->range > $this->properties['size']) $this->range = 0; } else { $this->range = 0; } } public function download_file() { $ctype_arr = array('mp3' => 'audio/mp3'); ($this->range) ? header($_SERVER['SERVER_PROTOCOL'] . ' 206 Partial Content') : header($_SERVER['SERVER_PROTOCOL'] . ' 200 OK'); header("Pragma: public"); header("Expires: 0"); header("Cache-Control:"); header("Cache-Control: public"); header("Content-Description: File Transfer"); $pathinfo = pathinfo($this->properties['old_name']); $ras = $pathinfo['extension']; (array_key_exists($ras, $ctype_arr)) ? header("Content-Type: " . $ctype_arr["$ras"]) : header("Content-Type: " . $this->properties["type"]); header('Content-Disposition: attachment; filename="' . $this->properties['new_name'] . '";'); header("Content-Transfer-Encoding: binary"); if ($this->properties['resume']) header("Accept-Ranges: bytes"); if ($this->range) { header("Content-Range: bytes {$this->range}-" . ($this->properties['size'] - 1) . '/' . $this->properties['size']); header("Content-Length: " . ($this->properties['size'] - $this->range)); } else { header("Content-Length: " . $this->properties['size']); } @ini_set('max_execution_time', 0); @set_time_limit(); $this->_download($this->properties['old_name'], $this->range); } public function _download($filename, $range = 0) { @ob_end_clean(); if (($speed = $this->properties['max_speed']) > 0) $sleep_time = (8 / $speed) * 1e6; else $sleep_time = 0; $handle = fopen($filename, 'rb'); fseek($handle, $range); if ($handle === false) { return false; } while (!feof($handle)) { print (fread($handle, 1024 * 8)); ob_flush(); flush(); usleep($sleep_time); } fclose($handle); return true; } /** * Функция подсчета размера файла */ public function getFilesize($url) { if(file_exists($url)) { return filesize($url); } else { $x = array_change_key_case(get_headers($url, 1), CASE_LOWER); return (strcasecmp($x[0], 'HTTP/1.1 200 OK') != 0) ? $x['content-length'][1] : $x['content-length']; } } } ?>

#1063 2014.10.22 02:45

masterweb
Гость

Re: Общие вопросы по PHP

при нажатии скачать файл через етот класс то все нормально с размером файла, но когда сам файл качается то размер в закачках неопоределен. в чем дело?

#1064 2014.10.22 02:55

misterweb
Гость

Re: Общие вопросы по PHP

скрины
http://wapinet.ru/static/file/2014/10/22//5446e420c7261.jpg
http://wapinet.ru/static/file/2014/10/22//5446e3f6d28dc.jpg

#1065 2014.10.22 11:16

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6594
Карма: 107
Профиль Веб-сайт

Re: Общие вопросы по PHP

как минимум HTTP_RANGE не верно обрабатывается. и могут быть потенциальные проблемы в строчке "return (strcasecmp($x[0], 'HTTP/1.1 200 OK') != 0) ? $x['content-length'][1] : $x['content-length'];"

Неактивен

#1066 2014.10.22 13:06

misterweb
Гость

Re: Общие вопросы по PHP

как исправить подскажешь?

я не автор кода.

#1067 2014.10.25 23:32

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: Общие вопросы по PHP

Короче вот мой бред по поводу Singleton
Типа чтоб каждый раз в классе не писать код Singleton:

Код:

1
span style="color: #0000BB"><?phpclass SomeClass {//+ Singleton private static $_instance; private function __clone() { } private function __wakeup() { } public static function instance() { if (null === self::$_instance) { self::$_instance = new self; } return self::$_instance; } private function __construct() { } //- Singleton}

Я подумал запихать код в отдельный файл-класс и от него нужные классы наследовать..
Вот что-то типа такого:

Код:

1
span style="color: #0000BB"><?php// Singleton.phpclass Singleton{ private static $_instance = array(); public static function instance() { $class = get_called_class(); if (null === self::$_instance[$class]) { self::$_instance[$class] = new $class; } return self::$_instance[$class]; } private function __construct() {} private function __clone() {} private function __wakeup() {}}class Loader extends Singleton{ private $_state; public function register() { if (! $this->_state) { return $this->_state = spl_autoload_register(array($this, '_load')); } } public function unregister() { if ($this->_state) { return ! $this->_state = ! spl_autoload_unregister(array($this, '_load')); } } private function _load($className) { require_once($className . CLASS_EXTENSION); }}

Неактивен

#1068 2014.10.26 11:18

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6594
Карма: 107
Профиль Веб-сайт

Re: Общие вопросы по PHP

да-да посмотрел решения в инете, все сводится именно к этому)
единственное что, сам класс Singleton хорошо бы объявить абстрактным.

Неактивен

#1069 2014.10.26 12:06

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: Общие вопросы по PHP

Gemorroj написал:

да-да посмотрел решения в инете, все сводится именно к этому)
единственное что, сам класс Singleton хорошо бы объявить абстрактным.

Спасибо

Неактивен

#1070 2014.10.29 18:09

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: Общие вопросы по PHP

Как лучше всего передавать конфигу!?
Я вот не знаю, что выбрать:
----
1) Передавать через общего класса-предка

Код:

1
span style="color: #0000BB"><?phpabstract class Progenitor{ protected static $_cfg, $_registry;}

----
2) Создать спец. класс

Код:

1
span style="color: #0000BB"><?phpclass Config{ private static $_cfg; public static function get($arg) { return self::$_cfg[$arg]; }}

----
3) Каждый класс имеет собственные методы для принятия конфиги:

Код:

1
span style="color: #0000BB"><?phpclass SomeClass{ private static $_cfg, $_someParam; public static function setCfg($arg) { self::$_cfg = $arg; }// OR public static function setSomeParam($arg) { self::$_someParam = $arg; }}

----
Для автозагрузчика нужен "корень" и расширение, например.

Неактивен

Дополнительно

forum.wapinet.ru

PunBB Mod v0.6.2
0.029 s