Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы » Как вставить текст в название скачиваемого файла?

Как вставить текст в название скачиваемого файла?


     10.03.2017    Общие вопросы, Хаки    1311

вопрос
Допустим название файла такое
песня.mp3
а нужно так.
песня(текст).mp3

в этой стоке можно прописать только вначале или в конце имени файла
(текст)песня.mp3(текст)

header( 'Content-Disposition: attachment; filename="(текст)' . $this->properties['new_name'] . '(текст)"' );


весь код download.class.php

class download {
	
	var $properties = array ('old_name' => "", 'new_name' => "", 'type' => "", 'size' => "", 'resume' => "", 'max_speed' => "" );
	
	var $range = 0;
	
	function download($path, $name = "", $resume = 0, $max_speed = 0) {
		
		$name = ($name == "") ? substr( strrchr( "/" . $path, "/" ), 1 ) : $name;
		$name = explode( "/", $name );
		$name = end( $name );

		$type = explode( ".", $name );
		$type = strtolower( end( $type ) );
		
		$file_size = @filesize( $path );
		
		$this->properties = array ('old_name' => $path, 'new_name' => $name, 'type' => "application/force-download", 'size' => $file_size, 'resume' => $resume, 'max_speed' => $max_speed );

		if( $type == "apk" ) $this->properties['type'] = "application/vnd.android.package-archive";
		if( $type == "pdf" ) $this->properties['type'] = "application/pdf";
		if( $type == "doc" OR $type == "docx") $this->properties['type'] = "application/vnd.ms-word";
		if( $type == "mp4" ) $this->properties['type'] = "video/mp4";
		if( $type == "zip" ) $this->properties['type'] = "application/zip";
		
		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;
		
		}
	
	}
	
	function download_file() {
		
		if( $this->range ) {
			header( $_SERVER['SERVER_PROTOCOL'] . " 206 Partial Content" );
		} else {
			header( $_SERVER['SERVER_PROTOCOL'] . " 200 OK" );
		}
		
		header( "Pragma: public" );
		header( "Expires: 0" );
		header( "Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
		header( "Cache-Control: private", false);
		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'] );
		
		}

		header("Connection: close");
 		
		@ini_set( 'max_execution_time', 0 );
		@set_time_limit();
		
		$this->_download( $this->properties['old_name'], $this->range );
	}
	
	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;
	}

}

Ответил: stopani


После
$name = end( $name );

Вставить
$name = str_replace('.mp3', ' (текст).mp3', $name);

Можно ещё и так и даже лучше, если расширение из трёх символов
substr_replace($name, ' (текст).mp3', -4);

6 комментариев

stopani
Юзер

stopani - 11 марта 2017 10:47 -

Всё равно вставляется в конце. $name уже содержит расширение файла. Как бы её разделить на части, файлы у меня только mp3 , других не бывает. Есть ещё варианты?

LazyDev
PHP-developer

LazyDev - 11 марта 2017 11:11 -

stopani, а что вам нужно? Вы в вопросе написали как? Как вставить в конец названия файла дополнительный текст.

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

stopani
Юзер

stopani - 11 марта 2017 11:14 -

Я думал название это песня , а расширение файла это mp3, по этому так и сказал
Нужно так.
песня(текст).mp3

LazyDev
PHP-developer

LazyDev - 11 марта 2017 11:26 -

Найти
$name = end( $name );
ниже вставить
$name .= " your text";

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

stopani
Юзер

stopani - 11 марта 2017 11:31 -

Наверное нужно сначала вырезать всё после последней точки (т.е. .mp3), как-то так
preg_replace(‘/^.*\.(.*)$/s’, ‘$1’, $name)


Ну а потом уже добавить
$name .= " your text.mp3";


Только как это применить не знаю.

stopani
Юзер

stopani - 11 марта 2017 12:17 -

Пытаюсь вырезать расширение файла, а наоборот только оно остаётся, что не так?
$name = preg_replace("/.*?\./", '', $name);

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх