Я хочу автоматически создать файл миграции в 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;
}
}
}