Php, получить имя файла без расширения файла

Содержание:

  • HTML

    • Что такое HTML
    • <!DOCTYPE>
    • Мета теги в <head>
    • Тег <base>
    • Текст в html
    • HTML списки
    • Ссылки
    • Картинки на сайте
    • Таблицы
    • Фреймы
    • Формы
    • DHTML
    • Музыка
    • Видео
    • Карты изображений
    • SVG карты
    • Графика в HTML
    • SSI .shtml
    • Таблица цветов RGB
    • Правильноесочетание цветов
    • Таблица«безопасных»цветов
    • Таблица символов
    • Примеры HTML, CSS
  • CSS

    • Таблицы стилей CSS
    • Свод стилей
    • Псевдоклассы CSS
    • Псевдоэлементы CSS
    • CSS-градиент
    • Flexbox
    • Адаптивная верстка
    • @media screen
  • JavaScript

    • Описание языка
    • Методы и функции
    • Объекты
    • Строки
    • Формы
    • Фреймы и окна
    • Регулярныевыражения
    • Условнаякомпиляция
    • Примеры скриптов
    • Отладка
    • Оптимизация
    • Игры на JS
    • CSS из JS
  • PHP + MySQL

    • Введение в PHP
    • Основы языка
    • Использованиемассивов
    • $_server
    • Создание функций
    • Строки
    • Функции работысо строками
    • Объектноепрограммирование
    • Формы
    • Файлы
    • Загрузка файлов на сервер
    • MySQL

      • Дата, время MySQL
      • Вопросы по MySQL
    • Cookie
    • htaccess
    • Безопасность
    • Сессии
    • Отправка почты
    • Кэширование
    • Дата, время
    • Математическиефункции
    • Дополнительныевозможности
    • Регулярныевыражения
    • Библиотека Curl
    • IMAP, POP3, NNTP
    • Оптимизация
    • Примеры скриптов
  • XML + XSLT
  • AJAX

    • Знакомство с Ajax
    • ОбъектXMLHttpRequest
    • СозданиеAjax-приложения
    • Отправка формы
    • Области применения
    • Ajax примеры
    • АльтернативныеAjax-у методы
    • Ошибки Ajax
    • Навигация на AJAX
  • Графика CorelDRAW

    • Типы графики
    • Пакет CorelDRAW GS
    • Зимняя картинка
    • Осколок стекла
  • SEO

    • Анализ сайта
    • WEB продвижение(оптимизация)
    • Информацияо домене
    • Информация обIP-адресе
    • Ping поисковыхсистем
    • Robots.txt
    • meta Robots
    • Каталоги ипоисковики
    • Особенности SAPE
    • Page Rank
    • Сервис созданияссылок
    • О Контекстнойрекламе
  • Сервисы
  • Разное

    • Движки сайтов (CMS)
    • Хостинг
    • Настройка DNS
    • ADSL
    • RSS
    • ActiveX и HTML
    • Паролированиестраницы
    • HTTP коды
    • HTTP протокол
    • HTTP заголовки
    • Прячем ссылки
    • Черный списоксайтов
    • ☭ Заработокв интернете
    • Термины иопределения
    • Продажа доменов
    • НастройкиЯндекс-почты
    • Кнопки социалок
    • Настроки SIPв телефоне
    • Созданиепоискового плугина
    • Сервискоротких ссылок
    • Telegram: бот, ссылки.
    • Друзья
    • Статьи Liex
    • Задания к л/р
    • Примерызачетных задач
  • Статьи, обзоры
    • Шаблоны сайтов
    • Новости

Description

Warning: there are two different functions basename() — see below.

The functions dirname() and basename() break a null-terminated pathname string into directory and filename components. In the usual case,
dirname() returns the string up to, but not including, the final ‘/’, and basename() returns the component following the final ‘/’. Trailing ‘/’
characters are not counted as part of the pathname.

If path does not contain a slash, dirname() returns the string «.» while basename() returns a copy of path. If path is
the string «/», then both dirname() and basename() return the string «/». If path is a NULL pointer or points to an empty string, then
both dirname() and basename() return the string «.».

Concatenating the string returned by dirname(), a «/», and the string returned by basename() yields a complete pathname.

Both dirname() and basename() may modify the contents of path, so it may be desirable to pass a copy when calling one of these
functions.

These functions may return pointers to statically allocated memory which may be overwritten by subsequent calls. Alternatively, they may return a pointer to
some part of path, so that the string referred to by path should not be modified or freed until the pointer returned by the function is no longer
required.

