Server : nginx/1.20.2 System : Linux VM-4-4-centos 3.10.0-1160.66.1.el7.x86_64 #1 SMP Wed May 18 16:02:34 UTC 2022 x86_64 User : www ( 1000) PHP Version : 5.6.40 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv Directory : /www/wwwroot/greatapp.cn/vendor/topthink/think-migration/phinx/src/Phinx/Util/ |
<?php /** * Phinx * * (The MIT license) * Copyright (c) 2015 Rob Morgan * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated * documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * * @package Phinx * @subpackage Phinx\Util */ namespace Phinx\Util; class Util { /** * @var string */ const DATE_FORMAT = 'YmdHis'; /** * @var string */ const MIGRATION_FILE_NAME_PATTERN = '/^\d+_([\w_]+).php$/i'; /** * @var string */ const SEED_FILE_NAME_PATTERN = '/^([A-Z][a-z0-9]+).php$/i'; /** * Gets the current timestamp string, in UTC. * * @return string */ public static function getCurrentTimestamp() { $dt = new \DateTime('now', new \DateTimeZone('UTC')); return $dt->format(static::DATE_FORMAT); } /** * Gets an array of all the existing migration class names. * * @return string */ public static function getExistingMigrationClassNames($path) { $classNames = array(); if (!is_dir($path)) { return $classNames; } // filter the files to only get the ones that match our naming scheme $phpFiles = glob($path . DIRECTORY_SEPARATOR . '*.php'); foreach ($phpFiles as $filePath) { if (preg_match('/([0-9]+)_([_a-z0-9]*).php/', basename($filePath))) { $classNames[] = static::mapFileNameToClassName(basename($filePath)); } } return $classNames; } /** * Get the version from the beginning of a file name. * * @param string $fileName File Name * @return string */ public static function getVersionFromFileName($fileName) { $matches = array(); preg_match('/^[0-9]+/', basename($fileName), $matches); return $matches[0]; } /** * Turn migration names like 'CreateUserTable' into file names like * '12345678901234_create_user_table.php' or 'LimitResourceNamesTo30Chars' into * '12345678901234_limit_resource_names_to_30_chars.php'. * * @param string $className Class Name * @return string */ public static function mapClassNameToFileName($className) { $arr = preg_split('/(?=[A-Z])/', $className); unset($arr[0]); // remove the first element ('') $fileName = static::getCurrentTimestamp() . '_' . strtolower(implode($arr, '_')) . '.php'; return $fileName; } /** * Turn file names like '12345678901234_create_user_table.php' into class * names like 'CreateUserTable'. * * @param string $fileName File Name * @return string */ public static function mapFileNameToClassName($fileName) { $matches = array(); if (preg_match(static::MIGRATION_FILE_NAME_PATTERN, $fileName, $matches)) { $fileName = $matches[1]; } return str_replace(' ', '', ucwords(str_replace('_', ' ', $fileName))); } /** * Check if a migration class name is unique regardless of the * timestamp. * * This method takes a class name and a path to a migrations directory. * * Migration class names must be in CamelCase format. * e.g: CreateUserTable or AddIndexToPostsTable. * * Single words are not allowed on their own. * * @param string $className Class Name * @param string $path Path * @return boolean */ public static function isUniqueMigrationClassName($className, $path) { $existingClassNames = static::getExistingMigrationClassNames($path); return !(in_array($className, $existingClassNames)); } /** * Check if a migration/seed class name is valid. * * Migration & Seed class names must be in CamelCase format. * e.g: CreateUserTable, AddIndexToPostsTable or UserSeeder. * * Single words are not allowed on their own. * * @param string $className Class Name * @return boolean */ public static function isValidPhinxClassName($className) { return (bool) preg_match('/^([A-Z][a-z0-9]+)+$/', $className); } /** * Check if a migration file name is valid. * * @param string $fileName File Name * @return boolean */ public static function isValidMigrationFileName($fileName) { $matches = array(); return preg_match(static::MIGRATION_FILE_NAME_PATTERN, $fileName, $matches); } /** * Check if a seed file name is valid. * * @param string $fileName File Name * @return boolean */ public static function isValidSeedFileName($fileName) { $matches = array(); return preg_match(static::SEED_FILE_NAME_PATTERN, $fileName, $matches); } }