Php получить расширение файла
Этот вопрос вы можете прочитать везде в интернете с различными ответами:
Однако всегда есть "the best way", и он должен быть на Stack Overflow.
Я хочу изменить расширение файла php. Например, файл home.php вызывается в браузере, он должен быть показан как home.html. Я могу сделать это в codeigniter, используя переменную суффикса в конфигурационном файле. Но как я могу достичь этого в ядре php? Я думаю, что это можно сделать через файл.
Я хочу получить расширение файла изображения, которое я загружаю, но я просто получаю массив обратно. $userfile_name = $_FILES['image']['name']; $userfile_extn = explode(., strtolower($_FILES['image']['name'])); Есть ли способ просто получить само расширение?
Люди из других скриптовых языков всегда думают, что их лучше, потому что у них есть встроенная функция для этого, а не PHP (я сейчас смотрю на Pythonistas: -)).
На самом деле она существует, но мало кто знает об этом. Встретиться pathinfo() :
Это быстро и встроено. pathinfo() может дать вам другую информацию, такую как канонический путь, в зависимости от константы, которую вы передаете ему.
Помните, что если вы хотите иметь дело с символами, отличными от ASCII, вам нужно сначала установить locale. E.G:
Кроме того, обратите внимание, что это не учитывает содержимое файла или mime-тип, вы получаете только расширение. Но это то, о чем ты просил.
Наконец, обратите внимание, что это работает только для пути к файлу, а не для пути к ресурсам URL, который покрывается с помощью PARSE_URL.
Так как мы можем получить расширение файла в php с помощью функции explode или проверки in_array. Есть ли способ в Smarty получить расширение файла строки? Но как мы можем получить расширение файла на странице tpl с помощью smarty? в настоящее время я передаю все расширение в виде массива и.
Часто вы можете написать лучший код, если передадите такой объект вместо строки. Тогда ваш код более говорящий. С PHP 5.4 это однострочный вариант:
Ответ E-satis - это правильный способ определения расширения файла.
Кроме того, вместо того чтобы полагаться на расширение files, вы можете использовать fileinfo для определения типа files MIME.
Вот упрощенный пример обработки изображения, загруженного пользователем:
До тех пор, пока он не содержит путь, который вы также можете использовать:
Где $fname -это имя файла, например: my_picture.jpg . И результат будет таким: jpg
Иногда полезно не использовать pathinfo($path, PATHINFO_EXTENSION) . Например:
Также обратите внимание, что pathinfo не может обрабатывать некоторые символы, отличные от ASCII (обычно он просто подавляет их из выходных данных). В расширениях это обычно не проблема, но не помешает знать об этом предостережении.
1) Если вы используете (PHP 5 >= 5.3.6) , вы можете использовать SplFileInfo::getExtension — получает расширение файла
Это приведет к выходу
2) Еще один способ получения расширения, если вы используете (PHP 4 >= 4.0.3, PHP 5) is pathinfo
Это приведет к выходу
// EDIT: снят кронштейн
Самый простой способ получить расширение файла в PHP-это использовать встроенную функцию PHP pathinfo .
Вы можете попробовать также это (это работает на PHP 5.* и 7):
Совет: он возвращает пустую строку, если файл не имеет расширения
Извините. "Short Question; But NOT Short Answer"
Пример 1 для PATH
Пример 2 для URL
Выходные данные примера 1:
Выходные данные примера 2:
Рекомендации
Вот вам пример. Предположим, что $filename-это "example.txt",
Так что $ext будет ".txt".
pathinfo -это массив. Мы можем проверить имя каталога, имя файла, расширение и т. д.:
Быстрое решение было бы чем-то вроде этого.
Вы можете попробовать и это:
это лучший способ, если у вас есть имена файлов типа name.name.name.ext (некрасиво, но иногда это случается
Я обнаружил, что это надежный способ использовать pathinfo() на URL после первого разбора его, чтобы удалить ненужный беспорядок после расширения файла:
Используйте substr($path, strrpos($path,'.')+1); . Это самый быстрый метод из всех сравнений.
@Kurt Чжун уже ответил.
Делать это быстрее.
Звонки низкого уровня должны быть очень быстрыми , поэтому я подумал, что это стоит некоторых исследований. Я попробовал несколько методов (с различной длиной строки, длиной расширения, несколькими запусками каждый), вот некоторые разумные из них:
Результаты оказались не очень удивительными. Бедный pathinfo (безусловно!) самый медленный; даже с опцией PATHINFO_EXTENSION , похоже, он пытается разобрать все это, а затем отбросить все ненужные части. С другой стороны, встроенная функция strrpos придумана почти точно для этой работы, не требует обходных путей, поэтому неудивительно, что она работает намного лучше, чем другие кандидаты:
NOTE: первый метод имеет побочный эффект: он возвращает полное имя, когда нет расширения. Конечно, не было бы никакого смысла измерять его с помощью дополнительного strpos, чтобы избежать такого поведения.
Вывод
Это похоже на путь самурая:
Вы можете получить все расширения файлов в определенной папке и выполнять операции с определенным расширением файла:
Если вы ищете скорость (например, в маршрутизаторе), вы, вероятно, не хотите маркировать все. Многие другие ответы потерпят неудачу с /root/my.folder/my.css
Хотя "best way" является спорным, я считаю, что это лучший способ по нескольким причинам:
- Он работает с несколькими частями расширения, например tar.gz
- Короткий и эффективный код
- Он работает как с именем файла, так и с полным путем
ИМО, это лучший способ, если у вас есть имена файлов, такие как name.name.name.ext (некрасиво, но иногда это случается):
Похожие вопросы:
Я создаю скрипт CLI, который массово переименовывает файлы, однако я не знаю, как получить расширение файла, которого я не знаю. В основном файл CSV, который у меня есть, выложен так: New.
Как найти расширение файла в файле ruby ? Какой-нибудь пример ?
Возможный Дубликат : Как извлечь расширение файла в PHP ? Например, если у меня есть путь (сгенерированный моим torrent_info_gen)- Драйвер Для Genius Профессиональная Версия 10.0.0.526/Драйвер Для.
Я хочу изменить расширение файла php. Например, файл home.php вызывается в браузере, он должен быть показан как home.html. Я могу сделать это в codeigniter, используя переменную суффикса в.
Я хочу получить расширение файла изображения, которое я загружаю, но я просто получаю массив обратно. $userfile_name = $_FILES['image']['name']; $userfile_extn = explode(.
Так как мы можем получить расширение файла в php с помощью функции explode или проверки in_array. Есть ли способ в Smarty получить расширение файла строки? Но как мы можем получить расширение файла.
Можно ли получить расширение файла с file_put_contents в PHP? Я хочу скачать файлы с сервера, используя php с циклом, но каждый файл имеет свой тип, и я хочу знать, есть ли способ понять расширение.
Я пытаюсь сделать загрузчик файлов. Я успешно загружаю файл и читаю с помощью FileReader . Проблема здесь в том, что я не знаю, как получить расширение файла, если расширение не записано в имени.
Это вопрос, который вы можете прочитать повсюду в Интернете с различными ответами:
Однако всегда есть «лучший способ», и он должен быть в стеке Переполнение.
На самом деле он существует, но мало кто его знает. Встречайте pathinfo () :
Это быстро и встроено. pathinfo () может предоставить вам другую информацию, например канонический путь, в зависимости от константы, которую вы ему передаете.
Помните, что если вы хотите иметь возможность для работы с символами, отличными от ASCII, сначала необходимо установить языковой стандарт. Например:
Также обратите внимание, что это не требует принимая во внимание содержимое файла или mime-тип, вы получаете только расширение. Но это то, о чем вы просили.
Наконец, обратите внимание, что это работает только для пути к файлу, а не для пути к ресурсам URL, который покрывается с помощью PARSE_URL.
A) Не используйте предложенный небезопасный PATHINFO:
B) Используйте PARSE_URL:
БОНУС: просмотр всех нативных примеров PHP
A) Не используйте предложенные небезопасные PATHINFO :
B) Используйте PARSE_URL:
БОНУС: просмотр всех нативных примеров PHP
Также есть SplFileInfo :
Часто вы можете написать лучший код, если вы передавать такой объект вместо строки. Тогда ваш код более говорящий. Начиная с PHP 5.4 это однострочник:
Также есть SplFileInfo :
Часто можно напишите лучший код, если вы передадите такой объект вместо строки. Тогда ваш код более говорящий. Начиная с PHP 5.4 это однострочник:
В качестве альтернативы, вместо того, чтобы полагаться на расширение файлов, вы можете использовать fileinfo для определения MIME-типа файлов.
Вот упрощенный пример обработки изображения загружено пользователем:
В качестве альтернативы, вместо того, чтобы полагаться на в расширении файлов вы можете использовать fileinfo для определения MIME-типа файлов.
Вот упрощенный пример обработки изображения, загруженного пользователем:
Если он не содержит пути, вы также можете использовать:
Пока он не содержит пути, вы также можете использовать:
2) Другой способ получить расширение, если вы используете (PHP 4> = 4.0.3, PHP 5) это
//РЕДАКТИРОВАТЬ: удалили скобку
//EDIT: удалено скобка
Иногда полезно не используйте pathinfo ($ path, PATHINFO_EXTENSION) . Например:
Также обратите внимание, что pathinfo не может обрабатывать некоторые символы, отличные от ASCII (обычно он просто подавляет их из вывода). В расширениях это обычно не проблема, но не помешает знать об этом предостережении.
Иногда полезно не использовать pathinfo ($ path, PATHINFO_EXTENSION) . Например:
Также обратите внимание, что pathinfo не может обрабатывать некоторые символы, отличные от ASCII (обычно он просто подавляет их из вывода). В расширениях это обычно не проблема, но не помешает знать об этом предостережении.
Вы также можете попробовать это (работает на PHP 5. * и 7):
Совет: он возвращает пустую строку, если файл не имеет расширения
Вы также можете попробовать это (работает на PHP 5. * и 7):
Совет: он возвращает пустую строку, если файл не имеет расширения
Пример 1 для PATH
Пример 2 для URL
Вывод примера 1:
Вывод примера 2:
Ссылки
Пример 1 для PATH
Пример 2 для URL
Вывод примера 1 :
Вывод примера 2:
Ссылки
Сделать это быстрее.
Низкоуровневые вызовы должны быть очень быстрыми , поэтому я подумал, что стоит провести некоторое исследование. Я пробовал несколько методов (с различной длиной строки, длиной расширения, с несколькими запусками каждый), вот несколько разумных:
Результаты не сильно удивили. Плохой pathinfo (безусловно!) Самый медленный; даже с параметром PATHINFO_EXTENSION , похоже, он пытается разобрать все это целиком, а затем отбросить все ненужные части. С другой стороны, встроенная функция strrpos почти точно разработана для этой работы, не требует обходных путей, поэтому неудивительно, что она работает намного лучше, чем другие кандидаты:
ПРИМЕЧАНИЕ: первый метод имеет побочный эффект: он возвращает полное имя, когда нет расширения. Конечно, было бы бессмысленно измерять его с помощью дополнительных strpos, чтобы избежать такого поведения.
Заключение
Кажется, это Путь Самурая :
Делайте это быстрее.
Вызовы низкого уровня должны быть очень быстрыми Итак, я подумал, что стоит провести небольшое исследование. Я пробовал несколько методов (с различной длиной строки, длиной расширения, с несколькими запусками каждый), вот несколько разумных:
Результаты не сильно удивили. Плохой pathinfo (безусловно!) Самый медленный; даже с параметром PATHINFO_EXTENSION похоже, что он пытается разобрать все это целиком, а затем отбросить все ненужные части. С другой стороны, встроенная функция strrpos создана почти точно для этой работы, не требует обходных путей, поэтому неудивительно, что она работает намного лучше, чем другие кандидаты:
ПРИМЕЧАНИЕ: первый метод имеет побочный эффект: он возвращает полное имя, когда нет расширения. Конечно, было бы бессмысленно измерять его с помощью дополнительных strpos, чтобы избежать такого поведения.
Заключение
Кажется, это Путь Самурая :
Быстрое исправление будет примерно таким .
Быстрое исправление будет примерно таким.
Вы также можете попробовать это:
Вы также можете попробовать это:
Я обнаружил, что это надежный способ использовать pathinfo () в URL-адресе после его первого анализа, чтобы убрать ненужный беспорядок после расширения файла:
Я обнаружил, что это было надежный способ использования pathinfo () в URL-адресе после его первого анализа, чтобы убрать ненужный беспорядок после расширения файла:
Используйте substr ($ path, strrpos ($ path, '.') + 1); . Это самый быстрый метод сравнения.
@Kurt Zhong уже ответил.
Используйте substr ($ path, strrpos ($ path, '.') + 1); . Это самый быстрый метод сравнения.
@Kurt Zhong уже ответил.
это лучший способ, если у вас есть имена файлов вроде name.name.name.ext (некрасиво, но иногда случается
это лучший способ, если у вас есть имена файлов вроде name.name.name.ext (некрасиво, но иногда бывает
Это будет работать
Вы можете получить все расширения файлов в определенной папке и выполнять операции с определенным расширением файла:
Вы можете получить все файлы e xtensions в определенной папке и выполнять операции с определенным расширением файла:
$ ext = preg_replace ('/^.*.([^.pting+)$/D', '$ 1', $ fileName);
$ ext = substr ($ fileName, strrpos ($ fileName, '.') + 1);
$ ext = preg_replace ('/^.*.([^.pting+)$/D' , '$ 1', $ fileName);
$ ext = substr ($ fileName, strrpos ($ fileName, '.') + 1);
Если вы ищете скорость (например, в маршрутизаторе), вы, вероятно, не Не хочу все токенизировать. Многие другие ответы потерпят неудачу с /root/my.folder/my.css
Если вы ищете скорость (например, в маршрутизаторе), вы, вероятно, не захотите токенизировать все. Многие другие ответы потерпят неудачу с /root/my.folder/my.css
Хотя «лучший способ» спорен, я считаю, что это лучший способ по нескольким причинам:
- Он работает с несколькими частями, чтобы расширение, например, tar.gz
- Короткий и эффективный код
- Он работает как с именем файла, так и с полным путем
Хотя «лучший способ» спорен, я считаю, что это лучший способ по нескольким причинам:
- Он работает с несколькими частями, чтобы расширение, например, tar.gz
- Короткий и эффективный код
- Он работает как с именем файла, так и с полным путем
ИМО, это лучший способ, если у вас есть имена файлов, такие как name.name.name. ext (некрасиво, но иногда бывает):
IMO, это лучший способ, если у вас есть имена файлов, такие как name.name.name.ext (некрасиво, но иногда случается):
На самом деле, я это искал.
Собственно, я это и искал.
Я попробовал одно простое решение, которое может помочь кому-то другому получить только имя файла из URL-адреса, имеющего параметры получения
Я попробовал одно простое решение, которое может помочь кому-то другому получить только имя файла из URL, имеющего параметры получения
для быстрого поиска расширения (если вы точно знаете, что у вашего имени оно есть).
для быстрого получения расширений (если вы точно знаете, что у вашего файла оно есть).
Невозможно запросить URL без расширения файла php после обновления до Ubuntu 14.04
После обновления моего удаленного сервера до Ubuntu 14.04 (Apache 2.4) я не могу использовать свой предыдущий формат, в котором Я мог бы запрашивать URI, не вызывая расширения файлов, вроде того, как страницы вызываются в такой среде, как CodeIgniter.
У меня включен a2enmod (mode_rewrite).
Но чтобы завершить, я буду предоставить файлы htaccess и доступные для сайтов;
Я должен отметить, что это то же самое на моем локальном компьютере, где вызовы URI без расширений завершаются успешно.
У меня есть удалил код из моего файла .htaccess, так как я решил больше не использовать его, поскольку он не нужен и замедляет работу сервера.
Проблема заключается в файл .conf (или .htaccess, если вы его используете).
В моем файле .conf было следующее:
Наконец я узнал, что начиная с Apache 2.2 вы должны добавлять DOCUMENT_ROOT. Теперь работает следующее:
Задача определения расширения возникает в разработке достаточно часто – здесь и загрузка файлов на сервер, и анализ имеющихся файлов, и поиск файла. В работе с файлами на сервере, есть так же частое решение сохранения файла не с исходным именем, а назначение в качестве имени файла текущего значения TIMESTAMP сервера. Решений у этой задачи существует немало для разных языков программирования. Хотя некоторые решения, в первую очередь, приходящие на ум, иногда приходится дорабатывать из-за того разнообразия имен файлов которые только могут быть. Для файла с именем "myfile.txt" можно смело предложить разбить строку на части разделенные точкой и взять последнюю. Но что делать с файлами "my.file.txt" или в случае, если расширение не указано "myfile"?
В этой статье, рассмотрим такие решения.
Для удобства имя файл зададим в строковой переменной:
Самое простое и удобное, на мой взгляд, решение использовать с, которая вернет ассоциированный массив, содержащий сведения полном имени, расширении и директории файла. После этого остается только вывести необходимый элемент массива.
Чтобы не делать собственную функцию можно упросить код, указав в качестве второго параметра значение PATHINFO_EXTENSION. В этом случае функция вернет не весь массив, а только значение расширения.
Оба варианта корректно вернут значение расширения "txt", кроме случая, где расширение не указано. Там, где расширения нет, будет возвращена пустая строка.
Это решение доступно для PHP, начиная с версии 4.0.3.
Если по причине версии PHP или какой-либо другой причине это решение не доступно, можно использовать традиционное решение – разбивку строки имени файла на части между точками, считая, что последний участок и будет расширением.
Здесь, функция explode() разбивает строку на массив из символов, разделенных точками, а функция end() возвращает последний элемент полученного массива.
В этом примере, если расширение не задано явно, т.е. точки в имени файла нет, будет возвращено исходное имя файла. В случае, если расширение есть, оно будет получено корректно.
Читайте также: