如何通过wget post-file获取发送到php://输入的文件的名称

时间:2014-03-20 15:54:04

标签: php post

我编写了一个脚本,通过file_get_contents('php://input')接收图像文件并执行其他一些魔术。该文件是使用wget post-file=blahblah.blah命令从客户端发送的,并且一切正常。

我遇到的问题是我需要将收到的图像文件的名称用作字符串以便进行处理,file_get_contents()给出了文件的内容,但不是它的名称。 有谁知道我怎么能得到这个名字?

任何可以让我朝着正确方向前进的答案都会受到赞赏。

3 个答案:

答案 0 :(得分:2)

你做不到。 --post-file的{​​{1}}选项将文件内容作为原始POST请求发送;它不会将其视为文件上载,因此不会传输文件的名称。根据{{​​1}}手册页:

  

wget

     

wget

     

使用POST作为所有HTTP请求的方法并发送指定的   请求正文中的数据。 --post-data=string将字符串作为数据发送,   而--post-file=file发送文件的内容。除此之外,   他们以完全相同的方式工作。特别是,他们都期望   --post-data形式的内容,含百分比 -   特殊字符的编码;唯一的区别是那一个   期望其内容作为命令行参数和另一个   从文件中接受其内容。 特别是--post-file不是   用于将文件作为表单附件传输:这些必须显示为   "key1=value1&key2=value2"数据(具有适当的百分比编码)就像   其他一切。

答案 1 :(得分:1)

有很多方法可以获取文件名。我相信经典的方法是使用url参数(将你的文件POST到example.com/your-script.php?name=some-file-name-here),但另一种可能更简洁的方法是使用自定义http标头:' X-Filename:your-file-name'。

wget --header "X-Filename: your-file-name" --post-file /your/file

然后在PHP中检查标头(例如,使用apache_request_headers())。

答案 2 :(得分:0)

PHP有一个内置的超全局变量$_FILES,它的工作方式类似于$_POST

$_FILES['/*the html object name goes here*/']['name']

数组的['name']部分返回从html对象名称上传的文件的实际名称。

所以要澄清一下,如果你的html是<input type="file" name="screenshot" /> 你的PHP将是$name = $_FILE['screenshot']['name']

$name现在存储包含文件名的字符串。