web-dev-qa-db-fra.com

Erreur fatale: L'instruction de déclaration d'espace de noms doit être la toute première instruction du script de

J'essaie de l'utiliser pour créer un formulaire d'image pour mon site Web, c'est parce que c'est plus sécurisé que de tout faire moi-même (mais si quelqu'un pouvait pointer un autre script working, je serais très reconnaissant. )

simon-eQ/ImageUploader

Fatal error: Namespace declaration statement has to be the very first statement in the script in C:\xampp\htdocs\project\lib\ImageUploader.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:\xampp\htdocs\project\lib\ImageUploader.php</b> on line <b>4</b><br />

J'ai essayé avec comprend, nécessite et cela ne fonctionne toujours pas.

24
user2536244

Parfois, ce problème est dû à l’espace disponible dans la balise de démarrage PHP du contrôleur

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

supprimer l'espace a résolu mon erreur

44
Vivek Chaudhari

Ce fil semble parler du même problème - il semble que cette erreur soit généralement causée par le fait que certaines données sont envoyées du serveur avant que l'instruction de l'espace de noms ne soit rencontrée.

  1. Votre hébergement Web pourrait-il insérer du code dans votre page avant le code PHP?
  2. Existe-t-il une marque d'ordre UTF-8 octets au début du document?

D'autre part, il pourrait aussi s'agir d'un bogue dans ImageUploader ... le fichier main PHP met l'espace de nom après la définition de la classe, ce que je n'ai pas vu dans la documentation PHP , qui dit que ce devrait être le tout premier code PHP. De cette page :

Les espaces de noms sont déclarés à l'aide du mot clé namespace. Un fichier contenant un espace de noms doit déclarer l'espace de noms en haut du fichier avant tout autre code, à une exception près: le mot-clé declare.

Il n'y a pas de mot-clé declare ici, alors c'est peut-être un bogue dans le code source qui se glisse dans la version de PHP du développeur, car il ne met pas d'abord l'espace de noms:

<?php
class BulletProofException extends Exception{}

namespace BulletProof;
/**
 * BulletProof ImageUploder:
...
12
mystiscool

J'ai aussi fait face au problème. Dans le fichier php, j’ai écrit le code suivant où il y avait un peu d’espace avant la balise php start.

<?php
namespace App\Controller;

quand je supprime cet espace, il est résolu. 

11
Saidul Haque

Si vous utilisez un environnement de développement intégré, vous devez commencer votre code à la toute première ligne.

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

J'espère que cela vous aidera. Cela résoudra mon problème.

10
user2338925

Vous devez changer le codage du fichier enANSI. J'utilisais Notepad ++ avec l'encodage UTF-8 et j'avais le même problème. Le problème a disparu après avoir modifié le codage du fichier enANSI!

6
Pavel

La bibliothèque ne fonctionne pas du tout, setSizeLimit est cassé, setImageSize est ignoré aussi, n'utilisez pas ceci.

$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 l'erreur dit kilo-octets.

3
user2536244

Il y a une erreur dans sa source. Découvrez sa source si vous le pouvez. Ça se lit comme ça

<?php
    class BulletProofException extends Exception{}

    namespace BulletProof;
    ....

C'est fou. 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 de noms dans la classe. L'espace de noms utilisé chaque fois doit être la première instruction.

Dommage que je ne sois pas à Github; aurait pu tirer une demande autrement :(

2
user2672373

Si vous souhaitez utiliser cette bibliothèque, dans ImageUploader.php, vous devez déplacer la définition BulletProofException après la déclaration d'espace de nom . Soumettez la demande d'extraction pour ce problème dans lib repo :)

EDIT: Apportez quelques modifications en tête du fichier:

namespace {
    class BulletProofException extends Exception{}
}

namespace BulletProof {

    class ImageUploader
    { ... }
}
2
Leonov Mikhail

Editez ImageUploader.php - soit en supprimant la ligne (car BulletProofException n’est utilisé nulle part)

class BulletProofException extends Exception{}

ou le déplacer sous la ligne

namespace BulletProof;
2
S Korolev

Si vous regardez ce fichier, Namespace 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
lenko

Fichier | Supprimer la nomenclature dans PhpStorm a résolu ce problème dans les deux cas où je l’ai rencontré.

1
Danila Piatov

Assurez-vous qu'il n'y a aucun espace avant votre balise php

// whitespace
<?php
    namespace HelloWorld
?>

Supprimer l'espace blanc avant le début de votre tag php

<?php
    namespace HelloWorld
?>
1
Priyank

Je résous le problème de cette façon quand j'ai commencé, peu importe utf8. Ouvrir de cette manière <?php dans la première ligne de l'éditeur dans mon cas, sublime le texte et l'espace de noms dans la deuxième ligne.

2 <?php espace de noms mynamespace; // vous devriez écrire votre espace de noms où vous ouvrez php ici devrait être dans la ligne 3 ici je fais l'erreur parce que j'ai ouvert depuis la ligne 2 <?php

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

1
Benjamin Noventa

Espace de noms declarat 123456789101112

<?php
    namespace app\controllers;

    use yii\web\Controller;
    use app\models\users;
    class UserController extends Controller {
        public function actionIndex() {
            echo "working on .....";
        }    
    }
1
Muhammad Saeed

Je viens de découvrir un moyen facile de lever cette exception; laissez votre éditeur de texte enregistrer par défaut au format UTF-8. À moins que vous ne puissiez le forcer à omettre le repère d'ordre des octets, ce qui peut ne pas être simple ni possible, selon votre éditeur, vous aurez un "caractère" devant l'ouverture <, qui sera masqué. 

Heureusement, lorsque cette possibilité m'est venue à l'esprit, j'ai basculé mon éditeur (UltraEdit) en mode hexadécimal, qui ne cache rien, pas même les marques d'ordre des octets. Ayant écrit du code qui traite les marques d'ordre byte pendant de nombreuses années, je l'ai reconnu instantanément.

Enregistrez le fichier au format ANSI/ASCII et acceptez la page de code 1252 ANSI Latin-1 par défaut. Le problème a été résolu!

1
David A. Gray

Parfois, l'espace après <?php est 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), il est possible que l’espace ne soit pas visible. Utilisez un autre éditeur sur votre machine et vous le verrez. Puis retirez-les - fonctionne parfaitement après.

0
ClickBright

Dans mon cas, le fichier a été créé avec le codage UTF-8-BOM. Je dois l'enregistrer au format UTF-8, puis tout fonctionne bien.

0
victor_luu

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
Ali