【发布时间】:2018-09-10 13:24:32
【问题描述】:
我想在 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;
}
}
}
【问题讨论】:
-
“但它不起作用”。那没有帮助。什么输入?什么预期输出?什么实际输出?有哪些error_log警告错误或通知?
-
抱歉描述不清晰。我使用
var_dump(ini_get('date.timezone')); // see set timezone here来查看设置的时区是什么:'Europe/Berlin',这不是我所期望的 Asia/Ho_Chi_Minh。
标签: php codeigniter timezone continuous-integration