我的服务器中有一个提取问题。
我试图从网址获取所有内容,并将其保存在变量中。
但是,这返回fopen die消息。
这是我的代码:
//Guardo la url pasada por get
$url = $_GET["url"];
if(preg_match('#^http://www.filmaffinity.com.*#s', trim($url))){
//Funciona
} else{
$data = array('msg' => 'bad url');
echo json_encode($data);
return false;
}
//Tomo el código y lo meto en una variable
$fo= fopen($url,"r") or die ("No se encuentra la pagina.");
while (!feof($fo)) {
$cadena .= fgets($fo, 4096);
}
fclose ($fo);
这是我的代码的一部分,当我执行此操作时,返回' No se encuentra la pagina.
'
allow_url_fopen
在我的服务器中为ON
。
如何解决这个问题?可以帮帮我吗?
感谢。
答案 0 :(得分:1)
您只是在网址中寻找某个名字?
这会更好。
if(stripos('http://www.filmaffinity.com',$url)){}
你可能想尝试:
file_get_contents($url)
您可能想尝试对网址进行编码:
$url = urlencode($url)
或
$url = rawurlencode($url)
curl会为您提供更多问题的答案:
使用curl,您可以控制超时,查看请求(curl_getinfo
)和响应(CURLINFO_HEADER_OUT, true
)标头,HTTP状态(['http_code']
),它可以遵循30x重定向等。< BR />
有一个问题:
$data = file_get_contents('http://www.filmaffinity.com');
返回错误:
file_get_contents(http://www.filmaffinity.com) [<a href='function.file-get-contents'>function.file-get-contents</a>]: failed to open stream: HTTP request failed! HTTP/1.0 500 Internal Server Error
卷曲:
HTTP CODE: aarray (
'url' => 'http://www.filmaffinity.com/',
'content_type' => 'text/html',
'http_code' => 302,
'header_size' => 223,
'request_size' => 170,
'filetime' => -1,
'ssl_verify_result' => 0,
'redirect_count' => 0,
'total_time' => 0.321491,
'namelookup_time' => 0.040338,
'connect_time' => 0.180309,
'pretransfer_time' => 0.180365,
'size_upload' => 0,
'size_download' => 20,
'speed_download' => 62,
'speed_upload' => 0,
'download_content_length' => 20,
'upload_content_length' => -1,
'starttransfer_time' => 0.321415,
'redirect_time' => 0,
'certinfo' =>
array (
),
'redirect_url' => 'http://www.filmaffinity.com/en/main.html',
'request_header' => 'GET / HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:32.0) Gecko/20100101 Firefox/32.0
Host: www.filmaffinity.com
Accept: */*
Accept-Encoding: deflate, gzip
卷曲有效,但你必须改变它:
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
为真:
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
<?php
header('Content-Type: text/plain; charset=utf-8');
echo "start\n";
$url = 'http://www.filmaffinity.com';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_ENCODING,"");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_FILETIME, true);
curl_setopt($ch, CURLOPT_USERAGENT,"Mozilla/5.0 (Windows NT 5.1; rv:32.0) Gecko/20100101 Firefox/32.0");
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 100);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_TIMEOUT,100);
curl_setopt($ch, CURLOPT_FAILONERROR,true);
$data = curl_exec($ch);
if (curl_errno($ch)){
$data .= 'Retreive Base Page Error: ' . curl_error($ch);
}
else {
$skip = intval(curl_getinfo($ch, CURLINFO_HEADER_SIZE));
$responseHeader = substr($data,0,$skip);
$data= substr($data,$skip);
$info = curl_getinfo($ch);
if ($info['http_code'] != '200')
$info = var_export($info,true);
}
if ($info['http_code'] != '200'){echo 'HTTP CODE: ' .$info['http_code'];}
preg_match_all('#<a href="([^"]*)#m',$data,$matches);
foreach($matches[1] as $val){
$url = 'http://www.filmaffinity.com' . $val;
echo "$url\n";
}
?>
http://www.filmaffinity.com/en/main.html
http://www.filmaffinity.com/en/advsearch.php
http://www.filmaffinity.com/en/login.php
http://www.filmaffinity.com/en/register.php
http://www.filmaffinity.com/en/main.html
http://www.filmaffinity.com/en/awards.php?award_id=berlin&year=2015
http://www.filmaffinity.com/en/awards.php?award_id=academy_awards&year=2015
http://www.filmaffinity.com/en/cat_new_th_us.html
http://www.filmaffinity.com/en/boxoffice.php
http://www.filmaffinity.com/en/imlost.php
http://www.filmaffinity.com/en/all_awards.php
http://www.filmaffinity.com/en/best_2014.php
http://www.filmaffinity.com/en/oscar_data.php
http://www.filmaffinity.com/en/topgen.php?nodoc=1
http://www.filmaffinity.comhttp://www.filmaffinity.com/es/main.html
http://www.filmaffinity.com/en/cookies_info.php
http://www.filmaffinity.com/en/tours.php
http://www.filmaffinity.com/en/tour.php?idtour=55
http://www.filmaffinity.com/en/tour.php?idtour=54
http://www.filmaffinity.com/en/tour.php?idtour=29
http://www.filmaffinity.com/en/tour.php?idtour=9
http://www.filmaffinity.com/en/tour.php?idtour=24
http://www.filmaffinity.com/en/tours.php
http://www.filmaffinity.com/en/trailers.php
http://www.filmaffinity.com/en/bestrated.php
http://www.filmaffinity.com/en/film489970.html
http://www.filmaffinity.com/en/film221477.html
http://www.filmaffinity.com/en/film730528.html
http://www.filmaffinity.com/en/film809297.html
http://www.filmaffinity.com/en/film399474.html
http://www.filmaffinity.com/en/film795770.html
http://www.filmaffinity.com/en/film536488.html
http://www.filmaffinity.com/en/film695552.html
http://www.filmaffinity.com/en/bestrated.php
http://www.filmaffinity.com/en/mostrated.php
http://www.filmaffinity.com/en/film575568.html
http://www.filmaffinity.com/en/film670216.html
http://www.filmaffinity.com/en/film124904.html
http://www.filmaffinity.com/en/film636539.html
http://www.filmaffinity.com/en/film206955.html
http://www.filmaffinity.com/en/film779937.html
http://www.filmaffinity.com/en/film617730.html
http://www.filmaffinity.com/en/film423489.html
http://www.filmaffinity.com/en/mostrated.php
http://www.filmaffinity.com/en/worstrated.php
http://www.filmaffinity.com/en/film189979.html
http://www.filmaffinity.com/en/film612348.html
http://www.filmaffinity.com/en/film968394.html
http://www.filmaffinity.com/en/film651247.html
http://www.filmaffinity.com/en/film281762.html
http://www.filmaffinity.com/en/film886013.html
http://www.filmaffinity.com/en/film591128.html
http://www.filmaffinity.com/en/film381051.html
http://www.filmaffinity.com/en/worstrated.php
http://www.filmaffinity.com/en/mostvisited.php
http://www.filmaffinity.com/en/film124904.html
http://www.filmaffinity.com/en/film994565.html
http://www.filmaffinity.com/en/film941942.html
http://www.filmaffinity.com/en/film575568.html
http://www.filmaffinity.com/en/film670216.html
http://www.filmaffinity.com/en/film423489.html
http://www.filmaffinity.com/en/film809035.html
http://www.filmaffinity.com/en/film391687.html
http://www.filmaffinity.com/en/film934433.html
http://www.filmaffinity.com/en/mostvisited.php
http://www.filmaffinity.com/en/cat_new_th_us.html
http://www.filmaffinity.com/en/film124904.html
http://www.filmaffinity.com/en/film376816.html
http://www.filmaffinity.com/en/film898006.html
http://www.filmaffinity.com/en/film562434.html
http://www.filmaffinity.com/en/film510733.html
http://www.filmaffinity.com/en/film272576.html
http://www.filmaffinity.com/en/film493854.html
http://www.filmaffinity.com/en/film792317.html
http://www.filmaffinity.com/en/film784978.html
http://www.filmaffinity.com/en/cat_new_th_us.html
http://www.filmaffinity.com/en/cat_upc_th_us.html
http://www.filmaffinity.com/en/film526524.html
http://www.filmaffinity.com/en/film405261.html
http://www.filmaffinity.com/en/film543207.html
http://www.filmaffinity.com/en/film809035.html
http://www.filmaffinity.com/en/film402986.html
http://www.filmaffinity.com/en/film956269.html
http://www.filmaffinity.com/en/film759419.html
http://www.filmaffinity.com/en/film699453.html
http://www.filmaffinity.com/en/film701069.html
http://www.filmaffinity.com/en/cat_upc_th_us.html
http://www.filmaffinity.comhttp://www.facebook.com/FilmAffinity
http://www.filmaffinity.comhttp://twitter.com/Filmaffinity
http://www.filmaffinity.com/en/faq.php
http://www.filmaffinity.com/en/private.php
然后添加(替换上面的foreach
循环):
foreach($matches[1] as $key => $val){
if (!strpos($val,'/film')){continue;}
$url = 'http://www.filmaffinity.com' . $val;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_ENCODING,"");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_FILETIME, true);
curl_setopt($ch, CURLOPT_USERAGENT,"Mozilla/5.0 (Windows NT 5.1; rv:32.0) Gecko/20100101 Firefox/32.0");
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 100);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_TIMEOUT,100);
curl_setopt($ch, CURLOPT_FAILONERROR,true);
$data = curl_exec($ch);
if (curl_errno($ch)){
$data .= 'Retreive Base Page Error: ' . curl_error($ch);
}
else {
$skip = intval(curl_getinfo($ch, CURLINFO_HEADER_SIZE));
$responseHeader = substr($data,0,$skip);
$data= substr($data,$skip);
$info = curl_getinfo($ch);
if ($info['http_code'] != '200')
$info = var_export($info,true);
}
if ($info['http_code'] != '200'){echo 'HTTP CODE: ' .$info['http_code'];}
$fp = fopen("html$key.txt",'w');
fwrite($fp,$data);
fclose($fp);
}
答案 1 :(得分:0)
使用http://php.net/manual/en/function.file-get-contents.php代替fopen。
$fo = file_get_contents($url);
答案 2 :(得分:0)
如果Web服务未返回成功响应,则allow_url_fopen
方法将失败。向您的http://www.filmaffinity.com网址发送curl请求时,我看到一个HTTP错误,我看到了500和403.如果您回复200 OK,那么您将不会遇到此问题。
<?php
//Guardo la url pasada por get
$url = "http://www.google.com";
//Tomo el código y lo meto en una variable
$fo= fopen($url,"r") or die ("No se encuentra la pagina.");
while (!feof($fo)) {
$cadena .= fgets($fo, 4096);
}
echo($cadena);
fclose ($fo);
?>
答案 3 :(得分:0)
您可能希望尝试此操作,以显示fopen()
尝试出现的问题。 HTTP响应标头应该可以帮助您理解。
$fo= @fopen($url,"r");
if ( !$fo ) {
echo "No se encuentra la pagina: ". $http_response_header[0];
}
else {
while (!feof($fo)) {
$cadena .= fgets($fo, 4096);
}
}
fclose ($fo);