Возникла внутренняя ошибка сервера yii2

После структурирования Yii2 и нстройки файлов index, появляется ошибка «An internal server error occurred». но если index настроить не правильно, поменять местами frontend и backend, всё работает.
Пример admin/index:
<?php
defined(‘YII_DEBUG’) or define(‘YII_DEBUG’, false);
defined(‘YII_ENV’) or define(‘YII_ENV’, ‘prod’);

require __DIR__ . ‘/../../yii/vendor/autoload.php’;
require __DIR__ . ‘/../../yii/vendor/yiisoft/yii2/Yii.php’;
require __DIR__ . ‘/../../yii/common/config/bootstrap.php’;
require __DIR__ . ‘/../../yii/frontend/config/bootstrap.php’;

$config = yii\helpers\ArrayHelper::merge(
require __DIR__ . ‘/../../yii/common/config/main.php’,
require __DIR__ . ‘/../../yii/common/config/main-local.php’,
require __DIR__ . ‘/../../yii/frontend/config/main.php’,
require __DIR__ . ‘/../../yii/frontend/config/main-local.php’
);

(new yii\web\Application($config))->run();

3 Answers

I changed value of YII_DEBUG to true

defined('YII_DEBUG') or define('YII_DEBUG', true);

in BaseYii.php file, got all errors and fixed them. Now everything works.

answered Jan 13, 2017 at 8:29

Mikayel Margaryan's user avatar

1

  • You should have looked for errors in runtime/logs/app.log or in web server (e.g. apache) logs to understand what was causing the issue.

    Jan 13, 2017 at 9:22

try this yii2 index.php

defined('YII_ENV') or define('YII_ENV', 'prod');
  if (@$_GET['debug'] == 1) {
    defined('YII_DEBUG') or define('YII_DEBUG', true);
  } else {
    defined('YII_DEBUG') or define('YII_DEBUG', false);
  }

answered Mar 24, 2018 at 4:15

Ganesh Patel's user avatar

The last few times I’ve gotten this, it’s been overflowing memory.
update the limit in php.ini

answered Nov 30, 2018 at 16:59

pedro casas's user avatar

/06 Tips /How to fix “An internal server error occurred” in Yii

If you’re running into a near empty screen showing, “An internal server error occurred” in Yii2, check your error logs. It’s a simple fix.

My logs showed:
An Error occurred while handling another error:\nexception 'yii\\base\\InvalidConfigException' with message 'The directory is not writable by the Web process: /var/www/mp/backend/web/assets' in /var/www/mp/vendor/yiisoft/yii2/web/AssetManager.php:213

You can resolve it by opening up permissions on your asset directory:

sudo chmod -vR 0777 assets/

