Problème sur un script php

Lora
Invité n'ayant pas de compte PHPfrance

05 juin 2008, 14:31

Bonjour,
J'ai un problème avec se script PHP.
C'est un script censé vérifié tout les liens d'un site internet. Il récupère le code http (404,200...)
et l'insère dans un tableau.
Il plante... apparement il boucle sur le premier lien qu'il trouve.
Je sais que l'on ne doit pas poster plus de 20 lignes...mais je ne cois vraiment pas dans quelle partie du code est l'erreur.
Merci d'avance et bon courage à ceux qui se pencherons dessus.
<?php
$ADRESSE = "http://www.terresens.com";
$array = array();

function getA($cha){
	global $array;
	while ($ligne = fgets($cha)){
		$tab = preg_split("/href=\"/", $ligne);
		for ($i = 1; $i < count($tab); $i++){
			if (preg_match("/^(\S+)\"/", $tab[$i], $out)){
				if (!($out[1] == "#" || $out[1] == "")){
					if (!isset($array[$out[1]])) $array[$out[1]] = 0;
				}
			}
		}
	}
}
function checkUrl($adress){
	global $ADRESSE;
	global $array;
	
	$cha = fopen ($adress, "r"); 
	getA($cha);
	fclose($cha);

	$i = 0;
	foreach ($array as $keys => $value){
		if ($value == 0){
			if (!preg_match("/http:\/\//", $keys)){
				$vari = $ADRESSE . $keys;
				$cha1 = @fopen($vari, "r");
				$array[$keys] = $http_response_header[0];
				@fclose($cha1);
				//checkUrl($ADRESSE . $keys);
			} else {
				$vari = $keys;
				$cha1 = @fopen($vari, "r");
				$array[$keys] = $http_response_header[0];
				@fclose($cha1);
			}
		}
	}
}
checkUrl($ADRESSE);
?

Mammouth du PHP | 684 Messages

13 juin 2008, 16:41

Salut.
En premier, a la fin de ton code, tu met juste '?' alors qu'il faut '?>'. Je pense que c'est
une erreur de copier coller mais je prefere le signaler.

Il y a un petit probleme dans la fonction function checkUrl($adress).
    $i = 0;
    foreach ($array as $keys => $value) {
        if ($value == 0) {
            if (!preg_match("/http:\/\//", $keys)) {
                $vari = $ADRESSE . $keys;
                /**
                 * ICI je fais un var_dump() des adresses pour connaitre les adresses
                 * que tu veux tester. A priori les adresses sont correctes.
                 */
                var_dump($vari);
                /**
                 * Je rajoute se bout de code pour lire le fichier. Pourquoi ????
                 * Tout simplement car meme si le fichier n'existe pas sur ton serveur web,
                 * le serveur te renvois une page web avec afficher HTTP Error 404.
                 * Sinon ca te renvois le contenu de ton fichier. Attention c'est un exemple tres lourd.
                 * Avec ce debugage tu vas en gros lire ton site deux fois.
                 */
                $cha1 = fopen($vari, "r");
                $maPage = '';
                while ($ligne = fgets($cha1)) {
                    $maPage .= $ligne;
                }
                /**
                 * Ici j'affiche la page qui est soit la bonne soit une erreur HTTP.
                 */
                var_dump($maPage);
                /**
                 * Cette ligne fait une ERREUR PHP. Il faut que tu active :
                 * error_reporting "E_ALL" dans ton php.ini.
                 * $http_response_header[0] n'existe pas. Tu devrais regarder dans
                 * la documentation de php pour avoir plus d'information.
                 */
                $array[$keys] = $http_response_header[0];
                @fclose($cha1);
                //checkUrl($ADRESSE . $keys);
            }
            else {
                $vari = $keys;
                $cha1 = @fopen($vari, "r");
                $array[$keys] = $http_response_header[0];
                @fclose($cha1);
            }
        }
    }
Pour faire ce que tu veux, regarde la doc de php.net sur Curl. http://fr3.php.net/manual/fr/book.curl.php
Zigz4g

Mammouth du PHP | 684 Messages

16 juin 2008, 15:35

J'ai trouver ceci mais dans la doc il precise ca : (No version information available, might be only in CVS)
http://www.php.net/manual/fr/reserved.v ... header.php
et il y a aussi en PHP5 seulement :
http://www.php.net/manual/fr/function.get-headers.php
Zigz4g