Question

Je suis en train d'utiliser l'url rewriting sur mon site et je veux utiliser les fonctions de list() et explode() pour obtenir le bon contenu. mon code ressemble actuellement à ceci:

list($dir, $act) = explode('/',$url);

Dans ce $url cas est égal à tout ce qui suit la première barre oblique dans l'URL absolue à savoir http://example.com/random/stuff => $url = random/stuff/ cela fonctionne très bien, mais si je veux aller à http://example.com/random/ il imprime un avis sur la page. Comment puis-je arrêter l'avis d'apparaître dois-je utiliser autre chose que la fonction list()?

En ce moment, l'avis est "Notice: Undefined offset: 1 ..."

Merci pour l'aide!

Était-ce utile?

La solution

Vous devriez vérifier le nombre de segments chemin l'URL contient:

$segments = explode('/', $url);
if (count($segments) !== 2) {
    // error
} else {
    list($dir, $act) = $segments;
}

Mais peut-être vous devriez choisir une approche plus souple que l'utilisation list.

Autres conseils

Essayez ceci:

list($dir, $act) = array_pad(explode('/',$url), 2, '');

array_pad complète le tableau avec vos valeurs, voici:. ''

Consultez parse_url

Une solution serait de diviser votre ligne de code dans plusieurs, pour vous assurer de ne jamais attribuer des valeurs non-existantes à des variables -. Qui est ce que vous faites quand explode ne renvoie qu'une partie de l'URL

Pour cela, ne pas utiliser list semble que la bonne solution, comme, avec la liste, vous devez savoir combien d'éléments l'expression à droite de = sera de retour ...
Et, dans cette situation, vous ne savez pas combien d'éléments explode retournera .


Par exemple, quelque chose comme cela pourrait être OK:

$parts = explode('/', $url);
if (isset($parts[0])) {
  $dir = $parts[0];
  if (isset($parts[1])) {
    $act = $parts[1];
  }
}

Bien sûr, à vous faire face à la situation dans laquelle $dir et / ou $act ne sont pas définis, plus tard dans votre script.


Une autre solution serait de vérifier combien d'éléments exploser retournera (en comptant un certain nombre de / par exemple) ; mais vous aurez encore à traiter au moins deux cas.

pour se débarrasser de l'avis:

list($dir, $act) = explode('/',$url);

mais peut-être une meilleure solution serait:

$segments = explode ('/', $url);
$dir = array_shift ($segments);
$act = array_shift ($segments);

s'il n'y a pas 2 segment, $ acte serait nul et vous pouvez également plus de 2 segments de cette façon

La bonne façon de supprimer l'affectation de E_NOTICE sur la liste à partir de PHP 5.4+ est le suivant:

@list($dir, $act) = explode('/', $url);

Si $url ne contient pas /, exploser retournera un élément et $act sera NULL.

Au lieu d'exploser l'URL complète, essayez $_SERVER['PATH_INFO'], en supposant des noms '/ aléatoires' le script.

La réponse simple et laid est de préfixer le tout avec un seul « @ » qui supprime les sorties d'erreur. $ Acte sera mis à zéro dans ce cas parce que sous le capot, il est équivalent à:

$foo = explode('/',$url);
$dir = $foo[0];
$act = $foo[1]; // This is where the notice comes from
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top