Hi I am getting this error message when I try to access my page after hosting it on a live web host. This error unfortunately does not appear on my testing servers. The hosting server has php version 7.1.19 and is running on apache.

    yii\base\ErrorException: An internal server error occurred. in /home/mywebhost/public_html/app/vendor/yiisoft/yii2/base/ErrorHandler.php:317
    Stack trace:
    #0 [internal function]: yii\base\ErrorHandler->handleError(256, 'An internal ser...', '/home/mywebhost/...', 317, Array)
    #1 /home/mywebhost/public_html/app/vendor/yiisoft/yii2/base/ErrorHandler.php(317): trigger_error('An internal ser...', 256)
    #2 /home/mywebhost/public_html/app/vendor/yiisoft/yii2/widgets/ActiveField.php(178): yii\base\ErrorHandler::convertExceptionToError(Object(yii\base\InvalidConfigException))
    #3 /home/mywebhost/public_html/app/views/site/_clients.php(532): yii\widgets\ActiveField->__toString()
    #4 /home/mywebhost/public_html/app/vendor/yiisoft/yii2/base/View.php(336): require('/home/mywebhost/...')
    #5 /home/mywebhost/public_html/app/vendor/yiisoft/yii2/base/View.php(254): yii\base\View->renderPhpFile('/home/mywebhost/...', Array)
    #6 /home/mywebhost/public_html/app/vendor/yiisoft/yii2/base/View.php(156): yii\base\View->renderFile('/home/mywebhost/...', Array, Object(app\controllers\SiteController))
    #7 /home/mywebhost/public_html/app/vendor/yiisoft/yii2/base/Controller.php(384): yii\base\View->render('_clients', Array, Object(app\controllers\SiteController))
    #8 /home/mywebhost/public_html/app/controllers/SiteController.php(72): yii\base\Controller->render('_clients', Array)
    #9 [internal function]: app\controllers\SiteController->actionClientDetails()
    #10 /home/mywebhost/public_html/app/vendor/yiisoft/yii2/base/InlineAction.php(57): call_user_func_array(Array, Array)
    #11 /home/mywebhost/public_html/app/vendor/yiisoft/yii2/base/Controller.php(157): yii\base\InlineAction->runWithParams(Array)
    #12 /home/mywebhost/public_html/app/vendor/yiisoft/yii2/base/Module.php(528): yii\base\Controller->runAction('client-details', Array)
    #13 /home/mywebhost/public_html/app/vendor/yiisoft/yii2/web/Application.php(103): yii\base\Module->runAction('site/client-details', Array)
    #14 /home/mywebhost/public_html/app/vendor/yiisoft/yii2/base/Application.php(386): yii\web\Application->handleRequest(Object(yii\web\Request))
    #15 /home/mywebhost/public_html/index.php(7): yii\base\Application->run()
    #16 {main}
    2018-07-18 01:00:11 [196.103.192.115][-][mbgo1e37qtc3ilqdu6iivk2kv6][info][application] $_GET = [
        'r' => 'client-details'
    ]

My Active form is declared that I is said to be having a problem, and all other forms are also declared as such. All pages with a form are also returning the same error.

    <?php  
    use yii\widgets\ActiveForm; 
    ?>
    <?php $form = ActiveForm::begin(['options'=>['name'=>'clients','id'=>'client_details']]); ?>
    <div class="row pb40"> 
        <div class="clients-form  col-sm-12 col-md-12  col-lg-12 col-xs-12 pull-left">
            <div class="col-sm-10 col-md-10  col-lg-10 col-xs-10 pull-left">
                <div class="clearfix"></div>
                <div class="col-sm-6 col-md-6  col-lg-6 col-xs-6 pull-left">
                <?= $form->field($model, 'national_id')->textInput(['maxlength' => true]) ?>
                </div>
                <div class="col-sm-6 col-md-6  col-lg-6 col-xs-6 pull-right">
                <?= $form->field($model, 'mobile_phone')->textInput(['maxlength' => true]) ?>
                </div>
                <div class="clearfix"></div> 
                <div class="col-sm-6 col-md-6  col-lg-6 col-xs-6 pull-left">
                <?= $form->field($model, 'first_name')->textInput(['maxlength' => true]) ?>
                </div>
                <div class="col-sm-6 col-md-6  col-lg-6 col-xs-6 pull-right">
                <?= $form->field($model, 'last_name')->textInput(['maxlength' => true]) ?>
                </div>
                <div class="clearfix"></div>  
                <div class="col-sm-6 col-md-6  col-lg-6 col-xs-6 pull-left">
                <?= $form->field($model, 'email')->textInput(['maxlength' => true]) ?>
                </div>
                <div class="col-sm-6 col-md-6  col-lg-6 col-xs-6 pull-right">
                <?= $form->field($model, 'address')->textInput(['maxlength' => true]) ?>
                </div>
                <div class="clearfix"></div> 
                <div class="col-sm-6 col-md-6  col-lg-6 col-xs-6 pull-left">
                <?= $form->field($model, 'country')->dropDownList(\yii\helpers\ArrayHelper::map(\app\modules\config\models\Countries::find()->all(), 'name', 'name'));?>  
                </div>
                <div class="col-sm-6 col-md-6  col-lg-6 col-xs-6 pull-right">
                <?= $form->field($model, 'city')->dropDownList(\yii\helpers\ArrayHelper::map(\app\modules\config\models\Cities::find()->all(), 'name', 'name'));?>  
                </div>   
            </div>
        <div class="col-sm-2 col-md-2  col-lg-2 col-xs-2 pull-right"> 
            <div class="col-sm-6 col-md-6  col-lg-6 col-xs-6 pull-right"> 
                <?= $form->field($model, 'payment_channel')->textInput(['maxlength' => true])->hiddenInput()->label('') ?>  
            </div>  
        </div>
    </div>
    <div class="clearfix"></div> 
    <div id="explantion"></div>  
        </div> 
        <a href="#payment" class="btn btn-dark-main btn-next-tabs pull-right">Next</a>
    <?php $form::end();?>

