2010-02-04 188 views
1
<form enctype="multipart/form-data"> 

<input type="file" name="mp3" /> 
<input type="submit" /> 
</form> 

我试过上面的,发现var_dump($_FILES);总是空的。如何使用PHP上传.mp3文件?

它只适用于上传文本文件或图像。

UPDATE

我加入method="POST"它works.Why在这里有必要POST

+0

为了回答您的更新问题,你无法通过GET移动文件,这样的文件上传要求你指定你使用POST。 MP3文件可能会变得很大,所以请记住看看你的php.ini文件,并且可能调整MAX_POST_SIZE和UPLOAD_MAX_FILESIZE变量,以免意外阻塞较大的文件。 – Shane 2010-02-04 13:33:33

+0

我也了解到GET不能用来移动文件,但是背后的原因是什么? – user198729 2010-02-04 13:38:26

+0

@ user198729 GET通常不安全,因为它通过URL栏(www.domain.com?name=shane&bank_account=123456&mothers_maiden_name=doe)传递数据 - 在GET之前,无法对二进制数据执行任何操作(files = binary )但POST,因为它在幕后工作可以处理二进制数据。我希望这有助于! – Shane 2010-02-04 13:55:08

回答

4

您是否指定表单方法明确POST并尝试?

+0

为什么有必要? – user198729 2010-02-04 13:19:38

+0

+1我不知道当没有指定GET时,GET就是表单的默认方法。 – 2010-02-04 13:23:50

+0

必要的原因是@Pekka刚才所说的。 :) – 2010-02-04 13:31:08

5

MP3文件上传应该像任何其他文件上传一样工作,没有文件类型或扩展名的区别。

检查您的文件是否不大于允许的大小。

PHP manual on file uploads

PHP manual on file uploads: Common pitfalls

更新: @Adhip古普塔解决它。我认为GET似乎是FORM的默认方法,而不是POST。请点击此处:http://www.w3.org/TR/html401/interact/forms.html#h-17.13.1

此属性指定将使用哪种HTTP方法提交表单数据集。可能的(不区分大小写)值是“get”(默认值)和“post”。有关使用信息,请参阅表格提交部分。

+0

+1我敢说,MP3可能会比分发php.ini'upload_max_filesize'和/或'post_max_size' vars更大。 – 2010-02-04 13:12:13

+0

但是mp3完全没有发送,我在萤火虫中进行了验证。 – user198729 2010-02-04 13:15:14

+0

咦?真奇怪。它有多大?您是否尝试过按照Adhip Gupta的建议明确设置POST? – 2010-02-04 13:16:39

0

首先要检查的是文件的大小以及PHP.ini中最大上传大小的设置。

0

您的PHP代码没有错。而且PHP和网络服务器都不知道MP3文件和其他类型的内容之间的区别。

您是否检查过与尺寸无关的内容?

你知道浏览器和PHP之间没有其他的东西可以过滤吗?

您是否尝试过使用窃听(例如wireshark)来确认数据正在离开浏览器/进入服务器?

C.

0

也许你错过了MAX_FILE_SIZE应该包括在内。

<input type="hidden" name="MAX_FILE_SIZE" value="157286400" /> 

您还应该添加action="some.php"method="POST"<form>