Solved

Getting portion of php string

Posted on 2011-02-20
15
352 Views
Last Modified: 2012-05-11
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.
0
Comment
Question by:Fernanditos
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 4
  • 3
  • +3
15 Comments
 
LVL 16

Expert Comment

by:BurnieP
ID: 34937498
Hi,

Something around this line :

$str = substr($str, 0, strlen(strpos($str,"mp3") + 3))
0
 
LVL 27

Expert Comment

by:Lukasz Chmielewski
ID: 34937511
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
 
LVL 143

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 34937522
the parseurl function of php should do it:
http://www.php.net/manual/en/function.parse-url.php
0
Get 15 Days FREE Full-Featured Trial

Benefit from a mission critical IT monitoring with Monitis Premium or get it FREE for your entry level monitoring needs.
-Over 200,000 users
-More than 300,000 websites monitored
-Used in 197 countries
-Recommended by 98% of users

 
LVL 6

Expert Comment

by:MatthewP
ID: 34937618
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
 

Author Comment

by:Fernanditos
ID: 34937627
@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
 

Author Comment

by:Fernanditos
ID: 34937632
@Roads_Roads your solution wont work if file name contains a whitespace.

0
 
LVL 27

Expert Comment

by:Lukasz Chmielewski
ID: 34937637
How about BurineP's solution ?
0
 

Author Comment

by:Fernanditos
ID: 34937649
@MatthewP: your solution wont work if file name contains a whitespace.
0
 

Author Comment

by:Fernanditos
ID: 34937657
Burine's solution does not works. It returns just 2 letters: ht
0
 
LVL 6

Accepted Solution

by:
MatthewP earned 500 total points
ID: 34937680
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
 
LVL 6

Expert Comment

by:MatthewP
ID: 34937697
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
 
LVL 27

Expert Comment

by:Lukasz Chmielewski
ID: 34937700
<?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
 
LVL 110

Expert Comment

by:Ray Paseur
ID: 34937714
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
 
LVL 6

Expert Comment

by:MatthewP
ID: 34937767
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
 

Author Comment

by:Fernanditos
ID: 34937814
@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

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article discusses how to implement server side field validation and display customized error messages to the client.
Q&A with Course Creator, Mark Lassoff, on the importance of HTML5 in the career of a modern-day developer.
The viewer will learn how to dynamically set the form action using jQuery.
The viewer will get a basic understanding of what section 508 compliance can entail, learn about skip navigation links, alt text, transcripts, and font size controls.

632 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question