php - 为什么 PHP 的 move_uploaded_file() 方法在我的脚本中返回 false?

标签 php html file forms upload

我正在构建一个页面,允许将文件上传到服务器并进行排序。我知道这段代码,即使它可以工作,也不适合上线,这只是让机制工作的初稿,因为我对服务器端脚本相当陌生。

无论如何,这是上传表单页面:

<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:\Users\Paul\Desktop\XAMPP\htdocs\xampp\uploader.php 第 5 行“

但我不明白这个论点有什么问题? uploadedfile 不是被定义为我表单中文件的临时名称吗?

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

非常感谢

最佳答案

问题是:您的 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/Chrome 的 Web 检查器并查看 form元素(及其包含的内容)。

关于php - 为什么 PHP 的 move_uploaded_file() 方法在我的脚本中返回 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5693572/

相关文章:

php - DOM文档编码问题/字符转换

HTML/CSS 页脚问题

android - 从内部存储器读取图像android给出空指针异常

sql - Oracle 数据库创建目录

java - Android:ListView 仅显示共享首选项保存的最后一项

php - php上传文件到mysql

javascript - sku.tpl 在 opencart 中获取 $sku_images 的地方

HTML 特殊字符 ▼

html - WhatsApp Web 喜欢 Content Editable Div

php - 按日期顺序连接两个表并显示结果