diff --git a/extensions/elasticsearch/ActiveRecord.php b/extensions/elasticsearch/ActiveRecord.php index d6ada20..3afadf6 100644 --- a/extensions/elasticsearch/ActiveRecord.php +++ b/extensions/elasticsearch/ActiveRecord.php @@ -9,8 +9,6 @@ namespace yii\elasticsearch; use yii\base\InvalidCallException; use yii\base\InvalidConfigException; -use yii\base\NotSupportedException; -use yii\db\ActiveRecordInterface; use yii\db\BaseActiveRecord; use yii\helpers\Inflector; use yii\helpers\Json; diff --git a/extensions/gii/generators/module/Generator.php b/extensions/gii/generators/module/Generator.php index 5946e07..a97aa20 100644 --- a/extensions/gii/generators/module/Generator.php +++ b/extensions/gii/generators/module/Generator.php @@ -7,9 +7,9 @@ namespace yii\gii\generators\module; -use Yii; use yii\gii\CodeFile; use yii\helpers\Html; +use Yii; use yii\helpers\StringHelper; /** diff --git a/extensions/redis/ActiveRecord.php b/extensions/redis/ActiveRecord.php index f227ed1..a308a32 100644 --- a/extensions/redis/ActiveRecord.php +++ b/extensions/redis/ActiveRecord.php @@ -8,7 +8,6 @@ namespace yii\redis; use yii\base\InvalidConfigException; -use yii\base\NotSupportedException; use yii\db\BaseActiveRecord; use yii\helpers\Inflector; use yii\helpers\StringHelper; @@ -288,7 +287,7 @@ class ActiveRecord extends BaseActiveRecord if (is_numeric($key)) { return $key; } elseif (is_string($key)) { - return ctype_alnum($key) && StringHelper::strlen($key) <= 32 ? $key : md5($key); + return ctype_alnum($key) && StringHelper::byteLength($key) <= 32 ? $key : md5($key); } elseif (is_array($key)) { if (count($key) == 1) { return self::buildKey(reset($key)); diff --git a/extensions/sphinx/ActiveRecord.php b/extensions/sphinx/ActiveRecord.php index 7128b79..e7bda34 100644 --- a/extensions/sphinx/ActiveRecord.php +++ b/extensions/sphinx/ActiveRecord.php @@ -8,13 +8,13 @@ namespace yii\sphinx; use yii\base\InvalidConfigException; -use yii\db\BaseActiveRecord; use yii\base\NotSupportedException; use yii\db\ActiveRelationInterface; +use yii\db\BaseActiveRecord; use yii\db\StaleObjectException; use yii\helpers\Inflector; -use yii\helpers\StringHelper; use Yii; +use yii\helpers\StringHelper; /** * ActiveRecord is the base class for classes representing relational data in terms of objects. diff --git a/framework/yii/caching/Cache.php b/framework/yii/caching/Cache.php index 371f91a..31d1e2d 100644 --- a/framework/yii/caching/Cache.php +++ b/framework/yii/caching/Cache.php @@ -100,7 +100,7 @@ abstract class Cache extends Component implements \ArrayAccess protected function buildKey($key) { if (is_string($key)) { - $key = ctype_alnum($key) && StringHelper::strlen($key) <= 32 ? $key : md5($key); + $key = ctype_alnum($key) && StringHelper::byteLength($key) <= 32 ? $key : md5($key); } else { $key = md5(json_encode($key)); } diff --git a/framework/yii/db/ActiveRecord.php b/framework/yii/db/ActiveRecord.php index adcf508..7f7e6f3 100644 --- a/framework/yii/db/ActiveRecord.php +++ b/framework/yii/db/ActiveRecord.php @@ -9,13 +9,8 @@ namespace yii\db; use yii\base\InvalidConfigException; -use yii\base\Model; -use yii\base\InvalidParamException; -use yii\base\ModelEvent; -use yii\base\UnknownMethodException; -use yii\base\InvalidCallException; -use yii\helpers\StringHelper; use yii\helpers\Inflector; +use yii\helpers\StringHelper; /** * ActiveRecord is the base class for classes representing relational data in terms of objects. diff --git a/framework/yii/helpers/BaseFileHelper.php b/framework/yii/helpers/BaseFileHelper.php index 325cc8a..90d6117 100644 --- a/framework/yii/helpers/BaseFileHelper.php +++ b/framework/yii/helpers/BaseFileHelper.php @@ -292,11 +292,11 @@ class BaseFileHelper if ($isDir = is_dir($path)) { $path .= '/'; } - $n = StringHelper::strlen($path); + $n = StringHelper::byteLength($path); if (!empty($options['except'])) { foreach ($options['except'] as $name) { - if (StringHelper::substr($path, -StringHelper::strlen($name), $n) === $name) { + if (StringHelper::byteSubstr($path, -StringHelper::byteLength($name), $n) === $name) { return false; } } @@ -304,7 +304,7 @@ class BaseFileHelper if (!$isDir && !empty($options['only'])) { foreach ($options['only'] as $name) { - if (StringHelper::substr($path, -StringHelper::strlen($name), $n) === $name) { + if (StringHelper::byteSubstr($path, -StringHelper::byteLength($name), $n) === $name) { return true; } } diff --git a/framework/yii/helpers/BaseSecurity.php b/framework/yii/helpers/BaseSecurity.php index 03af81d..a49dd78 100644 --- a/framework/yii/helpers/BaseSecurity.php +++ b/framework/yii/helpers/BaseSecurity.php @@ -80,10 +80,10 @@ class BaseSecurity } $module = static::openCryptModule(); $ivSize = mcrypt_enc_get_iv_size($module); - $iv = StringHelper::substr($data, 0, $ivSize); + $iv = StringHelper::byteSubstr($data, 0, $ivSize); $key = static::deriveKey($password, $iv); mcrypt_generic_init($module, $key, $iv); - $decrypted = mdecrypt_generic($module, StringHelper::substr($data, $ivSize, StringHelper::strlen($data))); + $decrypted = mdecrypt_generic($module, StringHelper::byteSubstr($data, $ivSize, StringHelper::byteLength($data))); mcrypt_generic_deinit($module); mcrypt_module_close($module); return static::stripPadding($decrypted); @@ -96,7 +96,7 @@ class BaseSecurity */ protected static function addPadding($data) { - $pad = self::CRYPT_BLOCK_SIZE - (StringHelper::strlen($data) % self::CRYPT_BLOCK_SIZE); + $pad = self::CRYPT_BLOCK_SIZE - (StringHelper::byteLength($data) % self::CRYPT_BLOCK_SIZE); return $data . str_repeat(chr($pad), $pad); } @@ -107,11 +107,11 @@ class BaseSecurity */ protected static function stripPadding($data) { - $end = StringHelper::substr($data, -1, NULL); + $end = StringHelper::byteSubstr($data, -1, NULL); $last = ord($end); - $n = StringHelper::strlen($data) - $last; - if (StringHelper::substr($data, $n, NULL) == str_repeat($end, $last)) { - return StringHelper::substr($data, 0, $n); + $n = StringHelper::byteLength($data) - $last; + if (StringHelper::byteSubstr($data, $n, NULL) == str_repeat($end, $last)) { + return StringHelper::byteSubstr($data, 0, $n); } return false; } @@ -164,11 +164,11 @@ class BaseSecurity */ public static function validateData($data, $key, $algorithm = 'sha256') { - $hashSize = StringHelper::strlen(hash_hmac($algorithm, 'test', $key)); - $n = StringHelper::strlen($data); + $hashSize = StringHelper::byteLength(hash_hmac($algorithm, 'test', $key)); + $n = StringHelper::byteLength($data); if ($n >= $hashSize) { - $hash = StringHelper::substr($data, 0, $hashSize); - $data2 = StringHelper::substr($data, $hashSize, $n - $hashSize); + $hash = StringHelper::byteSubstr($data, 0, $hashSize); + $data2 = StringHelper::byteSubstr($data, $hashSize, $n - $hashSize); return $hash === hash_hmac($algorithm, $data2, $key) ? $data2 : false; } else { return false; diff --git a/framework/yii/helpers/BaseStringHelper.php b/framework/yii/helpers/BaseStringHelper.php index e1622b9..e282913 100644 --- a/framework/yii/helpers/BaseStringHelper.php +++ b/framework/yii/helpers/BaseStringHelper.php @@ -26,7 +26,7 @@ class BaseStringHelper * @param string $string the string being measured for length * @return integer the number of bytes in the given string. */ - public static function strlen($string) + public static function byteLength($string) { return mb_strlen($string, '8bit'); } @@ -40,7 +40,7 @@ class BaseStringHelper * @return string the extracted part of string, or FALSE on failure or an empty string. * @see http://www.php.net/manual/en/function.substr.php */ - public static function substr($string, $start, $length) + public static function byteSubstr($string, $start, $length) { return mb_substr($string, $start, $length, '8bit'); } @@ -52,6 +52,7 @@ class BaseStringHelper * This method was mainly created to work on php namespaces. When working with real * file paths, php's `basename()` should work fine for you. * Note: this method is not aware of the actual filesystem, or path components such as "..". + * * @param string $path A path string. * @param string $suffix If the name component ends in suffix this will also be cut off. * @return string the trailing name component of the given path. @@ -73,6 +74,7 @@ class BaseStringHelper * Returns parent directory's path. * This method is similar to `dirname()` except that it will treat * both \ and / as directory separators, independent of the operating system. + * * @param string $path A path string. * @return string the parent directory's path. * @see http://www.php.net/manual/en/function.basename.php diff --git a/framework/yii/web/Response.php b/framework/yii/web/Response.php index bb77848..1c0fb18 100644 --- a/framework/yii/web/Response.php +++ b/framework/yii/web/Response.php @@ -382,7 +382,7 @@ class Response extends \yii\base\Response public function sendContentAsFile($content, $attachmentName, $mimeType = 'application/octet-stream') { $headers = $this->getHeaders(); - $contentLength = StringHelper::strlen($content); + $contentLength = StringHelper::byteLength($content); $range = $this->getHttpRange($contentLength); if ($range === false) { $headers->set('Content-Range', "bytes */$contentLength"); @@ -395,14 +395,14 @@ class Response extends \yii\base\Response ->setDefault('Content-Type', $mimeType) ->setDefault('Cache-Control', 'must-revalidate, post-check=0, pre-check=0') ->setDefault('Content-Transfer-Encoding', 'binary') - ->setDefault('Content-Length', StringHelper::strlen($content)) + ->setDefault('Content-Length', StringHelper::byteLength($content)) ->setDefault('Content-Disposition', "attachment; filename=\"$attachmentName\""); list($begin, $end) = $range; if ($begin !=0 || $end != $contentLength - 1) { $this->setStatusCode(206); $headers->set('Content-Range', "bytes $begin-$end/$contentLength"); - $this->content = StringHelper::substr($content, $begin, $end - $begin + 1); + $this->content = StringHelper::byteSubstr($content, $begin, $end - $begin + 1); } else { $this->setStatusCode(200); $this->content = $content; diff --git a/tests/unit/framework/helpers/StringHelperTest.php b/tests/unit/framework/helpers/StringHelperTest.php index 2f1fb06..a641001 100644 --- a/tests/unit/framework/helpers/StringHelperTest.php +++ b/tests/unit/framework/helpers/StringHelperTest.php @@ -12,14 +12,14 @@ class StringHelperTest extends TestCase { public function testStrlen() { - $this->assertEquals(4, StringHelper::strlen('this')); - $this->assertEquals(6, StringHelper::strlen('это')); + $this->assertEquals(4, StringHelper::byteLength('this')); + $this->assertEquals(6, StringHelper::byteLength('это')); } public function testSubstr() { - $this->assertEquals('th', StringHelper::substr('this', 0, 2)); - $this->assertEquals('э', StringHelper::substr('это', 0, 2)); + $this->assertEquals('th', StringHelper::byteSubstr('this', 0, 2)); + $this->assertEquals('э', StringHelper::byteSubstr('это', 0, 2)); } public function testBasename() diff --git a/tests/unit/framework/web/ResponseTest.php b/tests/unit/framework/web/ResponseTest.php index 6077945..7883d86 100644 --- a/tests/unit/framework/web/ResponseTest.php +++ b/tests/unit/framework/web/ResponseTest.php @@ -57,7 +57,7 @@ class ResponseTest extends \yiiunit\TestCase $this->assertEquals(206, $this->response->statusCode); $headers = $this->response->headers; $this->assertEquals("bytes", $headers->get('Accept-Ranges')); - $this->assertEquals("bytes " . $expectedHeader . '/' . StringHelper::strlen($fullContent), $headers->get('Content-Range')); + $this->assertEquals("bytes " . $expectedHeader . '/' . StringHelper::byteLength($fullContent), $headers->get('Content-Range')); $this->assertEquals('text/plain', $headers->get('Content-Type')); $this->assertEquals("$length", $headers->get('Content-Length')); }