web-dev-qa-db-fra.com

Wp meurt provoquant 500 Erreur de serveur interne?

J'ai la fonction de télécharger des images dans l'API de paramètres, il télécharge les images comme prévu, mais le problème survient lorsque l'utilisateur choisit de télécharger. fichier non-image pour empêcher les utilisateurs de télécharger d'autres fichiers (fichiers non-image), j'utilise wp_die('No image found'); an conduisant à redouté 500 Erreur de serveur interne message affiché. Chose étrange, mon wp_die wp_die('No image found'); fonctionne correctement sur mon ordinateur. ordinateur local mais non en ligne.

function validate_setting($plugin_options){ 

  //echo '<pre>';  print_r($_FILES); echo '</pre>';
  $keys = array_keys($_FILES);
   $i = 0;
  foreach ($_FILES as $image) {        

if($image['size']){
    //Is it an image?
    if(preg_match('/(jpg|jpeg|png|gif)$/i',$image['type'])){
      $override = array('test_form' => false);
      $file = wp_handle_upload($image,$override);         
      $plugin_options[$keys[$i]] = $file['url'];
    }
   else{
   wp_die('No image found');//This triggers 500 Internal Server Error WHY??
       //echo:'no image found'; //Now this DON'T work locally but works ONLINE?!?
   }
}
else{
 $options = get_option('theme_options');
 $plugin_options[$keys[$i]] = $options[$keys[$i]];
}
$i++;
    } 
    return $plugin_options;
    }

J'ai essayé de changer wp_die() en echo 'no image found'; et ceci se produit: maintenant sur mon locall machine, il ne fait écho à rien (aucun avertissement ne s'affiche), mais maintenant en ligne cela fonctionne et affiche l'avertissement "aucune image trouvée" ...

Je sais que je pourrais simplement supprimer la partie else{ wp_die('No image found'); } et n’afficher aucun avertissement, mais POURQUOI ne fonctionne-t-il pas comme prévu?

Quelqu'un peut-il me dire ce qui ne va pas avec mon code et comment afficher correctement l'avertissement avec wp_die ('Aucune image trouvée') (sans provoquer "500 Erreur de serveur interne")?

1
Dejo Dekic

Utilisez die($msg); pour faire ce que vous essayez de faire. wp_die () renvoie un code d'erreur HTTP et transmet votre message à la page d'erreur. Le code par défaut est 500 (erreur de serveur interne) si vous ne l'utilisez pas. t pas définir le code de retour dans les arguments.

3
webaware

Cela a fonctionné vraiment bien pour moi:

 else{
   $error = new WP_Error( 'not_found', _('No image found! Please upload images only!'), 
        array( 'title' => _('Plugin Error'), 'response' => '406', 'back_link' => true ) );
        if( is_wp_error($error) ){
        wp_die( $error, '', $error->get_error_data() ); 
        }
   }
2
Dejo Dekic