не могу установить часовой пояс в миграции CI3 - PullRequest
0 голосов
/ 10 сентября 2018

Я хочу автоматически создать файл миграции в Codeigniter 3. Проблема в том, что когда я генерирую имя файла с отметкой времени, я использую date_default_timezone_set, как показано ниже, но это не работает. Я пытался использовать аналогичную конструкцию в других контроллерах, и они работают очень хорошо. Я пробовал другие способы, такие как установка часового пояса в index.php или файл конфигурации, но они тоже не работали. Чего мне не хватает?

<?php defined('BASEPATH') OR exit('No direct script access allowed');

class Migrate extends CI_Controller {

function __construct()
{
    parent::__construct();
    date_default_timezone_set('Asia/Ho_Chi_Minh');

    if ( !$this->input->is_cli_request() ) {
        show_error('You don\'t have permission for this action', 403);
        return;
    }
    $this->load->library('migration');
}

public function generate($name = false)
{
    if ($name === false) {
        echo 'Please define migration name' . PHP_EOL;
        return;
    }
    if ( !preg_match('/^[a-z_]+$/i', $name) ) {
        echo 'File name must contain only a-z characters' . PHP_EOL;
        return;
    }

    var_dump(ini_get('date.timezone')); // see set timezone here
    $fileName = sprintf('%d_%s.php', date('YmdHis'), $name);
    try {
        $folderPath = APPPATH . 'migrations/';
        if ( !is_dir($folderPath) ) {
            try {
                mkdir($folderPath);
            } catch (Exception $e) {
                echo 'Error on create folder: ' . $e->getMessage() . PHP_EOL;
            }
        }

        $filePath = $folderPath . $fileName;
        if (file_exists($filePath)) {
            echo 'File already exists' . PHP_EOL;
            return;
        }

        $data['className'] = $name;
        $data = '<?php ' . $this->load->view('migrations/migration-template', $data, true);

        try {
            if(file_put_contents($filePath, $data) !== false)
                echo 'Migration file was created successfully' . PHP_EOL;
        } catch (Exception $e) {
            echo $e->getMessage() . PHP_EOL;
        }
    } catch (Exception $e) {
        echo $e->getMessage() . PHP_EOL;
    }
}

}

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Загрузить часовой пояс в файле config / autoload.php вверху страницы.

date_default_timezone_set ('America / Los_Angeles');

0 голосов
/ 10 сентября 2018

Проблема в том, что команда set, которую вы используете, работает только для этого скрипта и не изменяет ini. Таким образом, благодаря получению значения ini у вас теперь не совпадают часовые пояса.

Вместо этого используйте date_default_timezone_get()

http://be2.php.net/manual/en/function.date-default-timezone-get.php

Или используйте ini_set() и ini_get().

Ниже приведен код с установленной страницы руководства http://be2.php.net/manual/en/function.date-default-timezone-set.php:

<?php
date_default_timezone_set('America/Los_Angeles');

$script_tz = date_default_timezone_get();

if (strcmp($script_tz, ini_get('date.timezone'))){
    echo 'Script timezone differs from ini-set timezone.';
} else {
    echo 'Script timezone and ini-set timezone match.';
}

Итак, чтобы подвести итог, не смешивайте две функции вместе!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...