Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Проверка двух путей file_exists

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
malltaf
Отправлено: 21 Апреля, 2020 - 17:55:00
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Март 2014  


Помог: 0 раз(а)




Добрый день.
Сегодня создал следующий класс, который относительно поступающей информации проверяет наличие файла (и выводит его) на соответствующем сервере:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. class partnermediation_abbyycontroller {
  3.        
  4.         private $servers_dir = null;
  5.         private $application_id = null;
  6.        
  7.         public function get_cont($pathToFile)
  8.         {
  9.                 $GetContentFile = file_get_contents($pathToFile);
  10.                         if ($GetContentFile[0]=='<')
  11.                                 {
  12.                                         header("Content-type:text/xml");
  13.                                         $result = new DOMDocument();
  14.                                         $result->loadXML($GetContentFile);
  15.                                         echo $result->saveXML();
  16.                                 }
  17.                         else
  18.                                 {
  19.                                         header('Content-Type: text/plain;charset=utf8');
  20.                                         echo $GetContentFile;
  21.                                 }
  22.         }
  23.        
  24.         public function __construct($parts)
  25.                 {
  26.                         switch ($parts[0]) {
  27.                                 case 'prod': $this->servers_dir = "//srvap2082/C$/temp/"; break;
  28.                                 case 'preprod': $this->servers_dir = "//srvap2027/C$/temp/"; break;
  29.                                 case 'preprod_ft': $this->servers_dir = "//srvap2026/C$/temp/"; break;
  30.                                 case 'test': $this->servers_dir = "//srvap2030/C$/temp/"; break;
  31.                         }
  32.                        
  33.                         switch ($parts[3]) {
  34.                                 case 'close': $this->application_id=trim($parts[1]).'_beforeClose.xml'; break;
  35.                                 case 'save': $this->application_id=trim($parts[1]).'_beforeSave.xml'; break;
  36.                                 default: $this->application_id=trim($parts[1]).'_beforeSaveAndForward.xml'; break;
  37.                         }
  38.                        
  39.                         ($parts[2]=='Request')?$this->application_id=trim($parts[1]).'_afterRead.xml':$this->application_id;
  40.                                                                                                                
  41.                         $pathToFile = $this->servers_dir.$this->application_id;
  42.                        
  43.                        
  44.                         if ($parts[0] == 'prod'){
  45.                                 if (file_exists($pathToFile)){
  46.                                         $this->get_cont($pathToFile);
  47.                                 }
  48.                                 else
  49.                                 {
  50.                                         $pathToFile = $this->servers_dir = "//srvap2087/C$/temp/".$this->application_id;
  51.                                         if (file_exists($pathToFile)){
  52.                                                 $this->get_cont($pathToFile);
  53.                                         }
  54.                                 }
  55.                         }
  56.                         else
  57.                         {
  58.                                 if (file_exists($pathToFile)){
  59.                                         $this->get_cont($pathToFile);
  60.                                 }
  61.                                 else
  62.                                 {
  63.                                         echo 'File not found: '.$pathToFile.'';
  64.                                 }
  65.                         }
  66.                        
  67.                 }
  68. }
  69.  
  70. ?>


Мой вопрос заключается в том, как сделать код более адекватным? Я про $this->get_cont($pathToFile);
Более конкретно:
В случае, если сервер продовый = case 'prod', мне нужно проверить file_exists сначала на одном сервере, потом на другом. Если это не прод, просто проверить, есть ли файл на одном каком-то сервере. Сделал это через ififelseif и выносом кода в случае успеха в отдельную функцию get_cont... Как сделать код более рациональным и красивым?
Спасибо.
 
 Top
Мелкий Супермодератор
Отправлено: 21 Апреля, 2020 - 18:07:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Как у вас получилось что переменные окружения вовсе в коде класса захардкожены?
Это отдельно должно быть где-то в конфигурации.


-----
PostgreSQL DBA
 
 Top
malltaf
Отправлено: 21 Апреля, 2020 - 18:22:23
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Март 2014  


Помог: 0 раз(а)




Мелкий пишет:
Как у вас получилось что переменные окружения вовсе в коде класса захардкожены?
Это отдельно должно быть где-то в конфигурации.


Так вышло. Это не финальная версия, но проблема не в этом Улыбка
 
 Top
Мелкий Супермодератор
Отправлено: 21 Апреля, 2020 - 18:40:03
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Если проверять нужно в отсортированном списке мест - то и передайте из конфигурации отсортированный список мест. С точки зрения php - массивом или каким-либо другим итератором и обойдите их в цикле.


-----
PostgreSQL DBA
 
 Top
malltaf
Отправлено: 22 Апреля, 2020 - 16:37:26
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Март 2014  


Помог: 0 раз(а)




Мелкий пишет:
Если проверять нужно в отсортированном списке мест - то и передайте из конфигурации отсортированный список мест. С точки зрения php - массивом или каким-либо другим итератором и обойдите их в цикле.


Пока сделал так:
PHP:
скопировать код в буфер обмена
  1. case 'prod': $this->servers_dir = ["//srvap2082/C$/temp/","//srvap2087/C$/temp/"]; break;
  2. $pathToFile = $this->servers_dir[0].$this->application_id;
  3.  
  4.                         if ($parts[0] == 'prod'){
  5.                                 foreach ($this->servers_dir as $value){
  6.                                         $pathToFile = $value.$this->application_id;
  7.  
  8.                                         if (file_exists($pathToFile)){
  9.                                                 $this->get_cont($pathToFile);
  10.                                         }
  11.                                 }
  12.                         }
  13.                         else
  14.                         {
  15.                                 if (file_exists($pathToFile)){
  16.                                         $this->get_cont($pathToFile);
  17.                                 }
  18.                                 else
  19.                                 {
  20.                                         echo 'File not found: '.$pathToFile.'';
  21.                                 }
  22.                         }
  23.                        
  24.                 }
  25. }


Выглядит не сильно лучше - сделал массив вместо переменной. Пока не получается использовать foreach для всей конструкции вместо ifов. Не подскажете, как это лучше сделать?
 
 Top
LIME
Отправлено: 22 Апреля, 2020 - 17:01:13
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




malltaf пишет:
Не подскажете, как это лучше сделать?
тебе уже подсказали
делаешь разные конфиги для прод и для дев
кладешь в них разный servers_dir
$servers_dir = prod_data;

и как-то доставляешь это значение до класса
PHP:
скопировать код в буфер обмена
  1. public function __construct(array $servers_dir)
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB