2010-08-12 108 views
0
string '/home/adam/Projects/red/storage/22ff0bc0662bd323891844f6ed342cce2603490ec0_tumb_2.jpg' (length=85) 

什么,我需要的只是 http://localhost/storage/22ff0bc0662bd323891844f6ed342cce2603490ec0_tumb_2.jpg替换字符串的最佳方法是什么?

是什么做的最好方法是什么?我的意思是使用strlen? substr_replace? substr?即时通讯有点困惑什么是最好的方式做到这一点?因为有很多方法可以做到这一点。

编辑*没有新手标签:

// get from database red/storage/22ff0bc0662bd323891844f6ed342cce2603490ec0_tumb_2.jpg 
    $image_path = $this->data['products'][0]['image_small']; 
    $exploded = end(explode('/', $image_path)); 
    $myurl = DOMAIN; 
    $myfullurl = $myurl."/storage/".$exploded; 

//它的工作原理!但让看到的评论也许有更好的方法:)

+0

@sarfraz,没有我无法再使用它:|即使最好的做法也没有了,奇怪吗?也许他们正在降低数据库读取负载或其他东西。 – 2010-08-12 17:34:30

回答

1

这里是你如何能得到图像部分:

$str = '/home/adam/Projects/red/storag/22ff0bc0662bd323891844f6ed342cce2603490ec0_tumb_2.jpg'; 
$exploded = end(explode('/', $str)); 
echo $exploded; 

结果:

22ff0bc0662bd323891844f6ed342cce2603490ec0_tumb_2.jpg 

现在你可以用串联它无论如:

$new_str = 'http://localhost/storage/' . $exploded; 
echo $new_str; 

结果:

http://localhost/storage/22ff0bc0662bd323891844f6ed342cce2603490ec0_tumb_2.jpg 

你想连接您的文档根目录下,你做这样的图片路径是最有可能的:

$img_path = $_SERVER['DOCUMENT_ROOT'] . $exploded; 

的想法是,你爆炸的字符串explode功能通过指定/作为分隔符。这给了你阵列,现在你使用end函数来获取数组的实际结尾部分,这是你的图像。

+0

wew,ive neverthink! 。让我试试:) – 2010-08-12 17:28:41

0

我建议你检查如果字符串包含/home/adam/Projects/red,如果确实如此,您可以使用SUBSTR获得之后的部分,然后将它与http://localost粘合起来。

$path = '/home/adam/Projects/red/storage/*snip*.jpg'; 
$basePath = "/home/adam/Projects/red"; 
if (strpos($path, $path) !== false) 
    $url = 'http://localhost' . substr($path, strlen($basePath)); 
+0

这么难...... – pltvs 2010-08-12 17:30:30

+0

@garvey:排除变量声明,它是两行。 – zneak 2010-08-12 17:33:35

0

这一个几乎是最简单的

str_replace(
    "/home/adam/Projects/red", 
    "http://localhost", 
    "/home/adam/Projects/red/storage/22ff0bc0662bd323891844f6ed342cce2603490ec0_tumb_2.jpg" 
); 
+1

虽然不太可能,但如果在路径中多次出现“/ home/adam/Projects/red”,则会中断字符串。 – zneak 2010-08-12 17:32:43

+0

@zneak确实,但那是不太可能的。 – Maerlyn 2010-08-12 18:55:46

0
$string = '/home/adam/Projects/red/storage/22ff0bc0662bd323891844f6ed342cce2603490ec0_tumb_2.jpg'; 
str_replace('/home/adam/Projects/red', 'http://localost', $string) 
+0

这不太可能,但如果'$ string'多次包含'/ home/adam/Projects/red',则会得到错误的结果。 – zneak 2010-08-12 17:34:20

1

如果路径前缀代表你的文档根目录的路径,那么你就可以做到这一点剥离它:

$path = '/home/adam/Projects/red/storage/22ff0bc0662bd323891844f6ed342cce2603490ec0_tumb_2.jpg'; 
$_SERVER['DOCUMENT_ROOT'] = '/home/adam/Projects/red/'; 
if (substr($path, 0, strlen($_SERVER['DOCUMENT_ROOT'])) === $_SERVER['DOCUMENT_ROOT']) { 
    $uriPath = substr($path, strlen(rtrim($_SERVER['DOCUMENT_ROOT'], '/'))); 
    echo $uriPath; 
} 
相关问题