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

使用phpseclib检查文件是否已存在,php,sftp,phpseclib,Php,Sftp,Phpseclib,我正在尝试创建一个脚本,该脚本将跨文件从一台服务器发送到另一台服务器。我的脚本成功地做到了这一点,并检查文件中是否有内容。我的下一步是检查服务器上是否已经存在该文件;如果文件已存在,则不发送;如果文件不存在,则发送。 我试过几种不同的方法,但似乎都没办法解决。如何让它检查文件是否已经存在?任何帮助都将不胜感激 (我看了一些类似的问题,但找不到与我的问题相关的任何具体问题。) 这返回了true(一个好的开始),但当我将其放入代码中时,我只得到一个500的内部服务器错误(非常没有帮助)。我无法打开错

我正在尝试创建一个脚本,该脚本将跨文件从一台服务器发送到另一台服务器。我的脚本成功地做到了这一点,并检查文件中是否有内容。我的下一步是检查服务器上是否已经存在该文件;如果文件已存在,则不发送;如果文件不存在,则发送。
我试过几种不同的方法,但似乎都没办法解决。如何让它检查文件是否已经存在?任何帮助都将不胜感激
(我看了一些类似的问题,但找不到与我的问题相关的任何具体问题。)

这返回了true(一个好的开始),但当我将其放入代码中时,我只得到一个500的内部服务器错误(非常没有帮助)。我无法打开错误,因为它位于多人使用的服务器上。
我还尝试将文件行更改为

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';
}
编辑:

在检查文件_exists()函数之前添加clearstatcache(),以缓存函数的结果。
请参阅:

在第二个
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>';
            }
        }
    }
}
require('constants.php');
$files=$sftp->nlist('out/');
foreach($files作为$file){
if(basename((字符串)$file)){
if(strpos($file,“.”)大于1){//检查文件
$filesize=$sftp->size('out/'.$file);//获取文件大小
如果($filesize>1){
如果(文件_存在('import/'.$file)){
echo$file.“已存在”;
}否则{
$sftp->get('out/'.$file,'import/'.$file);//发送文件
}
}否则{
echo$文件。'为空。
'; } } } }
请举例说明您迄今为止的尝试,包括您使用的代码,这可能有助于找到问题的答案。我在中添加了一些编辑以尝试和帮助。
phpseclib
在哪里发挥作用?问题或代码中没有提到它。这是使用的软件包,因此我可以使用SFTP“我不能打开错误,因为它在多人使用的服务器上。”如果您想调试PHP,这是必不可少的。您也可以在运行时打开错误报告:
ini\u集('error\u reporting',1);错误报告(E_全部)。这样,您应该看到一条错误消息,而不仅仅是浏览器的HTTP 500通知。该文件正在从远程服务器发送到我的本地服务器。对不起,如果这不清楚的话。好吧,现在我觉得很傻,这么简单的错误能做什么真是不可思议。我使用的Atom安装了门楣,但它的脾气非常暴躁,并不总是有效。尽管如此,您的编辑似乎工作,所以谢谢!
if($sftp->file_exists('import/'.$file)){
echo $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
                }
            } else {
                echo $file . ' is empty.</br>';
            }
        }
    }
}