Erreur fatale: L'instruction Namespace declaration doit être la toute première instruction dans le script

j'essaie d'utiliser ceci pour créer un téléchargement de formulaire d'image pour mon site web, la raison pour laquelle j'utilise ceci est parce que c'est plus sûr que de tout faire moi-même (mais si quelqu'un pouvait pointer un autre travaillant script je serais apprécié)

simon-eQ / ImageUploader

Fatal error: Namespace declaration statement has to be the very first statement in the script in C:xampphtdocsprojectlibImageUploader.php on line 4

en regardant le code source:

<br />
<b>Fatal error</b>:  Namespace declaration statement has to be the very first statement in the script in <b>C:xampphtdocsprojectlibImageUploader.php</b> on line <b>4</b><br />

j'ai essayé avec inclut, exige et cela ne fonctionne toujours pas.

22
demandé sur ata 2014-01-29 17:52:07

19 réponses

parfois ce problème vient à cause de l'espace dans PHP start tag of controller face au même problème vient de supprimer whitespace in:

<?php 
namespace App\Http\Controllers\Auth;

suppression de l'espace résolu mon erreur

40
répondu Vivek Chaudhari 2018-01-05 20:52:03

ce thread semble parler du même problème - il semble que cette erreur est généralement causée par le fait que certaines données sont envoyées hors du serveur avant que la déclaration namespace soit rencontrée.

  1. votre hébergement web pourrait-il insérer du code dans votre page avant le code PHP?
  2. UTF-8 Marque d'Ordre des Octets au début de ce document?

sur l'autre hand, ça pourrait aussi être un bug dans ImageUploader... le fichier PHP principal place l'espace de noms après la définition de classe, ce que je n'ai pas vu dans la documentation PHP, qui dit qu'il devrait être le tout premier code PHP. De cette page :

Namespaces sont déclarés en utilisant le mot-clé namespace. Un fichier contenant un namespace doit déclarer le namespace en haut du fichier avant tout autre code - avec un exception: le mot-clé declare.

il n'y a pas de mot-clé declare ici, donc peut-être que c'est un bug dans le code source qui glisse par la version de php du développeur, parce qu'il ne met pas l'espace de noms en premier:

<?php
class BulletProofException extends Exception{}

