51

我在一个网站上工作,我希望用户能够上传文件。所以我正在努力学习如何做到这一点。我研究了一下,它说我必须使用函数 move_uploaded_file()。我像在示例中一样编写代码(更改数据),但它不起作用。请帮助我,我是这些新手。这是我到目前为止所做的:

<!DOCTYPE html>
<html>
   <head>
   </head>
<body>
   <form action="upload_file.php" method="POST" enctype="multipart/form-data">
      <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
      <input type="file"name="file">
      <input type="submit">
   </form>
</body>
<html>

这是upload_file.php:

<!DOCTYPE html>
<html>
  <head>
  <head>
     <body>
        <?php
          $move = "/Users/George/Desktop/uploads/";
          echo $_FILES["file"]['name']."<br>";
          echo $_FILES["file"]['tmp_name']."<br>";
          echo $_FILES["file"]['size']."<br>";
          echo $_FILES['file']['error']."<br>";
          move_uploaded_file($_FILES['file']['name'], $move);
        ?>
     <body>
<html>
4

17 回答 17

61

该文件将存储在临时位置,因此请使用tmp_name而不是name

if (move_uploaded_file($_FILES['image']['tmp_name'], __DIR__.'/../../uploads/'. $_FILES["image"]['name'])) {
    echo "Uploaded";
} else {
   echo "File not uploaded";
}
于 2013-09-21T05:19:00.850 回答
28

尝试使用copy()function 而不是move_uploaded_file(). 它对我有用

copy($_FILES['file']['tmp_name'], $path);
于 2014-04-06T04:47:28.300 回答
22

这是一个工作示例。

HTML 表单:

<form enctype="multipart/form-data" action="upload.php" method="POST">
    <input type="hidden" name="MAX_FILE_SIZE" value="512000" />
    Send this file: <input name="userfile" type="file" />
    <input type="submit" value="Send File" />
</form>

PHP代码:

<?php        
    $uploaddir = '/var/www/uploads/';
    $uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

    echo "<p>";

    if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
        echo "File is valid, and was successfully uploaded.\n";
    } else {
        echo "Upload failed";
    }

    echo "</p>";
    echo '<pre>';
    echo 'Here is some more debugging info:';
    print_r($_FILES);
    print "</pre>";
?>
于 2013-09-21T05:20:16.043 回答
12
$move = "/Users/George/Desktop/uploads/".$_FILES['file']['name'];

那是一个。

move_uploaded_file($_FILES['file']['tmp_name'], $move);

那是两个。

检查uploads目录是否可写

那是三个。

返回值

成功时返回 TRUE。

如果 filename 不是有效的上传文件,则不会发生任何操作,并且 move_uploaded_file() 将返回 FALSE。

如果 filename 是有效的上传文件,但由于某种原因无法移动,则不会发生任何操作,并且 move_uploaded_file() 将返回 FALSE。此外,还会发出警告。

查看函数的返回值。

而已。

于 2013-09-21T05:26:17.937 回答
5

这个答案很晚,但它可能会帮助像它帮助我的人

只需确保您已授予用户对目标文件的权限

sudo chown -R www-data:www-data /Users/George/Desktop/uploads/

于 2019-03-24T15:23:15.923 回答
4

也许您需要为您的文件授予更多权限。

假设您的代码在 /var/www/my_project 下

尝试chmod -R 777 /var/www/my_project

于 2014-05-06T08:46:45.010 回答
4

您不是指保存文件的临时位置。

用于tmp_name访问文件。

您始终可以使用以下命令查看发布的内容:

echo "<pre>"; 
print_r($_FILES);

如果您看到此文件数组,您将对正在发生的事情有更好的理解和想法。

于 2013-09-21T06:06:21.910 回答
4

尝试这个

$ImageName = $_FILES['file']['name'];
$fileElementName = 'file';
$path = 'Users/George/Desktop/uploads/'; 
$location = $path . $_FILES['file']['name']; 
move_uploaded_file($_FILES['file']['tmp_name'], $location); 
于 2013-09-21T05:37:02.873 回答
2

