2017-01-03 3 views
1

Аватара пользователя сохраняется в папке ../wordpress/wp-content/uploads/ с именем и расширением, как и вход. То есть, если файл PNG загружается, расширение становится user_avatar0.png, иначе, если JPG будет загружен, он станет user_avatar0.jpg. Я загружаю несколько пользовательских аватаров, используя для каждого цикла.Как найти файлы разных типов с пути

Это код, который я использовал для загрузки аватара файла:

$path="../wordpress/wp-content/uploads/"; 
$av=$path."user_avatar0.png|.jpg"; // if jpg exists loads jpg otherwise load png 
<img src="'. $av .'" height="200" width="200" border="0" > 

Как выбрать файл из каталога, который содержит файлы различных расширений (JPG, PNG и т.д.)?

+0

Файл с расширением mulitple может быть примерно таким: 'file.en.html'. Это верно, но, вероятно, не то, что вы здесь имеете в виду. – Progrock

ответ

1

Что, вы пытались с умным .png|.jpg, является, к сожалению, не известным синтаксисом. Он не будет интерпретироваться ни PHP, ни браузером, который анализирует HTML. PHP не имеет функции, которая автоматически заполняла переменные пути в виде расширения параметров оболочки. ?. Конечно, есть glob(), но перетаскивание всего каталога, чтобы получить один файл с расширением jpg/png, было бы очень неэффективным.

Если у вас нет записи о том, что расширение файла (? Вы можете опрашивать базу данных WP), вы должны просто проверить что-то вроде этого, предполагая, JPG/PNG единственные возможности:

$file = 'user_avatar0.'; 
$file .= file_exists($file.'jpg') ? 'jpg' : 'png'; 

Это объединяет базовое имя с расширением jpg, если есть совпадение, и возвращается к png, если нет. Если есть вероятность, что у пользователя нет аватара вообще, тогда вы должны сделать if-elseif-else вместо этого, и по умолчанию стандартный заполнитель, если оба теста file_exists не пройдут. Вы также можете использовать realpath(), is_file() или stream_resolve_include_path(), чтобы проверить, существует ли файл; но логика остается прежней. По слухам, последний вариант будет самым быстрым, но в любом случае каждый из них кэширует свои результаты.

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

+0

В связанных функциях есть 'fnmatch()' ~ http://php.net/manual/en/function.fnmatch.php ~, которые можно использовать для проверки наличия файла, соответствующего шаблону регулярного выражения. Однако он возвращает только логическое значение, поэтому это не помогает в случае OP. Только для записи re: параллели с шаблонами оболочки в PHP. –

+0

любые синтаксические ошибки в этой строке, если они есть? '$ file. = file_exists ($ file.'jpg ')? 'jpg:' png '; ' –

+0

Закрытая цитата после' 'jpg'. Теперь исправлено в сообщении. –

Смежные вопросы