【问题标题】:ftp_mkdir creates 2 foldersftp_mkdir 创建 2 个文件夹
【发布时间】:2013-11-17 18:39:31
【问题描述】:

我创建了这个简单的 PHP 脚本来将文件存储在使用时间戳创建的文件夹下,但该脚本创建了 2 个文件夹而不是一个。

$connection = ftp_connect($server);

$login = ftp_login($connection, $ftp_user_name, $ftp_user_pass);

if (!$connection || !$login) { die('Connection attempt failed!'); }

$timestamp = strtotime(date("Y-m-d H:i:s"));

ftp_mkdir($connection, $timestamp);

$upload = ftp_put($connection, "./".$timestamp."/".$dest, $source, FTP_BINARY );

if (!$upload) { echo 'FTP upload failed!'; }

ftp_close($connection);

感谢您的帮助。

【问题讨论】:

  • 尝试转义 $timestamp 变量中的空格。
  • 重新阅读您的问题,是否基于$timestamp 创建了两个不同名称的文件夹?还是创建一个以$timestamp 命名的文件夹,然后在其中嵌套另一个具有相同$timestamp 的文件夹?
  • 不,只是使用时间戳创建一个文件夹
  • 您能否编辑您的问题以向我们展示这两个文件夹是什么?

标签: php ftp directory timestamp


【解决方案1】:

由于您的目录命名逻辑使用时间戳,您可能会遇到系统在上传时仅运行您的 FTP 逻辑两次的情况?或类似的规定。因此,请尝试使用 ftp_chdir 将您的 ftp_mkdir 命令与目录检查逻辑包装起来,以便仅在目录不存在时创建目录:

if (!@ftp_chdir($connection, $timestamp)) {
  ftp_mkdir($connection, $timestamp);
}

所以整个事情现在会读作:

$connection = ftp_connect($server);

$login = ftp_login($connection, $ftp_user_name, $ftp_user_pass);

if (!$connection || !$login) { die('Connection attempt failed!'); }

$timestamp = strtotime(date("Y-m-d H:i:s"));

if (!@ftp_chdir($connection, $timestamp)) {
  ftp_mkdir($connection, $timestamp);
}

$upload = ftp_put($connection, "./".$timestamp."/".$dest, $source, FTP_BINARY );

if (!$upload) { echo 'FTP upload failed!'; }

ftp_close($connection);

编辑:另一个想法是只注释掉具有ftp_mkdir 的行,看看会发生什么:

# ftp_mkdir($connection, $timestamp);

【讨论】:

  • 我试过你的解决方案,但它继续创建 2 个文件夹,我只想要一个。它在一个文件夹中放置文件($source),而另一个是空的,我不知道为什么。
  • 根据此评论,如果您跳过整个 ftp_mkdir 并仅将其注释掉会怎样?
  • 然后创建任何文件夹
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-28
  • 1970-01-01
  • 2018-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多