- Как мне получить имя файла из полного пути с помощью PHP
- Ответ 1
- Ответ 2
- Ответ 3
- Ответ 4
- Ответ 5
- Ответ 6
- pathinfo
- Parameters
- Return Values
- Examples
- See Also
- PHP Текущее местоположение скрипта, папки, имя файла
- Как в PHP узнать полный путь к файлу или папке
- Работа с именами файлов в PHP
- Получить имя файла
- Имя файла без расширения
- Получить расширение файла
- Заменить расширение файла
- Дописать текст в конец названия файла
- Безопасное сохранение файла
Как мне получить имя файла из полного пути с помощью PHP
Например, как мне получить Output.map
из
F:\Program Files\SSH Communications Security\SSH Secure Shell\Output.map
с помощью PHP?
Ответ 1
Можно это сделать с помощью basename .
Пример из руководства по PHP:
$path = «/home/httpd/html/index.php»;
$file = basename($path); // $file is set to «index.php»
$file = basename($path, «.php»); // $file is set to «index»
?>
Ответ 2
Я сделал это с помощью функции PATHINFO, которая создает массив с частями пути, которые вы можете использовать. Например, вы можете сделать это так:
$xmlFile = pathinfo(‘/usr/admin/config/test.xml’);
function filePathParts($arg1)
echo $arg1[‘dirname’], «\n»;
echo $arg1[‘basename’], «\n»;
echo $arg1[‘extension’], «\n»;
echo $arg1[‘filename’], «\n»;
>
filePathParts($xmlFile);
?>
На выходе будет:
/usr/admin/config
test.xml
xml
test
Использование этой функции доступно, начиная с PHP 5.2.0.
Затем вы можете манипулировать всеми частями по своему усмотрению. Например, чтобы использовать полный путь, вы можете сделать это:
$fullPath = $xmlFile[‘dirname’] . ‘/’ . $xmlFile[‘basename’];
Ответ 3
Есть несколько способов узнать имя и расширение файла. Вы можете использовать следующий код, который прост в использовании.
$url = ‘http://www.nepaltraveldoor.com/images/trekking/nepal/annapurna-region/Annapurna-region-trekking.jpg’;
$file = file_get_contents($url); // получить файл
$name = basename($url); // получить имя файла
$ext = pathinfo($url, PATHINFO_EXTENSION); // получить расширение файла
$name2 =pathinfo($url, PATHINFO_FILENAME); // получить имя файла без расширения
Ответ 4
Чтобы сделать это с наименьшими затратами, я бы предложил использовать встроенную константу DIRECTORY_SEPARATOR вместе с explode(delimiter, string), чтобы разделить путь на части, а затем просто отсоединить последний элемент в предоставленном массиве.
Пример:
$path = ‘F:\Program Files\SSH Communications Security\SSH SecureShell\Output.map’
// получение полного пути файла
$pathArr = explode(DIRECTORY_SEPARATOR, $path);
$filename = end($pathArr);
echo $filename;
>> ‘Output.map’
Ответ 5
Это просто. Например:
function filePath($filePath)
$fileParts = pathinfo($filePath);
if (!isset($fileParts[‘filename’]))
$fileParts[‘filename’] = substr($fileParts[‘basename’], 0, strrpos($fileParts[‘basename’], ‘.’));
>
return $fileParts;
>
$filePath = filePath(‘/www/htdocs/index.html’);
print_r($filePath);
?>
Результатом будет:
Array (
[dirname] => /www/htdocs [basename] => index.html [extension] => html [filename] => index)
Ответ 6
Чтобы получить точное имя файла из URI, я бы использовал этот метод:
$file1 =basename(«http://localhost/eFEIS/agency_application_form.php?formid=1&task=edit») ;
//basename($_SERVER[‘REQUEST_URI’]); // Or use this to get the URI dynamically.
echo $basename = substr($file1, 0, strpos($file1, ‘?’));
?>
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
pathinfo
pathinfo() returns information about path : either an associative array or a string, depending on flags .
Note:
For information on retrieving the current path info, read the section on predefined reserved variables.
Note:
pathinfo() operates naively on the input string, and is not aware of the actual filesystem, or path components such as » .. «.
Note:
On Windows systems only, the \ character will be interpreted as a directory separator. On other systems it will be treated like any other character.
pathinfo() is locale aware, so for it to parse a path containing multibyte characters correctly, the matching locale must be set using the setlocale() function.
Parameters
If present, specifies a specific element to be returned; one of PATHINFO_DIRNAME , PATHINFO_BASENAME , PATHINFO_EXTENSION or PATHINFO_FILENAME .
If flags is not specified, returns all available elements.
Return Values
If the flags parameter is not passed, an associative array containing the following elements is returned: dirname , basename , extension (if any), and filename .
Note:
If the path has more than one extension, PATHINFO_EXTENSION returns only the last one and PATHINFO_FILENAME only strips the last one. (see first example below).
Note:
If the path does not have an extension, no extension element will be returned (see second example below).
Note:
If the basename of the path starts with a dot, the following characters are interpreted as extension , and the filename is empty (see third example below).
If flags is present, returns a string containing the requested element.
Examples
Example #1 pathinfo() Example
$path_parts = pathinfo ( ‘/www/htdocs/inc/lib.inc.php’ );
?php
echo $path_parts [ ‘dirname’ ], «\n» ;
echo $path_parts [ ‘basename’ ], «\n» ;
echo $path_parts [ ‘extension’ ], «\n» ;
echo $path_parts [ ‘filename’ ], «\n» ;
?>
The above example will output:
/www/htdocs/inc lib.inc.php php lib.inc
Example #2 pathinfo() example showing difference between null and no extension
$path_parts = pathinfo ( ‘/path/emptyextension.’ );
var_dump ( $path_parts [ ‘extension’ ]);
?php
$path_parts = pathinfo ( ‘/path/noextension’ );
var_dump ( $path_parts [ ‘extension’ ]);
?>
The above example will output something similar to:
string(0) "" Notice: Undefined index: extension in test.php on line 6 NULL
Example #3 pathinfo() example for a dot-file
The above example will output something similar to:
Array ( [dirname] => /some/path [basename] => .test [extension] => test [filename] => )
Example #4 pathinfo() example with array dereferencing
The flags parameter is not a bitmask. Only a single value may be provided. To select only a limited set of parsed values, use array destructuring like so:
[ ‘basename’ => $basename , ‘dirname’ => $dirname ] = pathinfo ( ‘/www/htdocs/inc/lib.inc.php’ );?php
var_dump ( $basename , $dirname );
?>
The above example will output something similar to:
string(11) "lib.inc.php" string(15) "/www/htdocs/inc"
See Also
- dirname() — Returns a parent directory’s path
- basename() — Returns trailing name component of path
- parse_url() — Parse a URL and return its components
- realpath() — Returns canonicalized absolute pathname
PHP Текущее местоположение скрипта, папки, имя файла
В языке PHP есть несколько полезных констант, которые мы можем применять в построении динамического пути к файлу или папке.
Как в PHP узнать полный путь к файлу или папке
Для начала приведу примеры, что вы получите вызвав соответствующие константы:
echo __FILE__; // /home/bitrix/www/bitrix/modules/main/admin/php_command_line.php echo __DIR__; // /home/bitrix/www/bitrix/modules/main/admin
Мы рассмотрели 2 константы, __FILE__ и __DIR__ для отображения полного пути к текущему файлу и папке (директории). Стоит отметить, что __DIR__ эквивалентен вызову:
echo dirname(__FILE__); // /home/bitrix/www/bitrix/modules/main/admin
dirname – это стандартная функция PHP, которая возвращает родительский каталог. Она применяется как раз для таких ситуаций, когда вам нужно узнать полный путь к файлу без самого файла :). Мне на ум пришла идея, как можно добиться такого же результата (не удивлюсь, если под капотом тоже самое):
echo str_replace(__FILE__, '',__DIR__); // /home/bitrix/www/bitrix/modules/main/admin
Что мы еще можем применить для константы __FILE__? Конечно же отделить путь и получить просто имя файла:
echo basename(__FILE__); // php_command_line.php
basename – функция возвращает последний элемент из пути, который, как правило, и является именем файла. Раз уж мы решили писать функции заменители, давайте рассмотрим наш URL, как массив, разделенный слешами (“/”):
$arPath = explode('/', __FILE__); // Array ( [0] => [1] => home [2] => bitrix [3] => www [4] => bitrix // [5] => modules [6] => main [7] => admin [8] => php_command_line.php
Как видим, последний элемент массива является нашим файлом. Чтобы получить последний элемент массива, не зная его количество, пишем:
$arPath = explode('/', __FILE__); echo $arPath[count($arPath)-1];
Минус 1 потому как отсчет для массивов идет с нуля, но при счете всегда стартует с единицы.
Важно – в некоторых указаниях полного пути вы используете разделители (вышеупомянутые слеши ‘/’). Но, для Windows это «\», для Linux и остальных — «/». Есть такая константа:
Вернет 1 слеш (без кавычек).
Немного закрепим 2 функции, о которых шла речь выше:
str_replace – функция, которая используется для замены в строке. Первый параметр “что ищем”, затем “на что меняем” и последний “где ищем”, в который мы и передали нашу полную строку.
explode – функция, которая делает из строки массив. Но, чтобы функции понять как разбить строку – ей нужно передать “разделитель”, а уже вторым параметром – саму строку.
Как вы заметили, “/home/bitrix/www” – это путь на самом сервере, который можно “вырезать” как раз при помощи str_replace.
Если вам нужно использовать “текущий домен”, то получить его при помощи PHP можно несколькими способами. Один из них:
echo $_SERVER['SERVER_NAME']; // site.com.ua
Надеюсь вам эта тема была интересна. Пишите в комментариях как вам формат, и нужен ли он вообще. А то в последнее время только битрикс да битрикс :).
Работа с именами файлов в 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);