2009-12-12 6 views
1

J'ai cette fonction codée pour vérifier l'état d'un lien Rapidshare en utilisant leur API:retourne un tableau à partir d'une fonction (PHP)

function CheckLink($fileid, $filename) 
    { 
     $q = file_get_contents("http://api.rapidshare.com/cgi-bin/rsapi.cgi?sub=checkfiles_v1&files=$fileid&filenames=$filename"); 
     $r = explode(",", $q); 
     switch ($r[4]) 
     { 
      case 0: 
       return array('status' => "0", 'desc' => "File not found"); 
       break; 
      case 1: 
       return 1; 
       break; 
      case 2: 
       return 1; 
       break; 
      case 3: 
       return array('status' => "0", 'desc' => "Server down"); 
       break; 
      case 4: 
       return array('status' => "0", 'desc' => "File marked as illegal"); 
       break; 
      case 5: 
       return array('status' => "0", 'desc' => "Anonymous file locked"); 
       break; 
      case 6: 
       return 1; 
       break; 
      default: 
       return array('status' => "0", 'desc' => "Unknown error"); 
     } 
    } 

Si la fonction retourne 1, le fichier est vivant. S'il renvoie un tableau, cela signifie que le fichier est mort. Le tableau renvoyé est le code d'état (0 car il est mort) et le message d'erreur à afficher à l'utilisateur.

Maintenant, j'ai ce code dans index.php:

if(is_array($var = CheckLink($match[1], $match[2]))) 
{ 
    echo $var[1]; 
} 

Ce que je suis en train de faire est de vérifier si le résultat de la fonction est un tableau (ce qui signifie le lien est mort) et si elle est, renvoyer le message d'erreur à l'utilisateur. Mais ça ne marche pas, je n'ai pas d'erreur PHP et ça ne fait pas écho à la page.

Vous avez de l'aide? Merci. :)

+0

Je sais que ce n'était pas la question, mais vous faites les déclarations 'break' redondantes parce que vous quittez la fonction avant que' break'statement soit atteinte. –

Répondre

6

Il n'y a pas de clé 1 dans votre tableau de résultats. Remplacez la ligne echo par echo $var['desc'].

Modifier WRT commentaire:

Non, les tableaux PHP sont plus comme des tables de hachage: Chaque valeur a une clé, qui est généralement numérique, mais peut être une chaîne (je dirais « peut être quelque chose » , mais je ne suis pas sûr de l'étendue de ce qui peut être une clé en PHP). Si vous n'en spécifiez pas, il est fait pour être un entier, une clé augmentant automatiquement, donc ces deux tableaux sont équivalents: array('a', 'b', 'c') et array(0 => 'a', 1 => 'b', 2 => 'c').

Il est techniquement pas « deuxième élément » pour accéder à [1], car les tables de hachage sont non triés. Vous pouvez accéder à un tableau "sans clé" car il n'est pas réellement sans clé: sa clé est simplement définie automatiquement.

+0

Ahah, une erreur si stupide. Je pensais que vous pourriez référencer un élément de tableau comme ça, peu importe la façon dont le tableau est structuré. Merci :) – Joseph

+0

Cette réponse semble correcte. Considérons une interface plus simple, sans le tableau ... il suffit de retourner une chaîne s'il y a un problème, et 1 sinon ... ou aller plus loin, et retourner l'erreur s'il y en a une, et nulle sinon ... juste une idée. – ndp

+1

Joseph, vous aimez cette réponse l'accepter en cliquant sur la coche à gauche. –

1

Avez-vous fait print_r de $var?

$var = CheckLink($match[1], $match[2]); 
var_dump(is_array($var)); 
print_r($var); 
Questions connexes