Below is also the model from which the form is created.

    <?php

    use Yii;

    class Clients extends \yii\db\ActiveRecord {

        public static function getDb() {
            return Yii::$app->get('connect1');
        }

        public function rules() {
            return [
                    [['first_name', 'last_name', 'mobile_phone', 'email', 'address', 'country', 'city', 'national_id'], 'required'],
                    [['display_record', 'payment_channel', 'company_id'], 'integer'],
                    [['total_amount'], 'number'],
                    [['created_on', 'updated_on'], 'safe'],
                    [['first_name', 'last_name', 'mobile_phone', 'email'], 'string', 'max' => 128],
                    [['address', 'country', 'city'], 'string', 'max' => 250],
                    [['national_id'], 'string', 'max' => 50],
            ];
        }

        public function attributeLabels() {
            return [
                'id' => Yii::t('app', 'ID'),
                'first_name' => Yii::t('app', 'First Name'),
                'last_name' => Yii::t('app', 'Last Name'),
                'mobile_phone' => Yii::t('app', 'Mobile Phone'),
                'email' => Yii::t('app', 'Email'),
                'address' => Yii::t('app', 'Address'),
                'country' => Yii::t('app', 'Country'),
            ];
        }

        public static function find() {
            return new ClientsQuery(get_called_class());
        }

        public function getName() {
            return $this->first_name . ' ' . $this->last_name;
        }

    } 

And below is the controller that I am working with

    <?php
    namespace app\controllers; 
    use yii\filters\AccessControl;
    use yii\web\Controller; 
    use yii\filters\VerbFilter;  

    class SiteController extends Controller {

        /**
         * {@inheritdoc}
         */ 
        public $layout = "//Public"; 

        public function behaviors() {
            return [
                'access' => [
                    'class' => AccessControl::className(),
                    'only' => ['logout'],
                    'rules' => [
                        [
                            'actions' => ['logout'],
                            'allow' => true,
                            'roles' => ['*'],
                        ],
                    ],
                ],
                'verbs' => [
                    'class' => VerbFilter::className(),
                    'actions' => [
                        'logout' => ['post'],
                    ],
                ],
            ];
        }

        /**
         * {@inheritdoc}
         */
        public function actions() {
            return [
                'error' => [
                    'class' => 'yii\web\ErrorAction',
                ],
                'captcha' => [
                    'class' => 'yii\captcha\CaptchaAction',
                    'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
                ],
            ];
        }


        /**
         * Displays homepage.
         *
         * @return string
         */
        public function actionIndex()
        { 
            return $this->render('_home_content');
        }

        public function actionClientsDetails()
        { 
            $model =  new \app\models\Clients(); 
            $model->payment_channel = 4; 
            return $this->render('_clients',['model'=> $model]);
        }

        public function actionOurGallery()
        {
            return $this->render('_gallery');
        } 
        /**
         * Displays about page.
         *
         * @return string
         */
        public function actionAbout() {
            return $this->render('about');
        }

    }

Обработка ошибок ¶