The following list of examples (taken from SUSv2) shows the strings returned by dirname() and basename() for different paths:

path         dirname    basename
"/usr/lib"    "/usr"    "lib"
"/usr/"       "/"       "usr"
"usr"         "."       "usr"
"/"           "/"       "/"
"."           "."       "."
".."          "."       ".."

Script example to extract filename and extension in Bash

#!/bin/bash
# Purpose: Compile latest Linux kernel
# Author: Vivek Gite {https://www.cyberciti.biz/} 
# License: GPL version 2.0 or above
# ---------------------------------------------------------------- 
set -e
_out="/tmp/out.$$"
dldir=~linux
isdl=1 # do not download
current="$(uname -r)"
curl -s https://www.kernel.org > "$_out"
url="$(grep -A 2 '<td id="latest_button">' ${_out}  | grep -Eo '(http|https)://[^/"+.*xz')"
gpgurl="${url/tar.xz/tar.sign}"
file="${url##*/}"
remote="${file%.tar.xz}"
remote="${remote#linux-}"
echo "* Current Linux kernel: $current"
echo "* Remote Linux kernel version: $remote"
 || isdl=0
if 
then
	notify-send "A new kernel version ($remote) has been released."
	echo "* Downloading new kernel ..."
	wget -qc "$url" -O "${dldir}/${file}"
	wget -qc "$gpgurl" -O "${dldir}/${gpgurl##*/}"
	echo "* Using gpg to verify new tar ball ..."
	cd "$dldir"
	xz -fd "$file"
        gpg --verify "${gpgurl##*/}"
	if 
	then
		notify-send "Now compiling kernel ver $remote..."
		tar xf "${file%.xz}"
		cd "${file%.tar.xz}"
		cp -v "/boot/config-$(uname -r)" .config
		make -j $(nproc) && /usr/bin/notify-send "Password needed to install new kernel..." && sudo make modules_install && sudo make install && sudo reboot
	fi
fi

5 последних уроков рубрики «PHP»

Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.

Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак

В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение

В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

Подборка PHP песочниц
Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

Переменные

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

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

К названиям переменных применяются следующие правила:

  1. Название переменной должно передавать намерения программиста

  2. Название переменной должно сообщить, почему эта переменная существует, что она делает и как используется

  3. Название переменной не должно быть коротким

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

  5. Если переменная хранит признак, то он должен быть включен в название ()

  6. Переменные, отражающие свойства объекта, должны включать название объекта (, , , )

  7. Переменные и свойства объекта должны являться существительными и называться так, чтобы они правильно читались при использовании, а не при инициализации

    Плохо:

    Хорошо:

  8. Названия переменных должны содержать глагол , или

  9. Запрещены отрицательные логические названия

    Плохо:

    Хорошо:

  10. При наличии свойств (пункт 8 и аналогичные), порядок имя переменной состоит из: имени объекта, по отношению к которому используется переменная), свойство и продолжение названия переменной (, )

Правила оформления кода

В первую очередь ставится пространство имен (namespace), которое используется (если есть). Далее пишется конструкции использования классов (). В случае использования нескольких
классов одного пространства имен происходит группировка с помощью конструкции . Далее идет объявление класса.

Фигурные скобки ставятся на той же строке и разделяются пробелом.

Круглые скобки:

  1. Внутри не разделяются пробелом.
  2. Снаружи разделяются пробелами управляющие конструкции
  3. После названия метода/функции — пробел не ставится.

Каждая переменная должна быть объявлена на новой строке.

Условия и служебные вызовы методов разделяются переносом строки, переменные и работа с ними переносами строк не разделяются.

Внутри условий и циклов дополнительный перенос на новую строку не ставится.

Содержимое класса разделяется сверху одной пустой строкой.

Перед возвращаемым значением() обязательно ставится перенос строки, если метод не состоит из единственной строки.

Если условие является большим, то обязательно выделить его в одно или несколько смысловых выражений и использовать его (их) в условии.

Плохо:

Хорошо:

Bash get filename and extension

To just get filename from a given path:

FILE="/home/vivek/lighttpd.tar.gz"
basename "$FILE"
f="$(basename -- $FILE)"
echo "$f"

Get filename without using basename command

The syntax is:

