file() et serveur distant
5 messages
• Page 1 sur 1
Consultez la formation au REFERENCEMENT naturel Google de WebRankInfo / Ranking Metrics
- jeroen
- WRInaute passionné

- Messages: 2461
- Inscription: 30 Aoû 2002
file() et serveur distant
Bonjour à tous !
J'utilise la fonction php file() pour récupérer un flux rss distant et je rencontre un problème : lorsque le serveur distant ne répond pas, le script bloque ...
j'utilise :
est que c'est correct, et est ce qu'il y a une meilleure solution ??
la page qui pose problème : xxx
Merci de votre aide...
[edit] 404
J'utilise la fonction php file() pour récupérer un flux rss distant et je rencontre un problème : lorsque le serveur distant ne répond pas, le script bloque ...
j'utilise :
- Code: Tout sélectionner
if (($content=@file($url)) !== FALSE)
{
traitement...
}
est que c'est correct, et est ce qu'il y a une meilleure solution ??
la page qui pose problème : xxx
Merci de votre aide...
[edit] 404
Dernière édition par jeroen le Dim Nov 09, 2008 22:25, édité 1 fois.
- Invité
Voila un extrait du code que j'utilise pour mon spider afin de crawler des sites (gestion encoding chuncked et redirection 301, 302)
peut pratiquement être repris tel quel.
- Code: Tout sélectionner
define("SE_CHARSET", "iso-8859-1");
define("SE_USER_AGENT","sebot/1.0 (+http://www.monsite.com/)");
define("SE_VERSION","1.0");
define("SE_CRLF","\r\n");
$page = array (
'site_id' => '',
'url' => '',
'status' => '',
'redir' => '',
'rewrite' => 0,
'level' => 0,
'index' => true,
'follow' => true,
'last-modified' => '',
'content-type' => '',
'content' => ''
);
function fnParseURL($url) {
$parse = array();
if(eregi("^([a-z]*)(://([^/]+))?/?(.*)$", $url, $regs)) {
$parse['scheme'] = $regs[1];
$parse['host'] = $regs[3];
$parse['fpath'] = "/".$regs[4];
unset($regs);
ereg("^([^\?]*)(.*)$", $parse['fpath'], $regs);
$parse['path'] = $regs[1];
$parse['query'] = $regs[2];
unset($regs);
ereg("^(.*/)([^/]*)$", $parse['path'], $regs);
$parse['path'] = $regs[1];
$parse['file'] = $regs[2];
} else {
$parse = false;
}
return $parse;
}
function seGetUrl(&$page) {
if($page['rewrite'] > 2) return("701");
$url = ($page['rewrite'] > 0)? $page['redir']: $page['url'];
$location = fnParseURL($url);
$fp = fsockopen($location['host'], 80);
if(!$fp) return "700";
$http_request =
"GET ".$location['fpath']." HTTP/1.1".SE_CRLF
."Host: ".$location['host'].SE_CRLF
."Connection: close".SE_CRLF
."Accept: */*".SE_CRLF
."Accept-Charset: ".SE_CHARSET.SE_CRLF
."Accept-Encoding: identity".SE_CRLF
."User-Agent: ".SE_USER_AGENT.SE_CRLF.SE_CRLF;
fputs($fp, $http_request);
$http_header = array();
$http_content = "";
$response = fgets($fp, 1024);
$http_header['http-status'] = $response;
while(($response != "\r\n") && !feof($fp)) {
if(ereg("^ *([^ :]+) *: *([^\r\n]+)", $response, $regs)) {
$http_header[strtolower($regs[1])] = $regs[2];
}
$response = fgets($fp, 1024);
}
$complete = false;
if(isset($http_header['transfer-encoding'])) {
if($http_header['transfer-encoding'] == "chunked") {
$content_length = 0;
$response = fgets($fp, 1024);
$chunk_size = -1;
if(ereg("([A-Fa-f0-9]+) *[;]? *([^\r\n ]*) *", $response, $regs)) {
$chunk_size = intval(base_convert($regs[1], 16, 10));
$chunk_ext = $regs[2];
}
while($chunk_size > 0) {
while($chunk_size && !feof($fp)) {
$response = fread($fp, $chunk_size);
if($response_len = strlen($response)) {
$http_content .= $response;
$content_length += $response_len;
$chunk_size -= $response_len;
}
}
$response = fgets($fp, 1024); // CRLF
$response = fgets($fp, 1024);
$chunk_size = -1;
if(ereg("([A-Fa-f0-9]+)", $response, $regs)) {
$chunk_size = intval(base_convert($regs[1], 16, 10));
}
}
if($chunk_size != -1) {
// chunk footer - Append entity-header to existing header fields
$response = fgets($fp, 1024);
while(($response != "\r\n") && !feof($fp)) {
if(ereg("^ *([^ :]+) *: *([^\r\n]+)", $response, $regs)) {
$http_header[$regs[1]] = $regs[2];
}
$response = fgets($fp, 1024);
}
$http_header['content-length'] = $content_length;
unset($http_header['transfer-encoding']);
$complete = true;
}
}
} else {
if(isset($http_header['content-length'])) {
$content_length = intval($http_header['content-length']);
while($content_length && !feof($fp)) {
$response = fread($fp, $content_length);
if($response_len = strlen($response)) {
$http_content .= $response;
$content_length -= $response_len;
}
}
$complete = true;
}
}
fclose($fp);
if(!$complete) return "700";
if(ereg("HTTP/[^ ]+ ([0-9]{3})", $http_header['http-status'], $regs)) {
$status = $regs[1];
if($page['rewrite'] == 0) $page['status'] = $status;
if($status == "200") {
$page['content'] = $http_content;
if(isset($http_header['last-modified'])) {
$page['last-modified'] = fnParseIsoDate($http_header['last-modified']);
}
if(isset($http_header['content-type'])) {
if(eregi("([^; ]+)", $http_header['content-type'], $regs)) {
$page['content-type'] = $regs[1];
}
}
}
elseif(($status == "301") || ($status == "302")) {
if(isset($http_header['location'])) {
$redir = fnParseURL($http_header['location']);
if(!empty($redir['scheme'])) {
$redir['scheme'] = $location['scheme'];
}
if(!empty($redir['host'])) {
$redir['host'] = $location['host'];
}
if(!ereg("^/", $redir['fpath'])) {
$redir['fpath'] = $location['path'].$redir['fpath'];
}
$page['redir'] = $redir['scheme']."://".$redir['host'].$redir['fpath'];
$page['rewrite']++;
$status = seGetUrl($page);
}
} else {
$page['status'] = $status;
}
return $status;
}
return "700";
}
$page['url'] = "http://ton_url";
$code = seGetUrl($page);
if($code == "200") {
... /* ton code */
}
peut pratiquement être repris tel quel.
5 messages
• Page 1 sur 1
Formation recommandée sur ce thème :
Formation REFERENCEMENT naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.
Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.
Lectures recommandées sur ce thème :
- Copie de fichier d'un serveur distant sur mon serveur
- MySQL sur serveur distant
- Configuration phpmyadmin pour serveur distant
- Requetes SQL sur serveur distant
- Problème connexion serveur distant MySQL
- Probleme de lecture d'entete sur serveur distant
- Redirection sélective d'un répertoire vers serveur distant
- Stocker ses mots de passe sur un serveur distant sécurisé
- Sauvegarde de sauvegarde sur serveur distant
- xmlhttprequest et fichier distant ...
- Comment créer une page web en PHP
- Comparer les classes C de 2 adresses IP
- Tous les outils à connaître pour analyser un site
- Redirection (PHP, JavaScript, serveur...)
- Changements de nom de domaine et TrustRank
- Aperçu des différents types de redirection
- Votre site doit toujours être accessible rapidement : conseil n°7 en référencement
- Changer d'hébergeur web sans pénaliser son référencement
Consultez la description détaillée des produits ou services de Google suivants : Google Web Accelerator
- Analyse de la classe C (adresse IP)
Cet outil vous permet de vérifier si plusieurs sites sont hébergés sur la même classe C (adresse IP du serveur). - Analyse de l'entête HTTP
Cet outil vous permet de connaître le code HTTP renvoyé par le serveur pour une page donnée.
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


