Файл сохранить имя php

Скачивание файла с сервера с указанием сохраняемого названия

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
 $filename = $_GET['filename']; // нужен для Internet Explorer, иначе Content-Disposition игнорируется if(ini_get('zlib.output_compression')) ini_set('zlib.output_compression', 'Off'); $file_extension = strtolower(substr(strrchr($filename,"."),1)); if( $filename == "" ) { echo "ОШИБКА: не указано имя файла."; exit; } elseif ( ! file_exists( $filename ) ) // проверяем существует ли указанный файл { echo "ОШИБКА: данного файла не существует."; exit; }; switch( $file_extension ) { case "pdf": $ctype="application/pdf"; break; case "exe": $ctype="application/octet-stream"; break; case "zip": $ctype="application/zip"; break; case "doc": $ctype="application/msword"; break; case "xls": $ctype="application/vnd.ms-excel"; break; case "ppt": $ctype="application/vnd.ms-powerpoint"; break; case "mp3": $ctype="audio/mp3"; break; case "gif": $ctype="image/gif"; break; case "png": $ctype="image/png"; break; case "jpeg": case "jpg": $ctype="image/jpg"; break; default: $ctype="application/force-download"; } 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: $ctype"); header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" ); header("Content-Transfer-Encoding: binary"); header("Content-Length: ".filesize($filename)); // необходимо доделать подсчет размера файла по абсолютному пути readfile("$filename"); exit(); ?>

Такой код не подходит, он скачивает файл по названию.

Чтоб ссылка была такая: сайт.ру/save.php?filename=googog.exe

Добавлено через 2 часа 10 минут

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
 $file = $_GET['fn']; $ch = curl_init(); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_FAILONERROR, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_URL, "http://kinosu.net/downloader.exe"); $result = curl_exec($ch); curl_close($ch); if ($result) { header('Content-type: application/octet-stream'); header('Content-Disposition: attachment; filename=' . $file); header('Content-Length: ' . strlen($result)); echo $result; exit(); } ?>

Источник

Работа с именами файлов в PHP

Набор PHP функций для работы с путями и именами файлов.

Получить имя файла

echo basename('path/file.png'); // file.png

Имя файла без расширения

$info = pathinfo('path/file.png'); echo $info['filename']; // file /* или */ echo pathinfo('path/donut.png', PATHINFO_FILENAME); // file

Получить расширение файла

echo mb_strtolower(mb_substr(mb_strrchr('path/file.png', '.'), 1)); // png /* или */ echo pathinfo('path/file.png', PATHINFO_EXTENSION); // png

Заменить расширение файла

Заменить расширение .jpeg на .jpg:

$file_name = 'file.jpeg'; $file_new = preg_replace('/\.jpeg$/', '.jpg', $file_name); echo $file_new; // file.jpg

Заменить несколько расширений на одно (.jpg, .jpeg, .png на .webp):

$file_name = 'file.jpeg'; $file_new = preg_replace('/\.(jpg|jpeg|png)$/', '.webp', $file_name); echo $file_new; // file.webp

Дописать текст в конец названия файла

$info = pathinfo('path/file.png'); $name = $info['dirname'] . '/' . $info['filename'] . '-' . time() . '.' . $info['extension']; echo $name; // path/file-1610877618.png

Безопасное сохранение файла

Чтобы не затереть существующий файл на сервере можно применить данную функцию.

В функцию передаётся путь и имя файла, если на сервере уже существует такой файл, функция к концу файла приписывает префикс. Также если директория не существует, пытается её создать.

function safe_file($filename) < $dir = dirname($filename); if (!is_dir($dir)) < mkdir($dir, 0777, true); >$info = pathinfo($filename); $name = $dir . '/' . $info['filename']; $prefix = ''; $ext = (empty($info['extension'])) ? '' : '.' . $info['extension']; if (is_file($name . $ext)) < $i = 1; $prefix = '_' . $i; while (is_file($name . $prefix . $ext)) < $prefix = '_' . ++$i; >> return $name . $prefix . $ext; > // Если в директории есть файл log.txt, файл будет сохранен с названием log_1.txt file_put_contents(safe_file(__DIR__ . '/log.txt'), $text);

Источник

PHP $ _FILES [‘file’] [‘tmp_name’]: как сохранить имя файла и расширение?

Проблема заключается в том, что она возвращает произвольно сгенерированное имя файла. Таким образом, когда он достигает папки «Входящие», имя файла phpvwRGKN.dat(имя файла является случайным каждый раз). Как сохранить имя файла и расширение? Примечание. Я использую класс geekMail

6 ответов

$_FILES[‘file’][‘tmp_name’]; будет содержать временное имя файла на сервере. Это всего лишь местозаполнитель на вашем сервере, пока вы не обработаете файл

$_FILES[‘file’][‘name’]; содержит исходное имя загруженного файла с пользовательского компьютера.

$ geekMail-> attach (‘/ home / willem / file2.zip’) должен быть форматом для использования библиотеки. Поэтому мне пришлось использовать $ attachment = $ _FILES [‘file’] [‘tmp_name’]; $ GeekMail-> присоединять ($ вложение); Есть ли способ, которым я могу передать [‘name’] вместе с путем?

$_FILES[«file»][«name»] — the name of the uploaded file

Если я использую $ _FILES [«file»] [«name»] и назначаю его переменной, скажем, $ attachment, то это не сработает, потому что это возвращает только имя файла. Я думаю, что мне нужно дать путь, и путь может прийти только от tmp_name. Пожалуйста, поправьте меня, если я ошибаюсь.

Большинство почтовых библиотек имеют два имени файла, которые вы используете для вложений. Одним из них является имя / местоположение файла на сервере, а другим — имя, которое вы хотите, чтобы пользователь увидел. В вашем случае имя / местоположение — tmp_name , а имя файла конечного пользователя — name .

Из вашего вопроса я понимаю, что вы хотите сохранить файл на сервере, используя имя вместо tmp_name. Для этого нужно использовать php.net/manual/en/function.move-uploaded-file.php move_uploaded_file() и переместить tmp_file на постоянный путь с name файла.

Источник

Читайте также:  Bytes to bufferedreader python
Оцените статью