Вход Регистрация
Файл: vendor/intervention/image/src/Traits/CanParseFilePath.php
Строк: 203
<?php

declare(strict_types=1);

namespace 
InterventionImageTraits;

use 
InterventionImageExceptionsDirectoryNotFoundException;
use 
InterventionImageExceptionsFileNotFoundException;
use 
InterventionImageExceptionsFileNotReadableException;
use 
InterventionImageExceptionsInvalidArgumentException;
use 
SplFileInfo;
use 
Stringable;

trait 
CanParseFilePath
{
    
/**
     * Parse and return existing file path or throw exception.
     *
     * @throws InvalidArgumentException
     * @throws DirectoryNotFoundException
     * @throws FileNotFoundException
     * @throws FileNotReadableException
     */
    
protected static function readableFilePathOrFail(mixed $path): string
    
{
        if (!
is_string($path) && !$path instanceof Stringable) {
            throw new 
InvalidArgumentException('Path must be either of type string or instance of Stringable');
        }

        
$path = (string) $path;

        if (
$path === '') {
            throw new 
InvalidArgumentException('Path must not be an empty string');
        }

        if (
strlen($path) > PHP_MAXPATHLEN) {
            throw new 
InvalidArgumentException(
                
"Path is longer than the configured max. value of " PHP_MAXPATHLEN,
            );
        }

        
// get info on path
        
$dirname pathinfo($pathPATHINFO_DIRNAME);
        
$basename pathinfo($pathPATHINFO_BASENAME);

        if (!
is_dir($dirname)) {
            throw new 
DirectoryNotFoundException('Directory "' $dirname '" not found');
        }

        
// file must exit
        
if (!file_exists($path)) {
            throw new 
FileNotFoundException('File "' $basename '" not found in directory "' $dirname '"');
        }

        if (!
is_file($path)) {
            throw new 
FileNotFoundException('"' $basename '" is no file in directory "' $dirname '"');
        }

        if (!
is_readable($dirname)) {
            throw new 
FileNotReadableException('Directory "' $dirname '" is not readable');
        }

        if (!
is_readable($path)) {
            throw new 
FileNotReadableException('File "' $path '" is not readable');
        }

        
$realpath realpath($path);

        if (
$realpath === false) {
            throw new 
FileNotReadableException('File "' $path '" is not readable');
        }

        return 
$realpath;
    }

    
/**
     * Read real path from given SplFileInfo object or throw exeption.
     *
     * @throws InvalidArgumentException
     * @throws DirectoryNotFoundException
     * @throws FileNotFoundException
     * @throws FileNotReadableException
     */
    
protected static function filePathFromSplFileInfoOrFail(SplFileInfo $splFileInfo): string
    
{
        
$path $splFileInfo->getPathname();
        
$dirname pathinfo($pathPATHINFO_DIRNAME);
        
$basename pathinfo($pathPATHINFO_BASENAME);

        if (
$path === '') {
            throw new 
InvalidArgumentException('Path contained in SplFileInfo must not be an empty string');
        }

        if (!
is_dir($dirname)) {
            throw new 
DirectoryNotFoundException(
                
'The directory "' $dirname '" contained in SplFileInfo does not exist',
            );
        }

        if (!
file_exists($path)) {
            throw new 
FileNotFoundException(
                
'File "' $basename '" contained in SplFileInfo was not found in directory "' $dirname '"',
            );
        }

        if (!
is_file($path)) {
            throw new 
FileNotFoundException(
                
'File "' $basename '" contained in SplFileInfo is no file in directory "' $dirname '"',
            );
        }

        if (!
is_readable($dirname)) {
            throw new 
FileNotReadableException(
                
'Directory "' $dirname '" contained in SplFileInfo is not readable',
            );
        }

        if (!
is_readable($path)) {
            throw new 
FileNotReadableException(
                
'File "' $path '" contained in SplFileInfo is not readable',
            );
        }

        
$realpath $splFileInfo->getRealPath();

        if (
$realpath === false) {
            throw new 
FileNotReadableException('Failed to read file "' $path '" from ' SplFileInfo::class);
        }

        return 
$realpath;
    }
}
Онлайн: 1
Реклама