Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

Иногда эта проблема возникает из-за пространства в PHP-теге запуска контроллера сталкиваясь с той же проблемой, просто удалил пробел в:

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

удаление пробела с моей ошибкой

Ответ 2

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

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

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

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

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

<?php
class BulletProofException extends Exception{}

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

Ответ 3

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

<?php
namespace App\Controller;

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

Ответ 4

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

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

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

Ответ 5

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

Ответ 6

Библиотека не работает вообще, 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

РЕДАКТИРОВАТЬ: Размер кажется в байтах, хотя ошибка говорит о Kilobytes.

Ответ 7

Файл | Удаление BOM в PhpStorm исправило эту проблему в обоих случаях, с которыми я столкнулся.

Ответ 8

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

<?php
    class BulletProofException extends Exception{}

    namespace BulletProof;
    ....

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

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

Ответ 9

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

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

namespace {
    class BulletProofException extends Exception{}
}

namespace BulletProof {

    class ImageUploader
    { ... }
}

Ответ 10

Изменить ImageUploader.php - удалить строку (поскольку BulletProofException не используется нигде)

class BulletProofException extends Exception{}

или переместите его под строку

namespace BulletProof;

Ответ 11

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

<?php
class BulletProofException extends Exception{}

namespace BulletProof;

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

Ответ 12

Объявление пространства имен 123456789101112

<?php
    namespace app\controllers;

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

Ответ 13

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

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

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

Ответ 14

Это все о объявлении 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.

Ответ 15

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

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

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

Ответ 16

Я также получил ту же проблему, скопировав код контроллера с другого контроллера, а затем я решил проблему, удалив пробел перед тегом php

            <?php

Ответ 17

Убедитесь, что перед вашим тегом php нет пробелов

// whitespace
<?php
    namespace HelloWorld
?>

Удалите пустое пространство перед началом вашего php тега

<?php
    namespace HelloWorld
?>

Ответ 18

В моем случае файл был создан с кодировкой UTF-8-BOM. Я должен сохранить его в кодировке UTF-8, тогда все работает нормально.

Ответ 19

Иногда пространство после <?php видно, если вы используете тот же редактор, в моем случае я использовал TextWrapper. Из-за конфигурации типа файла в TextWrapper (в вашем случае какой-то другой редактор), вы можете не увидеть пространство. Используйте другой редактор на вашем компьютере, и вы увидите это. Затем удалите их - прекрасно работает потом.

Ответ 20

UTF-8 Byte Order Mark в начале документа
^ Это для меня решило проблему. Я открыл вложенный файл с помощью редактора HEX и удалил спецификацию в начале файла.

Ответ 21

У меня было то же сообщение об ошибке после нехватки места на диске. Когда я понял, что php файл поврежден, я скопировал содержимое и создал новый файл (я использую Sublime Text для редактирования), и это решило мою проблему.