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