Aaron Aaron - 11 months ago 50
PHP Question

PHP - Failed to open stream with URL containing variable

I'm trying to use file_get_contents but it tells me failed to open stream.

My code:

$user_id=str_replace(array('@', '#'), array('%40', '%23'), $user);
print $user_id;


This is what I get when I try to run it:

failed to open stream: HTTP request
failed! HTTP/1.1 500 Internal Server

However, if I manually type in the $user_id first_last%40ourwiki.com then it works! What am I doing wrong? Shouldn't I be able to just use the variable name?

Remaining code:

$delete = "http://admin:password@$user_id/properties/%s";
$xml = new SimpleXMLElement($xmlString);

function curl_fetch($url,$username,$password,$method='DELETE')
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
return curl_exec($ch);

foreach($xml->property as $property) {
$name = $property['name'];
$name2 =str_replace(array('@', '#'), array('%40', '%23'), $name);
print $name2;
curl_fetch(sprintf($delete, $name2),'admin','password');

Answer Source

This is because you have used single quotes. The content within single quotes is not parsed, so:
echo '$test';
won't display the value of the $test variable, but just the "$test" string. You can use double quotes instead, but anyway this is the best way to do it:


Special characters such as \n, \t or \r also won't be parsed in single quotes.