web-dev-qa-db-fra.com

Le plugin a généré 80 caractères de sortie inattendue!

Je reçois ce message chaque fois que j'active mon plugin:

Le plug-in a généré 80 caractères de sortie inattendue lors de l'activation. Si vous remarquez des messages "en-têtes déjà envoyés", des problèmes avec les flux de syndication ou d'autres problèmes, essayez de désactiver ou de supprimer ce plug-in.

Le seul moyen de supprimer le message consiste à envelopper mon code de fonction d'activation dans une condition (** voir ci-dessous).

Comment dois-je réécrire ceci pour éviter l'alerte?

function myPlugin($post)
{
    echo "Whatever is here throws an unexpected output alert when the plugin isa activated";
//I can place code here without issue, but anything that is output via echo throws the alert.
}
register_activation_hook(__FILE__, 'myPlugin');

Le fait d’envelopper le code de fonction dans la condition supprime les alertes:

function myPlugin($post)
{
    global $pagenow;
    if ( is_admin() && $pagenow !== 'plugins.php' ) {
        echo "No more alerts when its wrapped this way";
        }
}
 ?>
1
Scott B

Lorsque vous recevez ce type de message, signifie généralement que votre plug-in avait une erreur de syntaxe et générait ce type de message d'erreur en raison de la gestion du chargement à l'activation, c'est-à-dire que les en-têtes HTTP sont envoyés après l'affichage du message d'erreur. Le message d'erreur de votre plugin est chargé dans un <iframe>; avez-vous fait un "View Source" sur le <iframe> pour voir s’il ya un message d’erreur évident?

En outre, vous devriez envisager de vous procurer un débogueur HTTP qui peut vous aider avec ce genre de choses:

  • Windows a le excellent et free _ ​​ Fiddler .

  • Pour Mac OS X, il y a HTTPScoop (pas génial, mais bon marché à 15 USD.)

  • Il y a aussi Charles pour Windows/Mac/Linux (50 USD - je risque de tomber en panne et de l'acheter un jour. J'aimerais pouvoir obtenir Fiddler sur Mac, mais depuis Le violoneux vient de Microsoft, je ne retiens pas mon souffle.)

METTRE À JOUR

D'après les commentaires ci-dessous, voici un écran de moi utilisant "Inspect Element" dans Safari (mais vous pouvez faire la même chose avec Chrome et FireFox, ou similaire avec IE et le développeur Web. Barre d'outils):

Screenshot of Element Inspector on Safari with the WordPress plugin error IFRAME
(source: mikeschinkel.com )

Vous pouvez récupérer cette URL <iframe>d et la charger directement dans votre navigateur pour faciliter le processus de débogage. Quelque chose dans votre plugin envoie q header() après un message d'erreur est émis, c'est ce que ce message d'erreur signifie.

Loading WordPress Plugin Activation URL directly from the browser
(source: mikeschinkel.com )

Au fait, je viens d’ajouter un caractère errant et donc une erreur de syntaxe dans mon plugin pour qu’il jette une erreur, c’est pourquoi vous voyez l’erreur comme vous le faites.

1
MikeSchinkel

UTILISER DEBUG:

(crée le fichier journal error_activation.txt dans votre dossier plugin)

add_action('activated_plugin','my_save_error');
function my_save_error()
{
    file_put_contents(dirname(__file__).'/error_activation.txt', ob_get_contents());
}
4
T.Todua

Sry, pour la réponse tardive, mais je suis tombé sur et la réponse est très simple:

Jamais echorienà l'intérieur des fonctions utilisées sur les crochets de/activation/désinstallation. Cela provoquera toujours le message d'erreur mentionné ci-dessus.

1
kaiser

Je viens d’explorer ce problème et j’ai trouvé que ce problème pouvait être causé par des erreurs dans le php (comme appeler une fonction déconseillée) qui surpresse Wordpress, un garbling FTP ou en ayant du code en dehors des balises 'php' .

Je ne pense pas que Mike est correct ci-dessus. Le problème de sortie inattendu est traité différemment d'une erreur fatale: premièrement, wordpress supprime le problème, il donne le message 'sortie inattendue' et, plus important encore, il active effectivement le plug-in et redirige vers la page du plug-in, mais meurt avec une erreur. . Je ne pense pas que le cadre contienne quoi que ce soit d’utile et que les en-têtes ne vous laisseront pas le résultat auquel Wordpress ne s’attendait pas, ce qui permettra de résoudre le problème sous-jacent.

Il existe un certain nombre de solutions pour obtenir le texte de sortie inattendu, qui nécessitent soit de hacker le fichier plugins.php, soit de définir un gestionnaire d'événements pour l'action 'activate_plugin'.

FWIW, vous pouvez trouvez mes solutions mirror ici (travaux en cours!) avec quelques liens vers des solutions proposées par d'autres que j'ai empruntées sans vergogne!

1
peter cross

J'avais le même problème, j'ai essayé de supprimer le code et j'ai tout fait mais toujours le même problème

la vraie solution pour moi était la suivante.

  1. à la fin du fichier qui contient l'en-tête du plugin, j'ai supprimé php?> et le problème sera résolu
  2. à la fin du fichier plugin qui contient l'en-tête du plugin, supprimez les sauts de ligne supplémentaires après la fermeture de php?>

mon fichier de plugin s'est terminé à la ligne 69 et il y avait 7 autres espacés après le dernier code php, de sorte que dans l'éditeur, le fichier atteignait 66, mon erreur était "Le plugin a généré 7 caractères inattendus ..." lorsque j'ai supprimé les lignes supplémentaires. jusqu'à 69, l'erreur a disparu,

1
Aamer Shahzad

J'ai eu ce problème également. Il s'est produit que le fichier php du plugin avait un mauvais encodage. J'ai simplement copié le contenu entier dans un nouveau fichier bloc-notes et l'ai enregistré avec le codage Ansi. Le message d'erreur a disparu. Bien sûr, il y a maintenant des problèmes de langue, mais c'est un autre cas. Cordialement

0
lukh