首页 文章

无法多次 POST 同一个文件

提问于
浏览
2

希望有一个简单的改变(或忽略的东西)。我们将一个 PHP 应用程序从 Redhat 5.9 和 PHP 5.4.14 移植到:

PHP 5.6.33 (cli) (built: Jan 14 2018 08:26:10)
Red Hat Enterprise Linux Server release 6.9 (Santiago)

在这两种情况下,都是 Apache 2.2.23

我们有一个 API,允许特定的应用程序发送 POST 数据,有时还发送文件。 (我们在测试时使用 POSTMAN)。

在 Postman 中,如果我将 POST 请求作为form-data(包括文件)发送到“somefile.up.php”,那么我第一次点击 Postman 中的“发送”,在 PHP 端,如果我在$_POST 和$_FILES 数组上都print_r,我可以看到所有预期的数组键和值,包括$_FILES。

如果我在 Postman 中发送另一个 POST 请求,并且所有细节都相同,则$_FILES 数组为空(我只看到打印的$_POST vars)。看起来文件根本就不存在。有时唯一有用的是选择一个不同的文件进行上传(在 Postman 中)并再次发送请求,但那个文件只能发送一次。后续发送产生一个空的$_FILES 数组。

我已经检查了文件发送到的位置(暂时),通常$_FILES['keyname']['tmp_name']的值是/tmp/php...,文件到达时[7]的值是 0。我还可以看到文件的名称和类型,以及它的大小。我还检查了post_max_sizeupload_max_filesize的 php.ini 值,并且 post_max_size 大了 1 M.

当应用程序在 PHP 5.4.14 和 Redhat 5.9 下运行时,我们能够多次发送相同的文件

更新:如果我使用 shell(在这种情况下是 babun)执行操作,我可以每次都正确地发送文件。所以我的猜测是 Postman 内部正在发生的事情。这个问题大约 50%解决了我的问题,只是因为最初接收文件的脚本必须验证其内容,然后执行 Curl 帖子将其发送给另一台服务器。一旦尝试,该文件不会到达$_FILES 数组。

UPDATE2:通过更新代码解决从服务器到服务器问题的文件。代码使用文件名前面的旧“符号”来获取其内容。更新了每个建议的代码forget-the-at-use-curl-file-create。因此,此时需要对 Postman Standalone 应用程序进行故障排除。

1 回答

  • 0

    我觉得这个问题是在 Postman 独立应用程序中。我在他们的 github 问题跟踪器中看到了类似的东西,但它们是旧的问题,可追溯到 Postman 只是一个浏览器扩展。

    我还没有找到答案,也许在独立的邮递员应用程序中有更多的控件或设置。

    似乎命令行卷曲(有或没有文件)可以多次进行并且每次都可以工作。如果我在 Postman 应用程序中进行重复(相同)调用,它似乎有时会“挂起”并且在我单击“取消请求”按钮之前不会执行任何操作。如果我再等几秒钟,那就再好了。

    谢谢阅读。

相关问题