Getting portion of php string

Hi,

I have this kind of string:

$str = "http://www.site.com/blog/2011/02/01/filetoaudio-baker.mp3 6787576 audio/mpeg"

How can I get only the link to file portion? it is always a mp3 file.

Thank you.
FernanditosAsked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
MatthewPConnect With a Mentor Commented:
A simple change then. Is your data always in this format:

 path/to/filename string_of_numbers mime type

if so this will do it:
$str="http://www.site.com/blog/2011/02/01/file toaudio-baker.mp3 6787576 audio/mpeg";
$split_at_space=explode(" ",$str);
$mimetype=array_pop($split_at_space);
$numbers=array_pop($split_at_space);
$file=join(" ",$split_at_space);
echo $file; // print complete url
echo "\n";
echo basename($file); // print file name from url only

Open in new window




0
 
BurniePCommented:
Hi,

Something around this line :

$str = substr($str, 0, strlen(strpos($str,"mp3") + 3))
0
 
Lukasz ChmielewskiCommented:
Or - if this is always an address at the beginning,

$str = "http://www.site.com/blog/2011/02/01/filetoaudio-baker.mp3 6787576 audio/mpeg";
$strarr = explode(" ",$str);
$myfile = trim($strarr[0]);
0
Easily Design & Build Your Next Website

Squarespace’s all-in-one platform gives you everything you need to express yourself creatively online, whether it is with a domain, website, or online store. Get started with your free trial today, and when ready, take 10% off your first purchase with offer code 'EXPERTS'.

 
Guy Hengel [angelIII / a3]Billing EngineerCommented:
the parseurl function of php should do it:
http://www.php.net/manual/en/function.parse-url.php
0
 
MatthewPCommented:
To get just the file name, explode the string at spaces, if you want the file without the path use basename to get only the file portion - this example gives you both:

$str="http://www.site.com/blog/2011/02/01/filetoaudio-baker.mp3 6787576 audio/mpeg";
@list($file,$extra_data)=explode(" ",$str);
echo $file; // print complete url
echo "\n";
echo basename($file); // print file name from url only

Open in new window


-output will be:
http://www.site.com/blog/2011/02/01/filetoaudio-baker.mp3
filetoaudio-baker.mp3
0
 
FernanditosAuthor Commented:
@angelIII: Using that function I get the non desired strins in the path returned:

Array ( [scheme] => http [host] => www.blogtalkradio.com [path] => /newcaptainsofind ustry/2011/02/01/america-west-resources-ceo-dan-baker.mp3 6787576 audio/mpeg ) 

Open in new window

0
 
FernanditosAuthor Commented:
@Roads_Roads your solution wont work if file name contains a whitespace.

0
 
Lukasz ChmielewskiCommented:
How about BurineP's solution ?
0
 
FernanditosAuthor Commented:
@MatthewP: your solution wont work if file name contains a whitespace.
0
 
FernanditosAuthor Commented:
Burine's solution does not works. It returns just 2 letters: ht
0
 
MatthewPCommented:
That is assuming one space only as a separator between the various parts. If there may be more swap line 2 for:

$split_at_space=preg_split("/\s+/",$str);

Open in new window

0
 
Lukasz ChmielewskiCommented:
<?php
    $str = "http://www.site.com/blog/2011/02/01/file toaudio-baker.mp3 6787576 audio/mpeg";
    $mystr = trim(substr($str, 0, strpos($str,"mp3")+3));
    echo"$mystr";
?>

Open in new window

0
 
Ray PaseurCommented:
http://www.laprbass.com/RAY_temp_fernanditos.php

Outputs:
array(3) {
  [0]=>
  string(57) "http://www.site.com/blog/2011/02/01/filetoaudio-baker.mp3"
  [1]=>
  string(7) "6787576"
  [2]=>
  string(10) "audio/mpeg"
}

<?php // RAY_temp_fernanditos.php
error_reporting(E_ALL);
echo "<pre>";

// TEST DATA FROM THE POST AT EE
$str = "http://www.site.com/blog/2011/02/01/filetoaudio-baker.mp3 6787576 audio/mpeg";

// USE EXPLODE TO ISOLATE THE PARTS OF THE STRING
$arr = explode(' ', $str);

// SHOW THE ISOLATED PARTS
var_dump($arr);

Open in new window

0
 
MatthewPCommented:
Oh, that said, using that method if you may have multiple spaces together as separators there will be more work if the file name may also contain multiple spaces as part of the name.

Another way, actually with much less code:

$str="http://www.site.com/blog/2011/02/01/file  toaudio-baker.mp3  6787576    audio/mpeg";
$result=preg_match("/.*\.\w+/",$str,$matches);
echo $matches[0];

Open in new window




0
 
FernanditosAuthor Commented:
@Roads, sorry I did not see your last solution. Matthew's solution is working great.

However if I give a dynamic value to $str instead of static ".." then $file returns empty.

I have opened another question for that related issue. Can you help there?

http://www.experts-exchange.com/Web_Development/Web_Languages-Standards/PHP/Q_26834559.html

Thank you all!

0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.