Я пытаюсь использовать это для создания загрузки формы изображения для своего веб-сайта, причина, по которой я использую это, потому что он более безопасен, чем все делает сам (но если кто-то может указать другой рабочий сценарий, я был бы оценен)
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 .... ....
Надеюсь, что это поможет. Это решает мою проблему.
Этот поток, похоже, говорит об одной и той же проблеме – похоже, эта ошибка обычно вызвана тем, что некоторые данные отправлены с сервера до того, как встречается оператор пространства имен.
С другой стороны, это также может быть ошибкой в 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 кодовую страницу, проблема решена!