FILE="/home/vivek/lighttpd.tar.gz"
echo ${FILE##*/}
## another example ##
url="https://www.cyberciti.biz/files/mastering-vi-vim.pdf"
echo "${url##*/}"

Get running script name using bash parameter

The $0 will provide full path for currently running script. To extract that name only:

#!/bin/bash
_self="${0##*/}"
echo "$_self is called"
 
## or in usage() ##
usage(){
    echo "$_self: arg1 arg2"
}

DESCRIPTION top

       Warning: there are two different functions basename() - see below.

       The functions dirname() and basename() break a null-terminated
       pathname string into directory and filename components.  In the usual
       case, dirname() returns the string up to, but not including, the
       final '/', and basename() returns the component following the final
       '/'.  Trailing '/' characters are not counted as part of the
       pathname.

       If path does not contain a slash, dirname() returns the string "."
       while basename() returns a copy of path.  If path is the string "/",
       then both dirname() and basename() return the string "/".  If path is
       a null pointer or points to an empty string, then both dirname() and
       basename() return the string ".".

       Concatenating the string returned by dirname(), a "/", and the string
       returned by basename() yields a complete pathname.

       Both dirname() and basename() may modify the contents of path, so it
       may be desirable to pass a copy when calling one of these functions.

       These functions may return pointers to statically allocated memory
       which may be overwritten by subsequent calls.  Alternatively, they
       may return a pointer to some part of path, so that the string
       referred to by path should not be modified or freed until the pointer
       returned by the function is no longer required.

       The following list of examples (taken from SUSv2) shows the strings
       returned by dirname() and basename() for different paths:

              path       dirname   basename
              /usr/lib   /usr      lib
              /usr/      /         usr
              usr        .         usr
              /          /         /
              .          .         .
              ..         .         ..

Использование glob()

glob()glob($pattern,$flags)

  • $pattern (обязательный): строка шаблона поиска
  • $flags (не обязательный): один или несколько флагов

    • GLOB_MARK — Добавляет слеш к каждой возвращаемой директории.
    • GLOB_NOSORT — Возвращает файлы в том виде, в котором они содержатся в директории (без сортировки). Если этот флаг не указан, то имена сортируются по алфавиту.
    • GLOB_NOCHECK — Возвращает шаблон поиска, если с его помощью не был найден ни один файл.
    • GLOB_NOESCAPE — Обратные слеши не экранируют мета символы.
    • GLOB_BRACE — Раскрывает {a,b,c} для совпадения с ‘a’, ‘b’ или ‘c’.
    • GLOB_ONLYDIR — Возвращает только директории, совпадающие с шаблоном.
    • GLOB_ERR — Останавливается при ошибках чтения (например, директории без права чтения), по умолчанию ошибки игнорируются.
<?php
$arFileList = glob("*.txt");
//Выводим результат
var_dump($arFileList);
?>
array(2) {
  =>
  string(10) "readme.txt"
  =>
  string(10) "serial.txt"
}
<?php
$arFileList = glob("te*");
//Выводим результат
var_dump($arFileList);
?>
array(2) {
  =>
  string(9) "test.html"
  =>
  string(7) "test.js"
}
<?php
$arFileList = glob("*er*", GLOB_ONLYDIR);
//Выводим результат
var_dump($arFileList);
?>
array(1) {
  =>
  string(4) "User"
}

В последнем примере использован флаг GLOB_ONLYDIR в качестве второго аргумента функции. Поэтому в список попала, только директория «User» в имени, которой встречается «er». Функция glob() очень проста в использовании, но иногда она недостаточно гибкая. Нет флага для получения только файлов (без директорий), которые соответствуют шаблону.

Базовые решения

Первый набор решений основан на использовании функции , комбинации функций , и , и также функции .

Использование

Первое решение базируется на использовании функции которая позволяет выполнять поиск пути с помощью шаблонов. Функция имеет два параметра:

  • (обязательный): шаблон поиска
  • (опциональный): один или несколько флагов, описание которых можно найти в документации

Рассмотрим примеры. Для поиска в директории всех файлов и директорий, имена которых заканчиваются на .txt, следует использовать код:

<?php
$filelist = glob("*.txt");

Если вывести переменную, то получим:

array (
  0 => 'article.txt',
  1 => 'text.txt'
)

Если нужен список файлов и директорий, имена которых начинаются на “te”, то код будет выглядеть так:

<?php
$filelist = glob("te*");

А вывод имеет вид:

array (
  0 => 'test.dat',
  1 => 'text.txt'
)

А для получения списка только директорий с именами, содержащих “ma”, используем код:

<?php
$filelist = glob("*ma*", GLOB_ONLYDIR);

Последний пример выведет:

array (
  0 => 'manager'
)

Обратите внимание, что в последнем примере использован флаг в качестве второго параметра функции. Поэтому файл исключен из списка

Хотя функция очень проста в использовании, иногда она недостаточно гибкая. Например, нет флага для получения только файлов (без директорий), которые соответствуют шаблону.

Используем , , и  .

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

Функция  открывает директорию и возвращает дескриптор соединения. Как только дескриптор получен, можно использовать функцию . С каждым обращением данная функция выдает имя следующего файла или директории внутри открытого каталога. Если все имена уже были перечислены, функция возвращает false. Для закрытия дескриптора используется функция .

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

Ниже приведенный пример возвращает список имен файлов и директорий начинающихся на “te”:

<?php
$filelist = array();
if ($handle = opendir(".")) {
    while ($entry = readdir($handle)) {
        if (strpos($entry, "te") === 0) {
            $filelist[] = $entry;
        }
    }
    closedir($handle);
}

При выполнении выше приведенного кода, переменная будет содержать такие включения, как  “.” и “..”. Это две виртуальные директории, которые имеются в каждом каталоге файловой системы. Они представляют текущий каталог и родительский каталог соответственно.

Второй пример выводит только файлы, содержащиеся в заданном каталоге.

<?php
$filelist = array();
if ($handle = opendir(".")) {
    while ($entry = readdir($handle)) {
        if (is_file($entry)) {
            $filelist[] = $entry;
        }
    }
    closedir($handle);
}

Пример выдаст следующее:

array (
  0 => 'article.txt',
  1 => 'master.dat',
  2 => 'script.php',
  3 => 'test.dat',
  4 => 'text.txt'
)

Использование

В завершение представим функцию . Она имеет только один обязательный параметр: путь для чтения.  Функция возвращает массив файлов и директорий, расположенных по указанному пути. Для получения списка файлов и директорий по определенному критерию нужно выполнить дополнительную фильтрацию. С другой стороны, решение получается более кратким и не требует управления дескрипторами.

Данный пример показывает, как получить список файлов и каталогов, имена которых начинаются на “te”:

<?php
$entries = scandir(".");
$filelist = array();
foreach($entries as $entry) {
    if (strpos($entry, "te") === 0) {
        $filelist[] = $entry;
    }
}

DESCRIPTION top

       Warning: there are two different functions basename() - see below.

       The functions dirname() and basename() break a null-terminated
       pathname string into directory and filename components.  In the usual
       case, dirname() returns the string up to, but not including, the
       final '/', and basename() returns the component following the final
       '/'.  Trailing '/' characters are not counted as part of the
       pathname.

       If path does not contain a slash, dirname() returns the string "."
       while basename() returns a copy of path.  If path is the string "/",
       then both dirname() and basename() return the string "/".  If path is
       a null pointer or points to an empty string, then both dirname() and
       basename() return the string ".".

       Concatenating the string returned by dirname(), a "/", and the string
       returned by basename() yields a complete pathname.

       Both dirname() and basename() may modify the contents of path, so it
       may be desirable to pass a copy when calling one of these functions.

       These functions may return pointers to statically allocated memory
       which may be overwritten by subsequent calls.  Alternatively, they
       may return a pointer to some part of path, so that the string
       referred to by path should not be modified or freed until the pointer
       returned by the function is no longer required.

       The following list of examples (taken from SUSv2) shows the strings
       returned by dirname() and basename() for different paths:

              path       dirname   basename
              /usr/lib   /usr      lib
              /usr/      /         usr
              usr        .         usr
              /          /         /
              .          .         .
              ..         .         ..

Обычный вывод в PHP

Если не отображаются русские символы при обычном выводе через echo, появляются знаки вопроса (?) вместо букв, то проблемой может быть неверно указанная кодировка файла. Стандартная программа блокнот Windows по умолчанию сохраняет файл в кодировке ANSI, в результате чего появляется такая проблема как на картинке.

Знаки вопроса вместо букв

Решить проблему можно сохранив файл в формате UTF-8, для этого в блокноте достаточно нажать Файл->Сохранить как… и в появившемся окне выбрать тип файла «Все файлы» и выбрать кодировку UTF-8. После чего нажать кнопку сохранить и подтвердить замену файла.

Сохранение файла в кодировке UTF-8

Открываем вновь в браузере и видим, что проблема решена.

Нормальное отображение символов в PHP

Этот способ показан для программы Блокнот Windows, т.к. чаще всего проблема возникает именно с ней у начинающих программистов PHP. Для программирования лучше использовать специальный текстовый редактор (Sublme Text, Notepad++ и др.) или IDE PhpStorm, они по умолчанию работают UTF-8.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector