Как узнать расширение файла при его загрузке по ссылке?

170
13 сентября 2018, 06:00

Использую код, указанный ниже, для загрузки файлов. Всё работает отлично, но в итоговом варианте, расширение у загружаемого файла может быть разное, можно ли как-то узнать расширение файла при его загрузке?

код:

$url = 'http://mysite.ru/myfile';       
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
curl_close($ch);
file_put_contents("TendersDocs/1.xlsx", $data);
Answer 1

С такой ссылкой единственное что приходит в голову это проверять mime type и присваивать по нему самое часто-используемое расширение. Но, к сожалению точно узнать расширение так не выйдет.. Если верить списку типов офисных документов от мелкомягких, путаница может быть только с устаревшими расширениями документов https://blogs.msdn.microsoft.com/vsofficedeveloper/2008/05/08/office-2007-file-format-mime-types-for-http-content-streaming-2/

Answer 2

Если удобно через $_FILES (для файла с именем 'file') Способ 1.

$_FILES['file']['type']

Способ 2.

mime_content_type($_FILES["file"]["tmp_name"])

Способ 3.

pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION)

Способ 4.

$finfo = finfo_open(FILEINFO_MIME_TYPE); // возвращает mime-тип
foreach (glob("*") as $filename) {
    echo finfo_file($finfo, $filename) . "\n";
}
finfo_close($finfo);
Answer 3

Например для файла с именем $filename

   $arr=explode('.',$_FILES[$filename][name]);
   $rashireniye=$arr[count($arr)-1];
READ ALSO
Регулярное выражение для вложенности 2 уровня

Регулярное выражение для вложенности 2 уровня

Есть адрес типа /catalog/cat1/cat2/, притом, cat1 и cat2 могут быть любымиНужно регулярное выражение для функции preg_match, пропускающее все подобные адреса:...

186
Почему пишут STL библиотека С++, а используем `std`?

Почему пишут STL библиотека С++, а используем `std`?

Везде пишут: Использования STL функций

216
Нейросеть для рисования [закрыт]

Нейросеть для рисования [закрыт]

Как делаются нейросети для рисования изображений?

186