2010-05-06 3 views
1

У меня есть приложение php, которое сохраняет фотографии на сервере, а также сохраняет имена изображений в базе данных. Проблема в том, что имена картинок включают в себя путь/папку, в которой он был сохранен (например, 1220368812/chpk2198933_large-2.jpg), поэтому мне нужно шаблон str_replace, чтобы удалить «1220368812 /» и правильно сохранить имя изображения дБ. Также я был бы признателен, если вы пришлете мне хорошую ссылку, которая объяснит, как работают шаблоны str_replace или, по крайней мере, как работает шаблон, который вы используете.php str_replace pattern

ответ

3

Попробуйте

  • basename - Возвращает имя файла из пути

Пример # 1 базовых() Пример

$path = "/home/httpd/html/index.php"; 
$file = basename($path);   // $file is set to "index.php" 
$file = basename($path, ".php"); // $file is set to "index" 

Там нет необходимости str_replace что-либо, потому что basename удалит часть пути. Также str_replace не разрешает узоров. Все, что он делает, это заменить все вхождения строки поиска на строку замены. Замена на узоров делается с Regular Expressions, но здесь они также не нужны.

+0

ммм downvote? для чего? – Gordon

+0

Наверняка вы уже привыкли к «проезжающим голосам» *? :) –

0

На самом деле pathinfo немного лучше. Это дает вам BASENAME и больше:

http://php.net/manual/en/function.pathinfo.php

<?php 
$path_parts = pathinfo('/www/htdocs/index.html'); 

echo $path_parts['dirname'], "\n"; 
echo $path_parts['basename'], "\n"; 
echo $path_parts['extension'], "\n"; 
echo $path_parts['filename'], "\n"; // since PHP 5.2.0 
?> 

Приведенный выше пример выведет:

/www/htdocs 
index.html 
html 
index 
+1

Если пользователю331071 необходимо получить больше информации, чем базовое имя (что-то не упоминается в OP), тогда 'pathinfo' может быть лучше (что в этом контексте« лучше »?). Но, чтобы получить только базовое имя файла, я бы пошел на предложение Гордона: только одна строка кода, из которой очень ясно, что она делает. Ваше предложение содержит дополнительную строку кода и использует поиск массива (гораздо менее выразительный, IMO). –

+0

... Конечно, не знает, что 'pathinfo' существует, конечно! :) –

+0

С basename() вы получаете только базовое имя и данные расширения. На основе OP требуется, используя функцию basename() для извлечения имени файла, у вас есть временное решение для расширения. pathinfo() также даст вам это. Это 1 остановка покупок. basename() - нет. – gurun8