Если при обработке запроса к RESTful API в запросе пользователя обнаруживается ошибка или происходит
что-то непредвиденное на сервере, вы можете просто выбрасывать исключение, чтобы уведомить пользователя о нештатной ситуации.
Если вы можете установить конкретную причину ошибки (например, запрошенный ресурс не существует), вам следует подумать
о том, чтобы выбрасывать исключение с соответствующим кодом состояния HTTP (например, yii\web\NotFoundHttpException,
соответствующее коду состояния 404). Yii отправит ответ с соответствующим
HTTP-кодом и текстом. Он также включит в тело ответа сериализованное представление
исключения. Например:

HTTP/1.1 404 Not Found
Date: Sun, 02 Mar 2014 05:31:43 GMT
Server: Apache/2.2.26 (Unix) DAV/2 PHP/5.4.20 mod_ssl/2.2.26 OpenSSL/0.9.8y
Transfer-Encoding: chunked
Content-Type: application/json; charset=UTF-8

{
    "name": "Not Found Exception",
    "message": "The requested resource was not found.",
    "code": 0,
    "status": 404
}

Сводный список кодов состояния HTTP, используемых REST-фреймворком Yii:

  • 200: OK. Все сработало именно так, как и ожидалось.
  • 201: Ресурс был успешно создан в ответ на POST-запрос. Заголовок Location
    содержит URL, указывающий на только что созданный ресурс.
  • 204: Запрос обработан успешно, и в ответе нет содержимого (для запроса DELETE, например).
  • 304: Ресурс не изменялся. Можно использовать закэшированную версию.
  • 400: Неверный запрос. Может быть связано с разнообразными проблемами на стороне пользователя, такими как неверные JSON-данные
    в теле запроса, неправильные параметры действия, и т.д.
  • 401: Аутентификация завершилась неудачно.
  • 403: Аутентифицированному пользователю не разрешен доступ к указанной точке входа API.
  • 404: Запрошенный ресурс не существует.
  • 405: Метод не поддерживается. Сверьтесь со списком поддерживаемых HTTP-методов в заголовке Allow.
  • 415: Не поддерживаемый тип данных. Запрашивается неправильный тип данных или номер версии.
  • 422: Проверка данных завершилась неудачно (в ответе на POST-запрос, например). Подробные сообщения об ошибках смотрите в теле ответа.
  • 429: Слишком много запросов. Запрос отклонен из-за превышения ограничения частоты запросов.
  • 500: Внутренняя ошибка сервера. Возможная причина — ошибки в самой программе.

Свой формат ответа с ошибкой ¶

Вам может понадобиться изменить формат ответа с ошибкой. Например, вместо использования разных статусов ответа HTTP
для разных ошибок, вы можете всегда отдавать статус 200, а реальный код статуса отдавать как часть JSON ответа:

HTTP/1.1 200 OK
Date: Sun, 02 Mar 2014 05:31:43 GMT
Server: Apache/2.2.26 (Unix) DAV/2 PHP/5.4.20 mod_ssl/2.2.26 OpenSSL/0.9.8y
Transfer-Encoding: chunked
Content-Type: application/json; charset=UTF-8

{
    "success": false,
    "data": {
        "name": "Not Found Exception",
        "message": "The requested resource was not found.",
        "code": 0,
        "status": 404
    }
}

Для этого можно использовать событие beforeSend компонента response прямо в конфигурации приложения:

return [
    // ...
    'components' => [
        'response' => [
            'class' => 'yii\web\Response',
            'on beforeSend' => function ($event) {
                $response = $event->sender;
                if ($response->data !== null && !empty(Yii::$app->request->get('suppress_response_code'))) {
                    $response->data = [
                        'success' => $response->isSuccessful,
                        'data' => $response->data,
                    ];
                    $response->statusCode = 200;
                }
            },
        ],
    ],
];

Приведённый выше код изменит формат ответа (как для удачного запроса, так и для ошибок) если передан GET-параметр
suppress_response_code.

Понравилась статья? Поделить с друзьями:
  • Возникла внутренняя ошибка сервера rodina rp
  • Возникла неизвестная ошибка forza horizon 4
  • Возможные ошибки при выполнении низкого старта
  • Возникла критическая ошибка фортнайт
  • Возникла внутренняя ошибка программы установки windows при загрузке