File getMimeType throws exception if no mime type can be set, fixes for phpstan checks
This commit is contained in:
+2
-2
@@ -54,8 +54,8 @@ return [
|
|||||||
// Note that the **only** effect of choosing `'5.6'` is to infer that functions removed in php 7.0 exist.
|
// Note that the **only** effect of choosing `'5.6'` is to infer that functions removed in php 7.0 exist.
|
||||||
// (See `backward_compatibility_checks` for additional options)
|
// (See `backward_compatibility_checks` for additional options)
|
||||||
// Automatically inferred from composer.json requirement for "php" of ">=8.2"
|
// Automatically inferred from composer.json requirement for "php" of ">=8.2"
|
||||||
'target_php_version' => '8.2',
|
'target_php_version' => '8.3',
|
||||||
"minimum_target_php_version" => "8.2",
|
"minimum_target_php_version" => "8.3",
|
||||||
// turn color on (-C)
|
// turn color on (-C)
|
||||||
"color_issue_messages_if_supported" => true,
|
"color_issue_messages_if_supported" => true,
|
||||||
|
|
||||||
|
|||||||
+9
-3
@@ -58,15 +58,21 @@ class File
|
|||||||
* else returns '' for any other finfo read problem
|
* else returns '' for any other finfo read problem
|
||||||
*
|
*
|
||||||
* @param string $read_file File to read, relative or absolute path
|
* @param string $read_file File to read, relative or absolute path
|
||||||
* @return string
|
* @return string mime type
|
||||||
|
* @throws \UnexpectedValueException if file cannot be read or is not a file
|
||||||
|
* @throws \RangeException if we cannot get a mime type and throw exception is on
|
||||||
*/
|
*/
|
||||||
public static function getMimeType(string $read_file): string
|
public static function getMimeType(string $read_file): string
|
||||||
{
|
{
|
||||||
$finfo = new \finfo(FILEINFO_MIME_TYPE);
|
$finfo = new \finfo(FILEINFO_MIME_TYPE);
|
||||||
if (!is_file($read_file)) {
|
if (!is_file($read_file) || !is_readable($read_file)) {
|
||||||
throw new \UnexpectedValueException('[getMimeType] File not found: ' . $read_file);
|
throw new \UnexpectedValueException('[getMimeType] File not found: ' . $read_file);
|
||||||
}
|
}
|
||||||
return $finfo->file($read_file) ?: '';
|
$mime_type = $finfo->file($read_file);
|
||||||
|
if ($mime_type === false) {
|
||||||
|
throw new \RangeException('[getMimeType] Cannot get mime type for: ' . $read_file);
|
||||||
|
}
|
||||||
|
return $mime_type;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -133,7 +133,7 @@ class DateTime
|
|||||||
} else {
|
} else {
|
||||||
for ($i = 0, $iMax = count($timegroups); $i < $iMax; $i++) {
|
for ($i = 0, $iMax = count($timegroups); $i < $iMax; $i++) {
|
||||||
$output = floor((float)$timestamp / $timegroups[$i]);
|
$output = floor((float)$timestamp / $timegroups[$i]);
|
||||||
$timestamp = (float)$timestamp % $timegroups[$i];
|
$timestamp = $timestamp % $timegroups[$i];
|
||||||
// output has days|hours|min|sec
|
// output has days|hours|min|sec
|
||||||
if ($output || $time_string) {
|
if ($output || $time_string) {
|
||||||
$time_string .= $output . $labels[$i] . (($i + 1) != count($timegroups) ? ' ' : '');
|
$time_string .= $output . $labels[$i] . (($i + 1) != count($timegroups) ? ' ' : '');
|
||||||
@@ -453,7 +453,7 @@ class DateTime
|
|||||||
}
|
}
|
||||||
if (isset($matches[11]) && is_numeric($matches[11])) {
|
if (isset($matches[11]) && is_numeric($matches[11])) {
|
||||||
// for milliseconds, we need to divide by 1000 and add them
|
// for milliseconds, we need to divide by 1000 and add them
|
||||||
$timestamp += (float)($matches[11] / 1000);
|
$timestamp += ((float)$matches[11] / 1000);
|
||||||
}
|
}
|
||||||
if ($negative) {
|
if ($negative) {
|
||||||
// cast to float so we can do a negative multiplication
|
// cast to float so we can do a negative multiplication
|
||||||
|
|||||||
@@ -154,7 +154,7 @@ class Byte
|
|||||||
if (!empty($matches[1])) {
|
if (!empty($matches[1])) {
|
||||||
$number_negative = true;
|
$number_negative = true;
|
||||||
}
|
}
|
||||||
if (isset($matches[2]) && isset($matches[3])) {
|
if (isset($matches[2])) {
|
||||||
// remove all non valid characters from the number
|
// remove all non valid characters from the number
|
||||||
$number = preg_replace('/[^0-9\.]/', '', $matches[2]);
|
$number = preg_replace('/[^0-9\.]/', '', $matches[2]);
|
||||||
// final clean up and convert to float
|
// final clean up and convert to float
|
||||||
|
|||||||
@@ -957,9 +957,9 @@ class Color
|
|||||||
* Undocumented function
|
* Undocumented function
|
||||||
*
|
*
|
||||||
* @param HWB $hwb
|
* @param HWB $hwb
|
||||||
* @return Lch
|
* @return LCH
|
||||||
*/
|
*/
|
||||||
public static function hwbToLch(HWB $hwb): Lch
|
public static function hwbToLch(HWB $hwb): LCH
|
||||||
{
|
{
|
||||||
return self::rgbToLch(
|
return self::rgbToLch(
|
||||||
self::hwbToRgb($hwb)
|
self::hwbToRgb($hwb)
|
||||||
@@ -1078,10 +1078,10 @@ class Color
|
|||||||
/**
|
/**
|
||||||
* OkLab to Lch (CIE)
|
* OkLab to Lch (CIE)
|
||||||
*
|
*
|
||||||
* @param LAB $lab
|
* @param Lab $lab
|
||||||
* @return LCH
|
* @return LCH
|
||||||
*/
|
*/
|
||||||
public static function okLabToLch(LAB $lab): LCH
|
public static function okLabToLch(Lab $lab): LCH
|
||||||
{
|
{
|
||||||
return self::labToLch(
|
return self::labToLch(
|
||||||
self::okLabToLab($lab)
|
self::okLabToLab($lab)
|
||||||
@@ -1092,9 +1092,9 @@ class Color
|
|||||||
* Lch (CIE) to OkLab
|
* Lch (CIE) to OkLab
|
||||||
*
|
*
|
||||||
* @param LCH $lch
|
* @param LCH $lch
|
||||||
* @return LAB
|
* @return Lab
|
||||||
*/
|
*/
|
||||||
public static function lchToOkLab(LCH $lch): LAB
|
public static function lchToOkLab(LCH $lch): Lab
|
||||||
{
|
{
|
||||||
return self::labToOkLab(
|
return self::labToOkLab(
|
||||||
self::lchToLab($lch)
|
self::lchToLab($lch)
|
||||||
|
|||||||
@@ -76,9 +76,13 @@ class Json
|
|||||||
* @param string $json
|
* @param string $json
|
||||||
* @param int $flags only JSON_INVALID_UTF8_IGNORE is currently allowed
|
* @param int $flags only JSON_INVALID_UTF8_IGNORE is currently allowed
|
||||||
* @return bool
|
* @return bool
|
||||||
|
* @throws \InvalidArgumentException if flags is invalid
|
||||||
*/
|
*/
|
||||||
public static function jsonValidate(string $json, int $flags = 0): bool
|
public static function jsonValidate(string $json, int $flags = 0): bool
|
||||||
{
|
{
|
||||||
|
if ($flags != 0 && $flags != JSON_INVALID_UTF8_IGNORE) {
|
||||||
|
throw new \InvalidArgumentException("For flag only 0 or JSON_INVALID_UTF8_IGNORE is allwed: " . $flags);
|
||||||
|
}
|
||||||
$json_valid = json_validate($json, flags:$flags);
|
$json_valid = json_validate($json, flags:$flags);
|
||||||
self::$json_last_error = json_last_error();
|
self::$json_last_error = json_last_error();
|
||||||
return $json_valid;
|
return $json_valid;
|
||||||
|
|||||||
+12
-6
@@ -2562,21 +2562,27 @@ class IO
|
|||||||
// set field names
|
// set field names
|
||||||
$this->cursor_ext[$query_hash]['field_names'] = [];
|
$this->cursor_ext[$query_hash]['field_names'] = [];
|
||||||
for ($i = 0; $i < $this->cursor_ext[$query_hash]['num_fields']; $i++) {
|
for ($i = 0; $i < $this->cursor_ext[$query_hash]['num_fields']; $i++) {
|
||||||
$this->cursor_ext[$query_hash]['field_names'][] =
|
if (
|
||||||
$this->db_functions->__dbFieldName(
|
($field_name = $this->db_functions->__dbFieldName(
|
||||||
$this->cursor_ext[$query_hash]['cursor'],
|
$this->cursor_ext[$query_hash]['cursor'],
|
||||||
$i
|
$i
|
||||||
);
|
)) !== false
|
||||||
|
) {
|
||||||
|
$this->cursor_ext[$query_hash]['field_names'][] = $field_name;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
$this->field_names = $this->cursor_ext[$query_hash]['field_names'];
|
$this->field_names = $this->cursor_ext[$query_hash]['field_names'];
|
||||||
// field types
|
// field types
|
||||||
$this->cursor_ext[$query_hash]['field_types'] = [];
|
$this->cursor_ext[$query_hash]['field_types'] = [];
|
||||||
for ($i = 0; $i < $this->cursor_ext[$query_hash]['num_fields']; $i++) {
|
for ($i = 0; $i < $this->cursor_ext[$query_hash]['num_fields']; $i++) {
|
||||||
$this->cursor_ext[$query_hash]['field_types'][] =
|
if (
|
||||||
$this->db_functions->__dbFieldType(
|
($field_type = $this->db_functions->__dbFieldType(
|
||||||
$this->cursor_ext[$query_hash]['cursor'],
|
$this->cursor_ext[$query_hash]['cursor'],
|
||||||
$i
|
$i
|
||||||
);
|
)) !== false
|
||||||
|
) {
|
||||||
|
$this->cursor_ext[$query_hash]['field_types'][] = $field_type;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
$this->field_types = $this->cursor_ext[$query_hash]['field_types'];
|
$this->field_types = $this->cursor_ext[$query_hash]['field_types'];
|
||||||
// combined name => type
|
// combined name => type
|
||||||
|
|||||||
@@ -134,8 +134,8 @@ class Support
|
|||||||
* Convert bool value to string value. Short name alias for printBool
|
* Convert bool value to string value. Short name alias for printBool
|
||||||
*
|
*
|
||||||
* @param bool $bool Bool value to be transformed
|
* @param bool $bool Bool value to be transformed
|
||||||
* @param string $true [='true'] Override default string 'true'
|
* @param string $true [=true] Override default string 'true'
|
||||||
* @param string $false [=false'] Override default string 'false'
|
* @param string $false [=false] Override default string 'false'
|
||||||
* @return string $true or $false string for true/false bool
|
* @return string $true or $false string for true/false bool
|
||||||
*/
|
*/
|
||||||
public static function prBl(
|
public static function prBl(
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ enum Flag: int
|
|||||||
/**
|
/**
|
||||||
* Get internal name from int value
|
* Get internal name from int value
|
||||||
*
|
*
|
||||||
* @param int $value
|
* @param value-of<self::VALUES> $value
|
||||||
* @return self
|
* @return self
|
||||||
*/
|
*/
|
||||||
public static function fromValue(int $value): self
|
public static function fromValue(int $value): self
|
||||||
|
|||||||
@@ -178,11 +178,11 @@ class Elements
|
|||||||
"/(href=\")?(\>)?\b($protRegex)([\w\.\-?&=+%#~,;\/]+)\b([\.\-?&=+%#~,;\/]*)(\|([^\||^#]+)(#([^\|]+))?\|)?/",
|
"/(href=\")?(\>)?\b($protRegex)([\w\.\-?&=+%#~,;\/]+)\b([\.\-?&=+%#~,;\/]*)(\|([^\||^#]+)(#([^\|]+))?\|)?/",
|
||||||
function ($matches) {
|
function ($matches) {
|
||||||
return self::createUrl(
|
return self::createUrl(
|
||||||
$matches[1] ?? '',
|
$matches[1],
|
||||||
$matches[2] ?? '',
|
$matches[2],
|
||||||
$matches[3] ?? '',
|
$matches[3],
|
||||||
$matches[4] ?? '',
|
$matches[4],
|
||||||
$matches[5] ?? '',
|
$matches[5],
|
||||||
$matches[7] ?? '',
|
$matches[7] ?? '',
|
||||||
$matches[9] ?? ''
|
$matches[9] ?? ''
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -277,6 +277,38 @@ final class CoreLibsConvertJsonTest extends TestCase
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if invalid flag throws exception
|
||||||
|
*
|
||||||
|
* @covers ::jsonValidate
|
||||||
|
* @testdox jsonValidate test exception thrown on invalid flag
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testJsonValidateInvalidFlag(): void
|
||||||
|
{
|
||||||
|
$this->expectException("\InvalidArgumentException");
|
||||||
|
\CoreLibs\Convert\Json::jsonValidate('{"valid": "json"}', 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if valid flag throws no exception
|
||||||
|
*
|
||||||
|
* @covers ::jsonValidate
|
||||||
|
* @testdox jsonValidate test no exception on valid flag
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testJsonValidateValidflag(): void
|
||||||
|
{
|
||||||
|
$this->assertTrue(
|
||||||
|
\CoreLibs\Convert\Json::jsonValidate('{"valid": "json"}', 0)
|
||||||
|
);
|
||||||
|
$this->assertTrue(
|
||||||
|
\CoreLibs\Convert\Json::jsonValidate('{"valid": "json"}', JSON_INVALID_UTF8_IGNORE)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Undocumented function
|
* Undocumented function
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -45,7 +45,6 @@ use CoreLibs\DB\Support\ConvertPlaceholder;
|
|||||||
* Test class for DB\IO + DB\SQL\PgSQL
|
* Test class for DB\IO + DB\SQL\PgSQL
|
||||||
* This will only test the PgSQL parts
|
* This will only test the PgSQL parts
|
||||||
* @coversDefaultClass \CoreLibs\DB\IO
|
* @coversDefaultClass \CoreLibs\DB\IO
|
||||||
* @coversDefaultClass \CoreLibs\DB\SQL\PgSQL
|
|
||||||
* @testdox \CoreLibs\DB\IO method tests for SQL\PgSQL
|
* @testdox \CoreLibs\DB\IO method tests for SQL\PgSQL
|
||||||
*/
|
*/
|
||||||
final class CoreLibsDBIOTest extends TestCase
|
final class CoreLibsDBIOTest extends TestCase
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
$set = 0;
|
$set = 0;
|
||||||
foreach (['/../../www', '/../www', '/../..', '/..', '/../../src', '/../src'] as $src) {
|
foreach (['/../../www', '/../www', '/../../src', '/../src', '/../..', '/..'] as $src) {
|
||||||
if (is_file(dirname(__DIR__) . $src . '/vendor/autoload.php')) {
|
if (is_file(dirname(__DIR__) . $src . '/vendor/autoload.php')) {
|
||||||
require dirname(__DIR__) . $src . '/vendor/autoload.php';
|
require dirname(__DIR__) . $src . '/vendor/autoload.php';
|
||||||
$set = 1;
|
$set = 1;
|
||||||
|
|||||||
Reference in New Issue
Block a user