Неустранимая ошибка: заявление об объявлении пространства имен должно быть самым первым в сценарии в

Я пытаюсь использовать это для создания загрузки формы изображения для своего веб-сайта, причина, по которой я использую это, потому что он более безопасен, чем все делает сам (но если кто-то может указать другой рабочий сценарий, я был бы оценен)

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 

Посмотрев исходный код:

 <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 /> 

Я пробовал с включенными, требует, и он все еще не работает.

иногда эта проблема возникает из-за пространства в php start taag контроллера, стоящего перед той же проблемой, только что удаленной пробелы в

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

удаление пробела разрешено моя ошибка

Если вы используете IDE, вы должны запустить свой код в первой строке. пример Im, использующий aptana studio3

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

Надеюсь, что это поможет. Это решает мою проблему.

Этот поток, похоже, говорит об одной и той же проблеме – похоже, эта ошибка обычно вызвана тем, что некоторые данные отправлены с сервера до того, как встречается оператор пространства имен.

  1. Может ли ваш веб-хостинг вставлять какой-то код в вашу страницу до кода PHP?
  2. Есть ли в начале документа знак порядка байтов UTF-8?

С другой стороны, это также может быть ошибкой в ​​ImageUploader … главный PHP-файл помещает пространство имен после определения класса, чего я не видел в документации PHP, в которой говорится, что это должен быть самый первый PHP-код. С этой страницы :

Пространства имен объявляются с использованием ключевого слова namespace. Файл, содержащий пространство имен, должен объявлять пространство имен в верхней части файла перед любым другим кодом – за одним исключением: ключевое слово declare.

Здесь нет ключевого слова declare, так что, возможно, это ошибка в исходном коде, который проскальзывает версия PHP разработчика, потому что он сначала не помещает пространство имен:

 <?php class BulletProofException extends Exception{} namespace BulletProof; /** * BulletProof ImageUploder: ... 

Вы должны изменить кодировку файла на ANSI . Я использовал Notepad ++ с кодировкой UTF-8 и имел ту же проблему. Проблема исчезла после изменения кодировки файла в ANSI !

Я также столкнулся с этой проблемой. В php-файле я написал следующий код, в котором было некоторое пространство перед началом тега php

 <?php namespace App\Controller; 

когда я удаляю это пространство, он решил.

Библиотека не работает вообще, setSizeLimit сломан, setImageSize игнорируется как-ну, просто не используйте это.

 $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; 

Дает следующее:

 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: размер кажется в байтах, хотя ошибка говорит о Kilobytes.

В его источнике есть ошибка. Проверьте его источник, если можете. Он читается так

 <?php class BulletProofException extends Exception{} namespace BulletProof; .... 

Это безумие. Лично я бы сказал, что код хорошо документирован и изящный, но автор пропустил простую точку; он объявил пространство имен внутри класса. Пространство имен при каждом использовании должно быть первым утверждением.

Жаль, что я не в Гитубе; мог бы потребовать иначе 🙁

Редактировать ImageUploader.php – удалить строку (поскольку BulletProofException не используется нигде)

 class BulletProofException extends Exception{} 

или переместить его под линию

 namespace BulletProof; 

Если вы посмотрите этот файл, то пространство имен не будет первым.

 <?php class BulletProofException extends Exception{} namespace BulletProof; 

Вы можете попытаться переместить пространство имен над определением класса.

Если вы хотите использовать этот lib, то в ImageUploader.php вам следует переместить определение BulletProofException после объявления пространства имен. Отправить pull-request для этой проблемы в lib repo 🙂

EDIT: внести некоторые изменения в голову файла:

 namespace { class BulletProofException extends Exception{} } namespace BulletProof { class ImageUploader { ... } } 

Пространство имен declarat 123456789101112

 <?php namespace app\controllers; use yii\web\Controller; use app\models\users; class UserController extends Controller { public function actionIndex() { echo "working on ....."; } } 

Я исправляю это таким образом, когда я начал, не имеет значения utf8 именно таким образом, открываем <?php в первой строке в редакторе в моем случае возвышенном тексте и в заголовке пространства имен во второй строке

2 <?php namespace mynamespace; // вы должны записывать ваше пространство имен вниз, где вы открываете php, здесь должно быть в строке 3 здесь, я делаю ошибку, потому что я начал открыто из строки 2 <?php

1 <?php namespace mynamespace; // Я начал с строки 1 <?php it WORK

Все дело в объявлении namespace . Согласно http://php.net/manual/en/language.namespaces.definition.php, все объявления namespace должны быть помещены в самую верхнюю часть файла после <?php открытия php . Это означает, что перед написанием какого-либо кода в файле, если этот файл должен содержаться в namespace вы должны сначала объявить namespace прежде чем писать какой-либо код. Как это:

 <?php namespace App\Suport\Facades; class AuthUser { // methods and more codes } 

НО ключевое слово declare можно поставить перед объявлением namespace чтобы оно все еще было действительным:

 <?php declare(maxTries = 3); namespace App\Suport\Facades; class AuthUser { // methods and more codes } 

все остальные вещи должны быть установлены ПОСЛЕ ключевого слова namespace . Для получения дополнительной информации прочитайте http://php.net/manual/en/language.namespaces.definition.php .

Я просто открыл простой способ поднять это исключение; пусть ваш текстовый редактор по умолчанию будет сохранен как UTF-8. Если вы не можете заставить его опустить знак порядка байтов, что может быть нелегким или даже возможным, в зависимости от вашего редактора, у вас будет «символ» перед открытием <, который будет скрыт от просмотра.

К счастью, когда эта возможность перешла мне на ум, я переключил свой редактор (UltraEdit) в шестнадцатеричный режим, который ничего не скрывает, даже не отмечает байтовые порядковые знаки. Написав код, который обрабатывает байтовые порядковые знаки в течение многих лет, я сразу узнал его.

Сохраните файл как ANSI / ASCII и примите стандартную 1252 ANSI Latin-1 кодовую страницу, проблема решена!