Получение сведений об имени файла из файла изображения

Я ищу способ получить детали из имени файла, чтобы вставить его в мою базу данных. Моя проблема в том, что имя файла всегда немного отличается, даже если оно имеет шаблон.

Примеры:
аризоны-911545_1920.jpg
бас-гитара-913092_1280.jpg
Eiffel башня-905039_1280.jpg
Новый-Йорк-сити-78181_1920.jpg

Первая часть — это то, что представляет собой изображение, например, Аризона, бас-гитара, Эйфелева башня, Нью-Йорк, за которым следует уникальный идентификатор и ширина изображения.

То, что я после, будет извлекать:

имя и ширина

Так что, если я запусту, например, getInfo (‘arizona-911545_1920.jpg’);

это вернуло бы что-то вроде

$extractedname
$extractedid
$extractedwidth

так что я мог бы легко сохранить это в моей базе данных MySQL, как

INSERT into images VALUES ('$extractedname','$extractedid','$extractedwidth')

Больше всего меня беспокоит то, что имена изображений могут быть длиннее, например, new-york-city-bank или даже new-york-city-bank-window, поэтому мне нужен безопасный способ получить имя, независимо от того, как долго это будет ,

Я знаю, как заменить — между именем, это не проблема. Я просто ищу способ извлечь детали, которые я упомянул выше.

Я был бы признателен, если бы кто-то мог просветить меня, как решить эту проблему.

Спасибо 🙂

1

Решение

Для извлечения данных, которые вы ищете, лучше всего использовать шаблон регулярных выражений, например:

(.+)-(\d+_(\d+))

Пример здесь: https://regex101.com/r/oM5bS8/2

preg_match('(.+)-(\d+_(\d+))',"<filename>", $matches);
$extractedname = $matches[1];
$extractedid = $matches[2];
$extractedwidth = $matches[3];

РЕДАКТИРОВАТЬ — Просто перечитайте вопрос, и вы ищете методы извлечения, а не способы публикации изображения со страницы в бэкэнд. Я оставлю это здесь для справки.

Когда вы публикуете файлы через форму в формате html в бэкэнд PHP, есть несколько элементов, которые необходимы.

1) Вы должны убедиться, что ваш тип формы состоит из нескольких частей, чтобы он знал, как передавать файлы.

<form enctype="multipart/form-data">

2) Ваш PHP-сервер должен перебирать файлы и сохранять их соответствующим образом.

Вот пример того, как перебирать файлы, которые отправляются.

foreach($_FILES as $file) {
$n = $file['name'];
$s = $file['size'];
if (!$n) continue;
echo "File: $n ($s bytes)";
}
-1

Другие решения

Один из самых простых способов в этом случае — использовать регулярное выражение, например:

preg_match('/^(\D+)-(\d+)_(\d+)/', $filename, $matches);
// $matches[1] - name
// $matches[2] - id
// $matches[3] - width
0

Это главная идея.

Давайте сначала выберем файл.

Имя файла будет «bass-guitar-913092_1280.jpg»

Прежде всего, мы разделим это с взрываться, в точка (.) в переменной $ Temp

Это даст нам массив бас-гитара-913092_1280 а также JPG

Мы выберем первый пункт массива, чтобы продолжить, так как это имя, которое нас интересует, поэтому мы получим его с $ Temp [0]

После этого мы разделим его снова на этот раз, чтобы (_).

Теперь у нас будет массив бас-гитара-913092 а также 1280

Нам нужно второе значение массива, поэтому мы выберем его $ Temp [1]

Последняя часть проста, как и другие, теперь мы разделим имя файла $ Temp [0] с (-) Мы получим последнее значение этого, которое является идентификатором $ Temp [число ($ Temp) -1] и мы удалим это из списка массивов, а все остальное подключим с взрываться и разделитель мы хотим

Теперь мы можем использовать также функцию ucwords Прописать каждую первую букву каждого слова на главном имени.

В следующем коде есть два способа получить имя, один из которых состоит из строчных букв, а другой — из первых букв каждого слова, раскомментируйте то, что вы хотите.

Отредактированный код как функция

<?php
function ExtractFileInfo($fileName) {
$Temp = explode(".",$fileName);
$Temp = explode("_",$Temp[0]);
$width = $Temp[1];
$Temp = explode("-",$Temp[0]);
$id = $Temp[count($Temp)-1];
unset($Temp[count($Temp-1)]);
// If you want to have the name with lowercase letters Uncomment the Following:
//$name = implode(" ",$Temp);
// If you Want to Capitalize every first letter of the name Uncomment the Following:
//$name = ucwords(implode(" ",$Temp));

return array($name,$id,$width);
}
?>

Это вернет массив из 3 элементов имени, идентификатора и ширины

0
По вопросам рекламы [email protected]