Search code examples
phpextractfilenames

Getting File Name Details from Image File


I am looking for a way to grab details from a file name to insert it into my database. My issue is that the file name is always a bit different, even if it has a pattern.

Examples: arizona-911545_1920.jpg bass-guitar-913092_1280.jpg eiffel-tower-905039_1280.jpg new-york-city-78181_1920.jpg

The first part is always what the image is about, for example arizona, bass guitar, eiffel tower, new york city followed by a unique id and the width of the image.

What I am after would be extracting:

name id and width

So if I run for example getInfo('arizona-911545_1920.jpg');

it would return something like

$extractedname
$extractedid
$extractedwidth

so I could easily save this in my mysql database like

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

What bothers me most is that image names can be longer, for example new-york-city-bank or even new-york-city-bank-window so I need a safe method to get the name, no matter how long it would be.

I do know how to replace the - between the name, that's not an issue. I am really just searching for a way to extract the details I mentioned above.

I would appreciate it if someone could enlighten me on how to solve this.

Thanks :)


Solution

  • Extracting the data you are looking for would be best via a regex pattern like the following:

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

    Example here: https://regex101.com/r/oM5bS8/2

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

    EDIT - Just reread the question and you are looking for extraction techniques not how to post the image from a page to your backend. I will leave this here for reference.

    When you post files via a form in html to a PHP backend there are few items that are needed.

    1) You need to ensure that your form type is multi-part so that it knows to pass the files along.

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

    2) Your php backend needs to iterate over the files and save them accordingly.

    Here is a sample of how to iterate over the files that are being submitted.

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