使用 phpseclib 检查文件是否已经存在

Using phpseclib to check if file already exists

我正在尝试创建一个脚本,用于将文件从一台服务器发送到另一台服务器。我的脚本成功地做到了这一点,并检查文件中是否包含某些内容。我的下一步是检查服务器上是否已经存在该文件;如果文件已经存在则不发送,如果文件不存在则发送。
我尝试了一些不同的东西,但似乎无法理解它。我怎样才能得到它来检查文件是否已经存在?任何帮助将不胜感激!
(我查看了一些类似的问题,但找不到与我的问题相关的任何内容。)

   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 内部服务器错误(非常无用)。我无法打开错误,因为它在多人使用的服务器上。
我还尝试将 file_exists 行更改为;

if (file_exists('test.txt'))

希望能奏效,但仍然没有奏效。
澄清一下,我正在将文件从远程服务器发送到我的本地服务器。

您的代码检查文件是否存在于您的本地服务器中,而不是远程服务器中。

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

您需要使用 sftp 对象签入远程服务器,例如

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

编辑:

在检查 file_exists() 函数之前添加 clearstatcache(),因为函数的结果会被缓存。 参考:file_exists

在第二个 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>';
            }
        }
    }
}