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

ce que je besoin est juste http://localhost/storage/22ff0bc0662bd323891844f6ed342cce2603490ec0_tumb_2.jpgmeilleur moyen de remplacer une chaîne?

quelle est la meilleure façon de le faire? je veux dire utiliser strlen? substr_replace? substr? Im un peu confus quelle est la meilleure façon de le faire? Parce qu'il y a plusieurs façons de le faire.

edit * il n'y a pas de tag débutant: |

// 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; 

// ça marche !, mais laisser voir les commentaires peut-être il y a une meilleure façon :)

+0

@sarfraz, pas i ne peux plus l'utiliser: | même les meilleures pratiques ont disparu, wonderwhy? peut-être qu'ils abaissent la charge de récupération de base de données ou quelque chose. –

Répondre

1

Voici comment vous pouvez obtenir la partie d'image:

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

Résultat:

22ff0bc0662bd323891844f6ed342cce2603490ec0_tumb_2.jpg 

Maintenant, vous pouvez concaténer avec tout ce que par exemple:

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

Résultat:

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

Et il est fort probable que vous voulez concaténer le chemin de l'image avec la racine de votre document que vous faites comme ceci:

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

L'idée est que vous éclatez la chaîne avec explode fonction en spécifiant / comme délimiteur. Cela vous donne un tableau, maintenant vous utilisez la fonction end pour obtenir la partie finale du tableau qui est réellement votre image.

+0

wew, ive neverthink à ce sujet! . laissez-moi essayer :) –

0

Je vous suggère de vérifier si la chaîne contient /home/adam/Projects/red, et si elle le fait, vous utilisez substr pour obtenir la partie après, et vous le collez avec 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

Donc, un chemin difficile .. – pltvs

+0

@garvey: à l'exclusion de la déclaration des variables, il s'agit de deux lignes. – zneak

0

Celui-ci est à peu près le plus facile

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

Bien que ce soit peu probable, vous casserez la chaîne si '/ home/adam/Projects/red' est présent plusieurs fois dans le chemin. – zneak

+0

@zneak En effet, mais ce serait extrêmement improbable. – Maerlyn

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

C'est peu probable, mais vous obtiendrez des résultats erronés si '$ string' contient plusieurs fois'/home/adam/Projects/red'. – zneak

1

Si le préfixe de chemin représente votre chemin racine du document, vous pouvez le faire pour dépouiller:

$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; 
} 
Questions connexes