【问题标题】:PHP file upload fails when changing HTML input name更改 HTML 输入名称时 PHP 文件上传失败
【发布时间】:2018-05-09 12:58:12
【问题描述】:

我是 HTML 和 PHP 新手。我使用来自https://gist.github.com/taterbase/2688850 的html/php 代码在我的网络服务器上实现文件上传页面。在服务器中创建“uploads/”文件夹并授予 chmod 777 权限。

当我使用 name="uploaded_file" 时它工作正常,我可以在文件夹中看到文件。但是,当我将 name="xxx" 更改为其他名称(例如另一个名称或其数组形式)时,它会失败,屏幕上没有消息,上传文件夹中看不到文件。

“uploaded_file”是一种修复还是硬编码的值?我的目标是稍后使用一个数组来代替多个文件上传,但是这个名称更改限制不允许我这样做。

请参阅下面的工作和不工作示例:

upload.php (name="uploaded_file") 有效

<!DOCTYPE html>
<html>
<head>
  <title>Upload your files</title>
</head>
<body>
  <form enctype="multipart/form-data" action="upload.php" method="POST">
    <p>Upload your file</p>
    <input type="file" name="uploaded_file"></input><br />
    <input type="submit" value="Upload"></input>
  </form>
</body>
</html>
<?PHP
  if(!empty($_FILES['uploaded_file']))
  {
    $path = "uploads/";
    $path = $path . basename( $_FILES['uploaded_file']['name']);
    if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $path)) {
      echo "The file ".  basename( $_FILES['uploaded_file']['name']). 
      " has been uploaded";
    } else{
        echo "There was an error uploading the file, please try again!";
    }
  }
?>

upload.php (name="user_file") 不起作用

<!DOCTYPE html>
<html>
<head>
  <title>Upload your files</title>
</head>
<body>
  <form enctype="multipart/form-data" action="upload.php" method="POST">
    <p>Upload your file</p>
    <input type="file" name="user_file"></input><br />
    <input type="submit" value="Upload"></input>
  </form>
</body>
</html>
<?PHP
  if(!empty($_FILES['user_file']))
  {
    $path = "uploads/";
    $path = $path . basename( $_FILES['user_file']['name']);
    if(move_user_file($_FILES['user_file']['tmp_name'], $path)) {
      echo "The file ".  basename( $_FILES['user_file']['name']). 
      " has been uploaded";
    } else{
        echo "There was an error uploading the file, please try again!";
    }
  }
?>

【问题讨论】:

  • 您是否碰巧在s/uploaded_file/user_file 上进行了全局搜索/替换?
  • 哦,是的,我做到了,这也改变了内置函数的名称,对吧? :) 谢谢指点

标签: php html file-upload


【解决方案1】:

这行有问题move_user_file($_FILES['user_file']['tmp_name'], $path)

php 的bool move_uploaded_file ( string $filename , string $destination ) 将上传的文件移动到所需的位置。 它是 php 的 API 中的内置函数

你的代码应该改成

move_uploaded_file($_FILES['user_file']['tmp_name'], $path)

为了让它工作。

我认为您的误解来自您的命名。以前您的字段名称为uploaded_file,函数名称为move_uploaded_file()。所以你一定想到了,当你的字段名是user_file时,你应该在php.ini中调用move_user_file()。这有点创造性思维..:D

“uploaded_file”是一种修复还是硬编码的值?好吧,你需要阅读给出的链接。

【讨论】:

    【解决方案2】:

    您正在将核心函数调用更改为未定义函数或用户定义函数。

    如果你定义了一个函数move_user_file(),那么就ok了。

    但是,如果您期望一个核心 PHP 内置函数,那么没有函数 move_user_file()

    线路好像有问题:

    if(move_user_file($_FILES['user_file']['tmp_name'], $path)) {
    

    应该是:

    if(move_uploaded_file($_FILES['user_file']['tmp_name'], $path)) {
    

    你最终调用了一个未定义的函数move_user_file()

    需要的函数是:move_uploaded_file()

    【讨论】:

      【解决方案3】:

      不是 move_user_file,而是 move_uploaded_file。下次,学习如何正确使用编辑器的查找和替换;o)

      【讨论】:

        猜你喜欢
        • 2017-06-12
        • 1970-01-01
        • 2018-01-21
        • 2020-01-15
        • 1970-01-01
        • 2020-11-02
        • 2018-09-13
        • 1970-01-01
        • 2013-03-12
        相关资源
        最近更新 更多