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

时间:2018-08-29 09:55:17

标签: php sftp phpseclib

我正在尝试创建一个脚本,该脚本将跨文件从一台服务器发送到另一台服务器。我的脚本成功执行了此操作,并检查了文件中是否包含某些内容。我的下一步是检查服务器上是否已经存在该文件。如果文件已经存在,则不发送;如果文件不存在,则发送。
我尝试了几种不同的方法,但似乎无法解决。如何获取文件是否已经存在?任何帮助将不胜感激!
(我看过一些类似的问题,但找不到与我的问题有关的任何东西。)

   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 :(得分:1)

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

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

答案 1 :(得分:1)

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