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. )
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.
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
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.
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:
...
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.
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.
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!
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.
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 :(
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
{ ... }
}
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;
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.
Fichier | Supprimer la nomenclature dans PhpStorm a résolu ce problème dans les deux cas où je l’ai rencontré.
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
?>
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
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 .....";
}
}
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!
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.
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.
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