【问题标题】:Unable to POST the same file more than once无法多次发布同一个文件
【发布时间】:2018-02-26 01:59:10
【问题描述】:

希望有一个简单的改变(或被忽略的东西)。 我们将 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 中,如果我以 form-data(包括文件)的形式向“somefile.up.php”发送 POST 请求,那么我第一次在 PHP 端单击 Postman 中的“发送”时,如果我print_r 在 $_POST 和 $_FILES 数组上,我可以看到所有预期的数组键和值,包括 $_FILES。

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

我检查了文件(临时)发送到的位置,通常$_FILES['keyname']['tmp_name'] 的值是/tmp/php...,当文件到达时 [error] 值是 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:通过更新代码解决了从服务器发送文件到服务器的问题。该代码在文件名前使用了非常古老的“at 符号”来获取其内容。根据建议更新代码 forget-the-at-use-curl-file-create 。因此,此时需要对 Postman Standalone 应用程序进行故障排除。

【问题讨论】:

  • 也许某处有一个配置可以防止在给定时间内重复请求?只是一个想法......
  • 可能是权限问题!
  • 感谢@ArashKiani,但我不认为这是基于权限的。我可以从 babun shell 一次又一次地发送相同的文件,但在 Postman 中它只能工作一次,除非我删除“文件”参数并重试。

标签: php apache postman


【解决方案1】:

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

我还没有找到答案,也许在独立的 Postman 应用程序中有更多的控件或设置需要处理。

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

感谢阅读。

【讨论】:

    猜你喜欢
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    • 2023-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多