2011-04-17 118 views
2

我正在构建一个页面,允许将文件上传到服务器并进行排序。我知道这个代码即使在工作中也不适合实时生效,但这只是让机制工作的初稿,因为我对服务器端脚本很陌生。为什么PHP的move_uploaded_file()方法在我的脚本中返回false?

总之,这里的上传表单页面:

<html> 
<body> 
<?php include("header.php"); ?> 
<center> 
<h1>Please enter the details of the file you would like to upload:</h1><br/> 


    <table> 
    <tr> 
    <td align='center'> 
    <form action='uploader.php' method='POST' enctype='multipart/form-data'><b>Name:</b> </td> 
    <td align='left'><input type='text' name='name' maxlength='255' /> 
    </td> 
    </tr> 

    <tr> 
    <td align='center'><b>Description of file uploaded: </b> 
    </td> 
    <td align='left'><textarea name='description' rows='5' cols='20'></textarea> 
    </td> 
    </tr> 

    <tr> 
    <td align='center'><b>Category: </b> 
    </td> 

    <td align='left'> 
    <select name='category'> 
    <option value='1'>Agriculture</option> 
    <option value='2'>Sexual Health</option> 
    <option value='3'>Arithmetic</option> 
    <option value='4'>Technology</option> 
    <option value='5'>Reading/Literature</option> 
    <option value='6'>Health/Medicine</option> 
    </td> 
    </tr> 

    <tr> 
    <td align ='center' > 
    <b>File: </b> 
    </td> 
    <td align='left'> 
    <input type="hidden" name="MAX_FILE_SIZE" value="100000" /> 
    <Choose a file to upload: <input name="uploadedfile" type="file" /><br /> 
    </td> 
    </tr> 

    <tr height='20px'></tr> 

    <tr align ='left'> 
    <td> </td> 
    <td> 
    <input type='Submit' value='Upload File' /> 
    </td> 
    </tr> 
    </table> 

</center> 

<?php include("footer.php"); ?> 
</body> 
</html> 

和这里的操作页面uploader.php:

<?php 

$target_path = "./audio/"; 

$target_path = $target_path . basename($_FILES['uploadedfile']['name']); 

if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) { 
    echo "The file " . basename($_FILES['uploadedfile']['name']) . " has been uploaded"; 
} else{ 
    echo "There was an error uploading the file, please try again!"; 
} 

?> 

每当我试着测试,在我的本地(使用XAMPP)回声“上传文件时出错,请重试!”

而且每几次,它也说: “ 注意:未定义指数:UploadedFile的在C:\用户\保罗\桌面\ XAMPP \ htdocs中\ XAMPP \ uploader.php第5行”

但我做不到看不出这个说法有什么问题?是不是上传文件定义为我的表单中的文件的临时名称?

你能告诉我我在这里做错了吗?

非常感谢

+1

你的权限是什么样的? – Nick 2011-04-17 12:58:26

+0

该文件夹位于我的本地计算机上,并且文件夹似乎没有任何特殊限制。 – Paul 2011-04-17 13:05:09

+1

发生错误时,您可以使用$ _FILES ['uploadedfile'] ['error']并检查到底发生了什么(我的猜测是您将文件移至不存在的目录)。处理文件上传时,请咨询php.net如何解释错误消息。 – 2011-04-17 13:05:10

回答

1

问题是:您的HTML无效,导致form元素被提前关闭。

有没有</form>结束标签,所以它插入到一个适当的点,即

<td align='center'> 
    <form action='uploader.php' method='POST' enctype='multipart/form-data'> 
    <b>Name:</b> 
    </form> <!-- <- here --> 
</td> 

这样做,用的名字uploadedfile文件输入元素之外的形式,并永远不会被发送到uploader.php。要解决此问题,请将起始标记移动到table之外,在body末尾附近添加结束标记,并在Choose a file …之前删除<

还有其他一些验证错误,但我会留给你修复这些错误。下一次,请将您的HTML提供给W3C的validator(您可以使用Chris Pederick的Web Developer toolbar自动执行此操作)和/或查看Firebug's/Chrome的网络检查器并查看form元素(以及它包含的内容)。

+0

非常感谢你这是确实是这个问题!我只是认为这是PHP,因为我是那么新! 虽然有一件事...我一直在测试这个脚本,现在它的功能...当我上传.mp3文件时它仍然会导致错误。 我认为这只是一个尺寸问题,但即使是<1mb的音频文件也无法上传。 是'文件'应该包含音频? O.o – Paul 2011-04-17 16:19:02

+0

@Paul:那应该不会引起任何问题;我看到的唯一的事情就是您的粘贴代码包含最大文件大小规则<100,000字节(≠1 Mb)。如前所述,* always *检查文件数组的'error'部分的状态与http://www.php.net/manual/en/features.file-upload.errors.php上的值以及你会知道是否有东西(和*什么*)出错(例如'UPLOAD_ERR_FORM_SIZE')。 – 2011-04-17 16:23:45

1

你似乎是正确调用该函数,并在正确的环境中使用它。

至于文件资料方面有两个实例中,假可从move_uploaded_file函数返回:因为我们使用的tmp_name元素,我们可以假设这

If filename is not a valid upload file, then no action will occur, and move_uploaded_file() will return FALSE.

并非如此从我们的文件$_FILES阵列中。

If filename is a valid upload file, but cannot be moved for some reason, no action will occur, and move_uploaded_file() will return FALSE. Additionally, a warning will be issued.

所以它必须是与此捕获所有。我建议开启display_errors,以便我们看到生成的警告。

+1

我认为它在之前的地方出错了,因为错误'Undefined index:uploadedfile'in'$ _FILES'。 – 2011-04-17 13:12:38

+0

我得到的错误是:注意:未定义的索引:在C:\ Users \ Paul \ Desktop \ XAMPP \ htdocs \ xampp \ uploader.php上的第8行 注意:未定义的索引:在C:\ Users \ Paul \ Desktop \ XAMPP \ htdocs \ xampp \ uploader.php在线10 – Paul 2011-04-17 13:21:05

1

if ($_FILES['uploadedfile']['error'] != 0)会给你一个错误的可能原因。 看看http://www.php.net/manual/en/features.file-upload.errors.php的错误代码

+0

感谢您的输入,但这应该是一条评论。更重要的是,正如你上面看到的,我已经发布了一条关于这个消息的问题的评论(是的,我知道如果你的代表低于50,你不能发表评论他人的问题)。 – 2011-04-17 13:15:42

+0

嗯,当我这样做时,我得到一个额外的错误: 注意:未定义的变量:目标路径在C:\用户\保罗\桌面\ XAMPP \ htdocs \ xampp \ uploader.php在线10 – Paul 2011-04-17 13:34:01

相关问题