警告:ftp_get():删除操作成功

2024-03-07

我有一些从我们的开发服务器传输备份的代码,它似乎随机表现得非常奇怪,并给出以下错误/输出:

Warning: ftp_get(): Delete operation successful. in /root/cron/get_dev_archives.php on line 106
ERR blahjob: Failed to get file: 2013-09-25_18-22-04-blahjob_dev18.tgz
PHP Warning:  ftp_get(): Delete operation successful. in /root/cron/get_dev_archives.php on line 106

Warning: ftp_get(): Delete operation successful. in /root/cron/get_dev_archives.php on line 106
ERR blahjob: Failed to get file: 2013-09-25_18-22-37-blahjob_dev19.tgz
PHP Warning:  ftp_get(): Delete operation successful. in /root/cron/get_dev_archives.php on line 106

Warning: ftp_get(): Delete operation successful. in /root/cron/get_dev_archives.php on line 106
ERR blahjob: Failed to get file: 2013-09-25_18-23-05-blahjob_dev5.tgz
PHP Warning:  ftp_get(): Delete operation successful. in /root/cron/get_dev_archives.php on line 106

Warning: ftp_get(): Delete operation successful. in /root/cron/get_dev_archives.php on line 106
ERR blahjob: Failed to get file: 2013-09-25_18-23-37-blahjob_dev33.tgz

我一点也不知道删除与什么有关ftp_get(),或者为什么它会返回false并对另一次操作的成功发出警告。谷歌也没有帮助发现任何类似的问题。

有问题的代码:

// ftp connection established, file list acquired, yadda yadda
foreach( $targets as $target ) {
    $localfile = $backup_dir . $target;
    if( file_exists($localfile) ) {
        do_log($task['name'], "Local file ".$target." already exists, skipping.", 1);
        continue;
    }
    if( ! ftp_get($conn, $localfile, $target, FTP_BINARY) ) { // line 106
        do_log($task['name'], "Failed to get file: ".$target, 2);
    } else {
        do_log($task['name'], "Got file: ".$target);
        ftp_delete($conn, $target);
    }
}

在我看来,你遇到了一个奇怪的 PHP 错误。

The Delete operation successful.不是 PHP 错误消息,它是成功删除 (DELE) 命令的 FTP 服务器响应消息。

经过对 PHP 源代码的分析,我能找到的对这个问题的唯一解释是ftp_get函数失败,但没有从 FTP 服务器收到错误消息,因此它显示上一个执行的命令的 FTP 服务器响应,在本例中,该命令是删除命令。

PHP FTP 函数将 FTP 服务器响应文本存储在输入缓冲区字段 https://github.com/frice2014/php_source/blob/master/ext/ftp/ftp.h#L63 of the ftpbuf结构:

typedef struct ftpbuf {
    ...
    char        inbuf[FTP_BUFSIZE]; /* last response text */
    ...
}

然后将该字段用于ftp_get 函数 https://github.com/frice2014/php_source/blob/master/ext/ftp/php_ftp.c#L902显示警告消息:

if (!ftp_get(ftp, outstream, remote, xtype, resumepos TSRMLS_CC)) {
    php_stream_close(outstream);
    VCWD_UNLINK(local);
    php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ftp->inbuf);
    RETURN_FALSE;
}

The ftp->inbuf字段由ftp_getresp fnc https://github.com/frice2014/php_source/blob/master/ext/ftp/ftp.c#L1194,但可能由于某些不明原因,低水平ftp_get 函数 https://github.com/frice2014/php_source/blob/master/ext/ftp/ftp.c#L788失败而没有调用ftp_getresp函数,因此显示误导性的错误消息。
也许 FTP 服务器错误日志可以提供一些有关真正问题所在的线索,但如果没有进一步的信息,确实很难说why您遇到了这个问题,甚至提出了解决方法。

我唯一的建议是针对不同的 FTP 服务器测试您的代码(如果可能),然后最终将您的 PHP 升级到较新的版本。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

警告:ftp_get():删除操作成功 的相关文章

