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.
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
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.
- votre hébergement web pourrait-il insérer du code dans votre page avant le code PHP?
- 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:
...
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.
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.
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 !
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.
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: (
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;
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.
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
{ ... }
}
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 .....";
}
}
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
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 .
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!
File | Remove BOM in PhpStorm corrigé ce problème dans les deux cas où je l'ai rencontré.
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
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.
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
?>
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.