PHP文件上传头疼

时间:2010-10-14 13:42:29

标签: php file upload

我很难通过PHP上传文件。

我的表格:

<form action="blah.php" enctype="multipart/form-data" method="post">
<p> Upload file: <input type="file" name="xmlfile"/>
<input type="submit" name="upload_submit" value="Upload" /> </p>
</form>

清单:

  • 看不到'聪明'的引用。细

  • 正确的enctype。细

  • 输入标记中的名称属性。细

  • 我的/tmp目录具有以下权限:drwxrwxrwt。细

  • post_max_size = 50M,upload_max_filesize = 50M,file_uploads = On。细

print_r($_FILES)给出Array()。无用。尝试使用图像,xml文件等。没有任何作用。

我还不明白的是,有些页面上的文件上传工作在同一台服务器上。与我能收集到的唯一不同的是,我正在处理的页面有一些不属于enctype="multipart/form-data"的其他形式。这有关系吗?

请求的PHP代码:

if($_SERVER['REQUEST_METHOD'] == 'POST'){
    if(isset($_POST['upload_submit'])){
        print_r($_FILES);
        exit();

        ...
    }
}

无论print_r的位置如何,都会给出一个空数组;我也在if($_SERVER['REQUEST_METHOD'] == 'POST'){

之后试了一下

3 个答案:

答案 0 :(得分:0)

您确定要提交正确的表格,还是在正确的位置/脚本处理提交的数据?请提供一些PHP代码。

答案 1 :(得分:0)

你的,这个php脚本(如blah.php)

编辑进行调试,转储$_POST iffalse

error_reporting(E_STRICT);
ini_set('display_errors', 'on');

if(array_key_exists('xmlfile', $_FILES)) {
   echo 'file ' , $_FILES['xmlfile']['name'] , ' recieved';
   echo '<pre>'
      , print_r($_POST, true)
      , print_r($_FILES, true)
      , '</pre>';
} else {
   echo '<pre>'
      , print_r($_POST, true)
      , '</pre>';
} 

(可能)输出:

file rapid-gui-development-with-qtruby_p1_4.mobi recieved
Array
(
    [upload_submit] => Upload
)
Array
(
    [xmlfile] => Array
        (
            [name] => rapid-gui-development-with-qtruby_p1_4.mobi
            [type] => application/octet-stream
            [tmp_name] => /private/tmp/phpEyV3vy
            [error] => 0
            [size] => 556846
        )

)

答案 2 :(得分:0)

你提到在页面上有其他表格......是否正确关闭?例如,如果你有:

<form method="post">
    blah blah blah
    <input type="submit" />
<!-- oops forgot to </form> here -->
<form method="post" enctype="multipart/form-data">
    ...
    <input type="submit" />
</form>

然后,FIRST <form>标记可以在没有设置enctype的情况下获得优先权和提交。

如果你使用的是Firefox,我建议使用Firebug / HTTPFox / LiveHTTPHeaders(所有可用于FF的附加组件库)来查看通过网络发送的内容,并通过验证器运行页面以确保有没有愚蠢的HTML错误造成这种情况。