- var_dump: documentation ( source)
- uniqid: documentation ( source)
- strpos: documentation ( source)
- explode: documentation ( source)
- trim: documentation ( source)
- preg_replace: documentation ( source)
- array_pop: documentation ( source)
<?php
function getFilenameFromUrl($url)
{
$default = uniqid();
if (!is_string($url) || strpos($url, '/') === false)
{
return $default;
}
// Get last part of the url (after the last slash).
$parts = explode('/', $url);
$filename = array_pop($parts);
// Replace special characters with underscores.
$filename = preg_replace('/[^a-z0-9\_\-\.]/i', '_', $filename);
// Replace multiple underscores with just one.
$filename = preg_replace('/__+/i', '_', trim($filename, '_'));
// Return the cleaned filename or, if it is empty, a unique id.
return $filename ?: $default;
}
var_dump(getFilenameFromUrl('THIS IS NOT A URL'));
var_dump(getFilenameFromUrl('https://example.com/this____or_that______.zip?dlid=asd____a_a_a__b__b__B'));
var_dump(getFilenameFromUrl('https://www.some-domain.com/downloads/file.php?file=foobar'));
var_dump(getFilenameFromUrl('https://www.some-domain.com/downloads/file.zip?slid=123'));
var_dump(getFilenameFromUrl('https://www.some-domain.com/downloads/?file=foobar'));