Использование phpseclib для проверки, если файл уже существует - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь создать скрипт, который будет пересылать файлы с одного сервера на другой. Мой скрипт успешно это делает, а также проверяет, есть ли в файле что-то или нет. Мой следующий шаг - проверить, существует ли файл на сервере; если файл уже существует, он не отправляется, а если он не существует, он отправляет.
Я пробовал несколько разных вещей и, похоже, не могу обойти это. Как я могу получить его, чтобы проверить, существует ли файл уже или нет? Любая помощь будет оценена!
(Я посмотрел на некоторые похожие вопросы, но не смог найти ничего конкретного для моей проблемы.)

   require('constants.php');    
   $files = $sftp->nlist('out/');    
   foreach($files as $file) {    
     if(basename((string) $file)) {    
       if(strpos($file,".") > 1) { //Checks if file    
         $filesize = $sftp->size('out/'.$file); //gets filesize    
         if($filesize > 1){    
           if (file_exists('import/'.$file)){    
              echo $file.' already exists';
            }    
            else {
              $sftp->get('out/'.$file, 'import/'.$file); //Sends file over
             //$sftp->delete('out/'.$file); //Deletes file from out folder
            }    
            else {
              echo $file. ' is empty.</br>';
            }
          }
        }
      }
    }

РЕДАКТИРОВАТЬ: Чтобы попытаться заставить это работать, я написал следующее заявление if, чтобы увидеть, находил ли он файл test.php;

if (file_exists('test.txt')){
  echo 'True';
} else {
  echo 'False';
}

Это вернуло true (хорошее начало), но как только я вставил это в свой код, я просто получил 500 Internal Server Error (крайне бесполезно). Я не могу включить ошибки, так как это на сервере, который используют несколько человек.
Я также попытался изменить строку file_exists на;

if (file_exists('test.txt'))

в надежде, что это сработает, но все еще не сработает.
Просто чтобы уточнить, я отправляю файлы с удаленного сервера на мой локальный сервер.

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Отсутствует закрывающая фигурная скобка прямо перед вторым ключевым словом else.

Пожалуйста, попробуйте использовать редактор кода с правильной подсветкой синтаксиса и форматированием кода, чтобы обнаружить такие ошибки на лету, пока вы еще редактируете файл PHP.

Исправленный и отформатированный код:

require('constants.php');
$files = $sftp->nlist('out/');
foreach ($files as $file) {
    if (basename((string)$file)) {
        if (strpos($file, ".") > 1) { //Checks if file
            $filesize = $sftp->size('out/' . $file); //gets filesize
            if ($filesize > 1) {
                if (file_exists('import/' . $file)) {
                    echo $file . ' already exists';
                } else {
                    $sftp->get('out/' . $file, 'import/' . $file); //Sends file over
                }
            } else {
                echo $file . ' is empty.</br>';
            }
        }
    }
}
0 голосов
/ 29 августа 2018

Ваш код проверяет, существует ли файл на вашем локальном сервере, а не на удаленном сервере.

if (file_exists('import/'.$file)){    
echo $file.' already exists';
}    

Вам необходимо зарегистрироваться на удаленном сервере, используя объект sftp, например

if($sftp->file_exists('import/'.$file)){
echo $file.' already exists';
}

Edit:

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

...