Ответ 1
Иногда эта проблема возникает из-за пространства в PHP-теге запуска контроллера сталкиваясь с той же проблемой, просто удалил пробел в:
<?php
namespace App\Http\Controllers\Auth;
удаление пробела с моей ошибкой
Я пытаюсь использовать это для создания загрузки формы изображения для своего веб-сайта, поэтому я использую это потому, что он более безопасен, чем делать все сам (но если кто-то может указать другой рабочий script, я бы был оценили)
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-теге запуска контроллера сталкиваясь с той же проблемой, просто удалил пробел в:
<?php
namespace App\Http\Controllers\Auth;
удаление пробела с моей ошибкой
Кажется, этот поток говорит об этой же проблеме - похоже, эта ошибка обычно вызвана тем, что некоторые данные отправляются с сервера до того, как встречается оператор пространства имен.
С другой стороны, это также может быть ошибка в ImageUploader... основной файл PHP помещает пространство имен после определения класса, которое я не видел в документации PHP, где говорится, что это должен быть самый первый код PHP. С этой страницы:
Пространства имен объявляются с использованием ключевого слова namespace. Файл, содержащий пространство имен, должен объявлять пространство имен в верхней части файла перед любым другим кодом - за одним исключением: ключевое слово Declare.
Здесь нет ключевого слова объявления, поэтому, возможно, это ошибка в исходном коде, которая проскальзывает в версии PHP для разработчика, потому что он не помещает пространство имен первым:
<?php
class BulletProofException extends Exception{}
namespace BulletProof;
/**
* BulletProof ImageUploder:
...
Я также столкнулся с проблемой. В php файле я написал следующий код, в котором было некоторое пространство перед началом тега php
<?php
namespace App\Controller;
когда я удаляю это пространство, он решил.
Если вы используете IDE, вы должны запустить свой код в первой строке. пример Im, использующий aptana studio3
//line1<?php
//line2 your code
//line3 your code
....
....
Надеюсь, что это поможет. Это решает мою проблему.
Вы должны изменить кодировку файла на ANSI. Я использовал Notepad ++ с кодировкой UTF-8 и имел ту же проблему. Проблема исчезла после изменения кодировки файла на ANSI!
Библиотека не работает вообще, 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.
Файл | Удаление BOM в PhpStorm исправило эту проблему в обоих случаях, с которыми я столкнулся.
В его источнике есть ошибка. Проверьте его источник, если можете. Он читается следующим образом
<?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
{ ... }
}
Изменить ImageUploader.php - удалить строку (поскольку BulletProofException не используется нигде)
class BulletProofException extends Exception{}
или переместите его под строку
namespace BulletProof;
Если вы посмотрите этот файл, пространство имен не является первым оператором.
<?php
class BulletProofException extends Exception{}
namespace BulletProof;
Вы можете попытаться переместить пространство имен над определением класса.
Объявление пространства имен 123456789101112
<?php
namespace app\controllers;
use yii\web\Controller;
use app\models\users;
class UserController extends Controller {
public function actionIndex() {
echo "working on .....";
}
}
Я исправляю это, когда я начал, не имеет значения utf8 именно таким образом open <?php
в первой строке в редакторе в моем случае возвышенном тексте и в заголовке пространства имен во второй строке
2 <?php
namespace mynamespace;//вы должны записать ваше пространство имен вниз, где вы открываете php, здесь должно быть в строке 3 здесь, я делаю ошибку, потому что я начал открывать строку 2 <?php
1 <?php
пространство имен 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 кодовую страницу, проблема решена!
Я также получил ту же проблему, скопировав код контроллера с другого контроллера, а затем я решил проблему, удалив пробел перед тегом php
<?php
Убедитесь, что перед вашим тегом php нет пробелов
// whitespace
<?php
namespace HelloWorld
?>
Удалите пустое пространство перед началом вашего php тега
<?php
namespace HelloWorld
?>
В моем случае файл был создан с кодировкой UTF-8-BOM. Я должен сохранить его в кодировке UTF-8, тогда все работает нормально.
Иногда пространство после <?php
видно, если вы используете тот же редактор, в моем случае я использовал TextWrapper. Из-за конфигурации типа файла в TextWrapper (в вашем случае какой-то другой редактор), вы можете не увидеть пространство. Используйте другой редактор на вашем компьютере, и вы увидите это. Затем удалите их - прекрасно работает потом.
UTF-8 Byte Order Mark в начале документа^ Это для меня решило проблему. Я открыл вложенный файл с помощью редактора HEX и удалил спецификацию в начале файла.
У меня было то же сообщение об ошибке после нехватки места на диске. Когда я понял, что php файл поврежден, я скопировал содержимое и создал новый файл (я использую Sublime Text для редактирования), и это решило мою проблему.