PHP: проверка двух путей file_exists - PullRequest
0 голосов
/ 21 апреля 2020

Добрый день. Сегодня я создал следующий класс, который проверяет наличие файла (и отображает его) на соответствующем сервере в отношении входящей информации:

class partnermediation_abbyycontroller {

private $servers_dir = null;
private $application_id = null;

public function get_cont($pathToFile)
{
    $GetContentFile = file_get_contents($pathToFile);
        if ($GetContentFile[0]=='<')
            {
                header("Content-type:text/xml");
                $result = new DOMDocument();
                $result->loadXML($GetContentFile);
                echo $result->saveXML();
            }
        else 
            {
                header('Content-Type: text/plain;charset=utf8');
                echo $GetContentFile;
            }
}

public function __construct($parts)
    {
        switch ($parts[0]) {
            case 'prod': $this->servers_dir = "//srvap2082/C$/temp/"; break;
            case 'preprod': $this->servers_dir = "//srvap2027/C$/temp/"; break;
            case 'preprod_ft': $this->servers_dir = "//srvap2026/C$/temp/"; break;
            case 'test': $this->servers_dir = "//srvap2030/C$/temp/"; break;
        }

        switch ($parts[3]) {
            case 'close': $this->application_id=trim($parts[1]).'_beforeClose.xml'; break;
            case 'save': $this->application_id=trim($parts[1]).'_beforeSave.xml'; break;
            default: $this->application_id=trim($parts[1]).'_beforeSaveAndForward.xml'; break;
        }

        ($parts[2]=='Request')?$this->application_id=trim($parts[1]).'_afterRead.xml':$this->application_id;

        $pathToFile = $this->servers_dir.$this->application_id;


        if ($parts[0] == 'prod'){
            if (file_exists($pathToFile)){
                $this->get_cont($pathToFile);
            }
            else
            {
                $pathToFile = $this->servers_dir = "//srvap2087/C$/temp/".$this->application_id;
                if (file_exists($pathToFile)){
                    $this->get_cont($pathToFile);
                }
            }
        }
        else 
        {
            if (file_exists($pathToFile)){
                $this->get_cont($pathToFile);
            }
            else
            {
                echo 'File not found: '.$pathToFile.'';
            }
        }

    }}

Мой вопрос: как сделать код более адекватным? Я говорю о $ this-> get_cont ($ pathToFile); Подробнее c: Если сервер prod = case 'prod', мне нужно сначала проверить file_exists на одном сервере, а затем на другом. Если это не продукт, просто проверьте, есть ли файл на одном сервере. Я сделал это с помощью ififelseif и удаления кода в случае успеха в отдельной функции get_cont ... Как сделать код более рациональным и красивым? Спасибо.

...