随机推荐

  • 如何在行号视图中激活修订信息

    我知道 Eclipse 有一个功能可以显示行号视图中一行的最后更改的修订信息 渐变着色 更多信息 如修订号 日期和鼠标悬停时的作者 有谁知道如何默认激活文件的此功能 甚至更好 我最近不小心点击了一些快捷方式 使其显示在一个文件中 但它不会显
  • Safari 模糊了奇怪的错误

    我目前正在重新设计我的一个网站 我使用 CSS 模糊滤镜 blur blur 5px webkit filter blur 5px 和一些 CSS 动画 animate blur transition 0 45s all ease out
  • 在 PowerShell 窗口中运行应用程序

    我正在尝试放弃命令提示符 因为它是一个死胡同 转向 PowerShell ISE 我还没有弄清楚如何在 PowerShell ISE 窗口中运行命令行应用程序 每次我使用 开始进程 时 都会出现 然后消失 命令提示符窗口 我看到有些人建议
  • Pig - 如何迭代一袋地图

    让我解释一下这个问题 我有这行代码 u FOREACH persons GENERATE FLATTEN 0 experiences as j dump u 产生以下输出 id 1 date begin 12 2012 descriptio
  • 使用 Java 注解限制方法的执行

    您知道是否可以检查谁在调用某个方法并限制他们是否可以使用 Java 注解执行该方法 例如 如果您有一个客户端和一个服务器 有多个用户 他们具有不同的角色 他们登录到客户端 然后 同一个客户端 不同的用户想要调用服务器上的 getMethod
  • 如何检查 wifi 中的互联网是否可用(尽管 Wifi 已连接)[重复]

    这个问题在这里已经有答案了 我用这个代码来检查互联网是否可用 ConnectivityManager connectivity ConnectivityManager context getSystemService Context CON
  • 是否有 JVM 模拟器/字节码执行可视化工具?

    我正在寻找一个可视化工具 它可以帮助解释 Java 字节码如何与操作数堆栈和局部变量交互 有吗 None
  • 随机数生成中的种子是什么意思?

    虽然我在谷歌中提到了种子的含义 但我无法得到我想要的确切答案 有人可以用例子解释吗 它是随机数生成器的随机数序列基础的初始值 如果您为两个随机数生成器提供相同的值 它们将产生相同的数字序列 这对于测试目的很有用 在生产中 您通常会为随机数生
  • 将相机应用程序旋转复制到横向 IOS 6 iPhone

    您好 我正在尝试复制当方向转变为横向时可以在相机应用程序中看到的相同旋转 不幸的是我没有运气 我需要使用 UIImagePickerController 为自定义cameraOverlayView 进行设置 从这张肖像来看 B 是 UIBu
  • JIRA JQL:当前冲刺中解决的问题

    我希望能够过滤当前冲刺中已解决的问题 一般来说 这将用于防止在我们讨论开发人员在本次冲刺中实现了什么时出现在上一个冲刺中已解决但测试延迟 未重新开放 的问题 已关闭的问题也应该出现 但它们不是问题 就好像它们在上一个冲刺中被关闭一样 无论如
  • 版本解决了使用新的 Flutter 2.2.2 版本为 Riverpod 运行“flutter pub get”失败的问题

    我尝试用以前的版本替换 Riverpod 的版本 但没有任何效果 我还尝试删除 pubspec lock 文件 运行 flutter clean 命令等 但没有任何效果 如果使用 flutter 2 2 2 的人能够使用 Riverpod
  • ScalaTest 运行时出现 Scala Play Slick RejectedExecutionException

    我的 FlatSpec 测试抛出 java util concurrent RejectedExecutionException Task slick backend DatabaseComponent DatabaseDef anon 2
  • ZXing PDF417 + ALL_CODE_TYPES

    使用 ZXing 在 Android 上 如果您像这样启动 PDF417 条形码扫描 List
  • 无滴答内核、isolcpus、nohz_full 和 rcu_nocbs

    我在 grub conf 中添加了 isolcpus 3 nohz full 3 rcu nocbs 3 RedHat 7 1 内核 linux 3 10 0 229 内核并根据http www breakage org 2013 11 1
  • 为什么更喜欢 std::vector 而不是 std::deque? [复制]

    这个问题在这里已经有答案了 它们的访问复杂度均为 O 1 随机插入 删除复杂度为 O n 但是由于重新分配和复制 向量在扩展时成本更高 而双端队列则没有这个问题 看起来deque的性能更好 但是为什么大多数人使用vector而不是deque
  • Apple Music Kit - 为店面 B 的用户播放店面 A 中具有用户 ID 的歌曲

    如果我在美国并且想播放两门电影俱乐部的歌曲 Sun 我会使用 ID544390857 我可以在 例如 中执行此操作systemMusicPlayerApple Music 中开始播放该歌曲 如果我的朋友在英国并且想要播放同一首歌 请发送54
  • Reporting Services 图表 - 自定义轴标签

    我有一个 SQL Server Reporting Services 2008 图表 错误图表 X 轴的日期间隔为 1 1 2009 2 1 2009 等 Y 轴的数字间隔为 50 Y 轴上的值为 0 50 和 100 但是 不显示 0 5
  • UIImageView更改宽度和高度

    我读过这里提出类似问题的各种帖子 我尝试过发布的各种方法 包括边界和框架等 包括以下内容 myImage frame CGRectMake 0 0f 0 0f 50 0f 50 0f and myImage bounds CGRectMak
  • 如何停止 adb 端口转发?

    可以转发端口adb forward tcp 8080 tcp 8080 但是我需要终止 adb 服务器来停止此转发吗 我正在寻找一种方法来停止 adb 中端口的转发 在设置之后 但不再需要转发时 Try adb forward remove
  • 警告:ftp_get():删除操作成功

    我有一些从我们的开发服务器传输备份的代码 它似乎随机表现得非常奇怪 并给出以下错误 输出 Warning ftp get Delete operation successful in root cron get dev archives p