它应该像这样

move_uploaded_file($_FILES['file']['tmp_name'], $move);

而且您不能将它移动到系统中的任何位置。您只能将其移动到您的项目目录中,该目录必须位于 htdocs 或 www 中,具体取决于您使用的 wampp 、lampp 或 vertrgo。

于 2013-09-21T05:20:18.720 回答
2

如果你在windows机器上,上传或写入指定文件夹路径不会有任何问题,除了语法错误。

但是对于 Linux 用户,即使没有可见的语法错误,也有解决此问题的方法。

首先,我假设您在 Linux 环境中使用它,并且您需要将一些内容上传到公共目录中的项目文件夹中。

即使您对项目文件夹具有写入和读取权限,最终用户也不会处理 PHP。它是并且可以由www-data用户或组处理。

所以为了让这个www-data获得访问首先输入;

sudo chgrp "www-data" your_project_folder

完成后,如果也没有对以下内容的写访问权;

sudo chown g+w your_project_folder

这将在 Linux 中发挥作用。

请不要说这是在 Linux 环境中完成的,运行 phpmyadmin 和 mysql。

于 2017-11-16T09:39:30.703 回答
1

如果文件没有移动,这可能是由于多种原因

  • 检查上传目录的权限,确保其权限至少为 0755。
> find * -type d -print0 | xargs -0 chmod 0755 # for directories find *
> -type f -print0 | xargs -0 chmod 0666 # for files
  • 确保上传目录所有者和组不是 root ,在这种情况下,您的脚本将无法在那里写入任何内容,因此请将其更改为 admin 或任何非 root 用户。
chown -R admin:admin public_html      # will restore permission to admin  for folder and files within it 
chown  admin:admin public_html      # will restore permission to admin  for folder only will skip files
  • 检查您的 tmp 目录是否可写,因此打开 php.ini 并检查 upload_tmp_dir = your temp directory path ,确保其可写。
  • 尝试copy功能而不是move_uploaded_file
于 2019-01-16T18:28:31.513 回答
1

我错过的错误是没有将“enctype=multipart/form-data”作为表单的元素。只是想提醒人们,因为这可能是你的错误

于 2020-03-03T14:27:42.490 回答
0

如果move_uploaded_file()对您不起作用并且您没有收到任何错误(例如在我的情况下),请确保您上传的文件/图像的大小不大于php.ini中的upload_max_filesize值。

我的本地主机上的upload_max_filesize值为 2MB,我无数次尝试上传 4MB 的图像,同时试图弄清楚move_uploaded_file()的问题是什么。

于 2020-12-16T07:57:06.637 回答
0

对我来说,php.ini "upload_max_filesize" 太小了(现在更新并且可以正常工作)。

于 2021-08-29T14:42:10.910 回答
0

始终为图像正确设置文件夹目录,否则图像将不会上传检查我的图像上传代码如果您仍然存在,请告诉我将帮助您

if (move_uploaded_file($_FILES['profile_picture']['tmp_name'],'../images/manager/'. 
    $_FILES["profile_picture"]['name'])) {
      echo "Uploaded";
} else {
      echo "File not uploaded";
}
于 2021-02-24T18:49:45.757 回答
0

move_uploaded_file($_FILES['file']['tmp_name'], $path) 移动文件,这意味着临时文件/缓冲区将从原始源中清除。move_uploaded_file()open_basedir感知的。但是,仅对to路径设置了限制,以允许移动上传的文件,其中from 路径可能与此类限制冲突。

copy($_FILES['file']['tmp_name'], $to_path) 当一个文件被复制时,复制意味着临时缓冲区(源)没有被清理。$to_path应该支持覆盖现有文件。

于 2021-03-01T13:25:57.127 回答
-1

上传文件的最简单方法

$FileName = $file_name;
$path = 'Users/Desktop/uploads/images'; 
$location = $path . $data['name']; 
move_uploaded_file($data['temp_name'],$location);
于 2019-10-21T06:16:36.743 回答