namespace BulletProof;
/**
 * BulletProof ImageUploder:
...
12
répondu mystiscool 2017-05-23 12:18:17

Si vous utilisez un IDE, vous devez démarrer votre code à la première ligne. exemple Im utilisant aptana studio3

//line1<?php
//line2  your code
//line3  your code
....
....

J'espère que ça aidera.Qui résout mon problème.

10
répondu rai 2014-08-14 02:51:12

j'ai également fait face au problème. Dans le fichier php, j'ai écrit le code suivant où il y avait de l'espace avant la balise de démarrage de php

<?php
namespace App\Controller;

quand j'ai enlevé cet espace, il s'est résolu.

9
répondu Saidul Haque 2016-12-28 15:22:12

vous devez changer le codage du fichier en ANSI . J'utilisais le Notepad++ avec l'encodage UTF-8 et j'avais le même problème. Le problème a disparu après que j'ai changé l'encodage du fichier en ANSI !

6
répondu Pavel 2015-11-24 09:10:04

la bibliothèque ne fonctionne pas du tout, setSizeLimit est cassé, setImageSize est ignoré car-Eh bien, ne l'utilisez pas.

$result = $newUpload
                ->setFileTypes(array("jpg", "gif", "png", "jpeg"))
                ->setSizeLimit(array("min"=>100, "max"=>100000))
                ->setImageSize(array("height"=>200, "width"=>200))
                ->uploadTo('ads/')
                ->save($_FILES['newad_image']);
                $page.=$result;

donne ceci:

Notice: Undefined offset: 1 in C:\xampp\htdocs\project\lib\ImageUploader.php on line 229

Notice: Undefined offset: 0 in C:\xampp\htdocs\project\lib\ImageUploader.php on line 229

EDIT: La taille semble être en Octets, même si le message d'erreur indique kilo-octets.

3
répondu 2014-01-29 15:18:05

il y a une erreur dans sa source. Découvrez sa source si vous pouvez. Il se lit comme ceci

<?php
    class BulletProofException extends Exception{}

    namespace BulletProof;
    ....

c'est insensé. Personnellement, je dirais que le code est bien documenté, et élégant, mais l'auteur a manqué un point simple; il a déclaré l'Espace-nom dans la classe. Namespace whenever used devrait être la première déclaration.

dommage que je ne sois pas en Github; j'aurais pu tirer une requête autrement: (

2
répondu 2014-01-29 13:58:24

Edit ImageUploader.php-soit supprimer la ligne (cause Bullproofexception pas utilisé n'importe où)

class BulletProofException extends Exception{}

ou le déplacer sous la ligne

namespace BulletProof;
2
répondu S Korolev 2014-01-29 13:59:04

si vous regardez ce Namespace de fichier n'est pas la première déclaration.

<?php
class BulletProofException extends Exception{}

namespace BulletProof;

vous pouvez essayer de déplacer l'espace de noms sur la définition de classe.

2
répondu lenko 2014-01-29 14:01:53

si vous voulez utiliser cette lib puis dans ImageUploader.php vous devez déplacer la définition BulletProofException après la déclaration namespace. Soumettre pull-demande à ce que cette question lib repo :)

EDIT: Faire quelques changements dans le chef du fichier:

namespace {
    class BulletProofException extends Exception{}
}

namespace BulletProof {

    class ImageUploader
    { ... }
}
2
répondu Leonov Mikhail 2014-01-29 14:15:31

espace de Noms ainsi q 123456789101112

<?php
    namespace app\controllers;

    use yii\web\Controller;
    use app\models\users;
    class UserController extends Controller {
        public function actionIndex() {
            echo "working on .....";
        }    
    }
1
répondu Muhammad Saeed 2015-08-27 15:12:47

je le fixe de cette façon quand j'ai commencé n'importe pas utf8 juste de cette façon ouvrir <?php dans la première ligne de l'éditeur Dans mon texte sublime et l'espace de nom écrit dans la deuxième ligne

2 <?php espace de noms mynamespace; //vous devez writte youe espace de noms lorsque vous ouvrez php ici devrait être dans la ligne 3 ici, je fais l'erreur parce que j'ai commencé à ouvrir à partir de la ligne 2 <?php

1 <?php espace de noms mynamespace; // j'ai commencé à de la ligne 1 <?php TRAVAIL

1
répondu Benjamin Noventa 2017-01-30 16:12:11

il s'agit de la déclaration namespace . Selon http://php.net/manual/en/language.namespaces.definition.php toute la déclaration namespace doit être placée en haut du fichier après la <?php ouverture de la balise php . Cela signifie qu'avant d'écrire n'importe quel code sur le fichier, si le fichier doit être contenue dans un namespace , alors vous devez d'abord déclarer la namespace avant d'écrire n'importe quel code. Pareil:

<?php
namespace App\Suport\Facades;

class AuthUser {
  // methods and more codes
}

mais le mot-clé declare peut être placé avant la déclaration namespace de sorte que ceci est encore valide:

<?php
declare(maxTries = 3);

namespace App\Suport\Facades;

class AuthUser {
  // methods and more codes
}

toutes les autres choses doivent être mis après le namespace mot-clé. Pour plus d'informations, lire le http://php.net/manual/en/language.namespaces.definition.php .

1
répondu four-eyes-04-04 2017-04-18 08:43:09

je viens de découvrir un moyen facile de soulever cette exception; laissez votre éditeur de texte par défaut à la sauvegarde comme UTF-8. Sauf si vous pouvez le forcer à omettre la marque D'ordre D'octet, ce qui peut ne pas être facile ou même possible, selon votre éditeur, vous aurez un "caractère" devant l'ouverture <, qui sera caché de la vue.

heureusement, quand cette possibilité m'est venue à l'esprit, j'ai mis mon éditeur (UltraEdit) en mode hexadécimal, qui ne cache rien, même pas L'Ordre des octets Marque. Ayant écrit du code qui traite les marques D'ordre Byte pendant de nombreuses années, je l'ai reconnu instantanément.

Enregistrer le fichier comme ANSI / ASCII, et accepter la page de code 1252 ANSI Latin-1 par défaut, Problème résolu!

1
répondu David A. Gray 2017-12-03 23:44:48

File | Remove BOM in PhpStorm corrigé ce problème dans les deux cas où je l'ai rencontré.

0
répondu Danila Piatov 2018-04-24 19:23:03

j'ai aussi eu le même problème en copiant le code du contrôleur d'un autre contrôleur, puis je résous le problème en supprimant l'espace avant la balise php

            <?php
0
répondu Ali 2018-07-10 11:13:02

dans mon cas, le fichier a été créé avec un encodage UTF-8-BOM. Je dois le sauvegarder dans L'encodage UTF-8, puis tout va bien.

0
répondu victor_luu 2018-08-12 08:21:00

assurez - vous qu'il y a no whitespace avant votre étiquette php

// whitespace
<?php
    namespace HelloWorld
?>

Supprimer l'espace blanc avant que votre étiquette php commence

<?php
    namespace HelloWorld
?>
0
répondu Priyank 2018-08-27 06:03:26

parfois l'espace après <?php visible si vous utilisez le même éditeur, Dans mon cas j'utilisais TextWrapper. En raison de la configuration du type de fichier dans TextWrapper (dans votre cas un autre éditeur), vous pourriez ne pas voir l'espace. Utilisez un éditeur différent dans votre machine et vous le verrez. Puis retirez - les -- Fonctionne parfaitement après.

0
répondu ClickBright 2018-08-29 09:52:36