views:

261

answers:

2

Hi. I'm editing a mashup of mine where I fetch last.fm data through their API (xml).

For some reason, my localhost can't connect to the file: it gives the following error.

failed to open stream: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. in C:\Web\Apache\Apache2\htdocs\soctfm\user.php on line 35

and

I/O warning : failed to load external entity

The problem, is, is that it works fine on my main server. When I try to fetch the xml from my localhost it fails.

allow_url_fopen is on for both servers. So it isn't that. It could be a PHP version error.

Using PHP 5.1.4 on my localhost.

Using PHP 5.2.5 on my main server.

I must add, which I think could be the problem, I'm working from my university internet. This means, we have to connect through a proxy to the internet.

You see, in the end, everything is supposed to work fine. The XML and code works perfectly on my main server, but manages to fail on my localhost, and I don't know why.

Is there any more debugging I can do? Could it be the proxy?

+3  A: 

It's almost certainly your proxy server. If you use curl you can set it up to go through your proxy.

Greg
Thanks, haven't used curl yet. Will read up on it.
Shotbeak
+3  A: 

If, like you say, you are behind a proxy, your simplexml_load_file will probably fail : PHP will not be able to connect directly to the remote server, and won't be able to download the XML file.

Two possible solutions :

  • first, fetch the data, with something else (like curl, configureg to use the proxy ; see the options you can use with curl_setopt) ; and only then, use simplexml_load_string.
  • Or, use stream_context_create to configure a stream that uses the proxy.
    • About that, you can see my answer there : it was the same problem you are experiencing
    • Though, you'll probably have to fetch the XML data first, with file_get_contents, and, only then, use simplexml_load_string to load it, as simplexml_load_file doesn't seem to accept a stream context as parameter :-(

The second solution should work quite nice, I suppose ; and shouldn't require too much work : just a stream context to configure when you are on localhost.
Which means less work than having to deal with curl, I suppose ;-)

Have fun !

Pascal MARTIN
Good answer, although I disagree with your implication that "having to deal with curl" is difficult.
GZipp