PHP'nin file_get_content ('a url') kullanmaya çalışıyorum;
Url '&' varsa bir şey bu, örneğin
file_get_contents('http://www.google.com/?var1=1&var2=2')
otomatik olarak www.google.com/?var1=1&var2=2 bir istekte
Bunu nasıl oluyor engellerim?
Ben sorunun orijinal posteri ile katılıyorum. Çok özel olması:
Bu geçirilecek sensör = false değişken gerektirir, ya da sorgu Google BAD sonuçları dönecektir. Ben file_get_contents ile bu STRING geçirirseniz, (PHP? Izle) "ve" yerine "&" bu yüzden Google beni sevmiyor ile:
Array
(
[type] => 2
[message] => file_get_contents(http://maps.googleapis.com/maps/api/geocode/json?address=301 E. Linwood Avenue Turlock, CA&sensor=false) [<a href='function.file-get-contents'>function.file-get-contents</a>]: failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request
)
Yani bu http_build_query kullanarak, ben ile geldi çözüm
$myURL = 'http://maps.googleapis.com/maps/api/geocode/json?';
$options = array("address"=>$myAddress,"sensor"=>"false");
$myURL .= http_build_query($options,'','&');
$myData = file_get_contents($myURL) or die(print_r(error_get_last()));
Ben de PHP PHP website üzerinde bulunan kodu (teşekkürler Marco K.) içerir 5:
if (!function_exists('http_build_query')) {
function http_build_query($data, $prefix='', $sep='', $key='') {
$ret = array();
foreach ((array)$data as $k => $v) {
if (is_int($k) && $prefix != null) {
$k = urlencode($prefix . $k);
}
if ((!empty($key)) || ($key === 0)) $k = $key.'['.urlencode($k).']';
if (is_array($v) || is_object($v)) {
array_push($ret, http_build_query($v, '', $sep, $k));
} else {
array_push($ret, $k.'='.urlencode($v));
}
}
if (empty($sep)) $sep = ini_get('arg_separator.output');
return implode($sep, $ret);
}// http_build_query
}//if
Eğer böyle bir şey yapmak için izin verecek PHP CURL kütüphanelerde bakarak denemelisiniz:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://mysite.com/file.php?blah=yar&test=blah");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
curl_close($ch);
Daha sonra $ verilerden sonuçlar alabilirsiniz.
Sorun PHP kodu büyük olasılıkla parçasıdır. Ben ne oluyor düşünüyorum aslında olmuyordu olduğunu sanıyorum.
Ben oldukça deftere kod daha, muhtemelen gibi, bir değişken o URL kısmını kapma şüpheli:
$data = file_get_contents("http://example.com/?$myvariable");
Çünkü tarayıcıda "amp" tarayıcıya bu değişken yineleyen, yanlışlıkla bir önceki adımda özel karakterleri kodlanmış ettik gerçeği saklanıyor olabilir "&" gibi bakmaya gidiyor.
Bu file_get_contents () isteği düzgün çalıştığını da mümkün, ve ne düşünmek ve kodlayan bir sorundur işaret başka bir yerde bir sorun olabilir - gerçek kaynak kodunu yayınlayarak sorunu belirlemede yardımcı olabilir.
Aslında, sorgu dizesinde alan ayırıcı olarak & kullanarak yanlış bir şey yok. Bu mükemmel bir valid ve hatta recommended by w3c. Kullanarak sorun & o karakter varlık başvuruları ile etkileşim olduğunu (form sahip olan &xxx;).
Ayrıca, url_encode() fonksiyonu için PHP kılavuzda nota bakın:
Be careful about variables that may match HTML entities. Things like &, © and £ are parsed by the browser and the actual entity is used instead of the desired variable name. This is an obvious hassle that the W3C has been telling people about for years. PHP supports changing the argument separator to the W3C-suggested semi-colon through the arg_separator .ini directive. Unfortunately most user agents do not send form data in this semi-colon separated format. A more portable way around this is to use
&instead of&as the separator.
Eğer gerçekten & URL'lerinizdeki beğenmezseniz ben% 100 değilim, ancak ben, php.ini dosyasındaki arg_separator direktifi ayarını kontrol etmek için öneririm emin file_get_contents URL'leri değiştiren ne şekilde etkiler