Move_uploaded_file()函数不起作用

时间:2013-09-21 05:16:07

标签: php file

我正在网站上工作,我希望用户能够上传文件。所以我正在努力学习如何做到这一点。我研究过,它说我必须使用函数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>

16 个答案:

答案 0 :(得分:43)

文件将存储在临时位置,使用 tmp_name 而不是名称

if (move_uploaded_file($_FILES['image']['tmp_name'], __DIR__.'/../../uploads/'. $_FILES["image"]['name'])) {
    echo "Uploaded";
} else {
   echo "File was not uploaded";
}

答案 1 :(得分:16)

这是一个有效的例子。

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>";

    ?>

答案 2 :(得分:15)

尝试使用copy()功能代替move_uploaded_file()。对我来说工作

copy($_FILES['file']['tmp_name'], $path);

答案 3 :(得分:7)

$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()将返回   假。此外,还会发出警告。

查看函数的返回值。

就是这样。

答案 4 :(得分:4)

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

假设您的代码位于/ var / www / my_project

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

答案 5 :(得分:3)

试试这个

$ImageName = $_FILES['file']['name'];
$fileElementName = 'file';
$path = 'Users/George/Desktop/uploads/'; 
$location = $path . $_FILES['file']['name']; 
move_uploaded_file($_FILES['file']['tmp_name'], $location); 

答案 6 :(得分:3)

您没有引用保存文件的临时位置

使用tmp_name访问该文件。

您可以随时查看使用以下内容发布的内容:

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

如果你看到这个文件数组,你将会更好地理解和了解正在发生的事情。

答案 7 :(得分:2)

它应该是这样的

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

你无法在你的系统中的任何地方移动它。你只能在项目目录中移动它,必须在htdocs或www取决于你使用wampp,lampp或vertrgo。

答案 8 :(得分:1)

如果您使用的是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。

答案 9 :(得分:1)

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

答案 10 :(得分:0)

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

  • 检查上载目录的权限,确保其权限至少为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 =您的临时目录路径,确保其可写。
  • 尝试使用copy函数代替move_uploaded_file

答案 11 :(得分:0)

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

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

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

答案 12 :(得分:0)

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

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

答案 13 :(得分:0)

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

if (move_uploaded_file($_FILES['profile_picture']['tmp_name'],'../images/manager/'. 
    $_FILES["profile_picture"]['name'])) {
      echo "Uploaded";
} else {
      echo "File not uploaded";
}

答案 14 :(得分: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 应支持覆盖现有文件。

答案 15 :(得分:-1)

升级文件的最简便方法

$FileName = $file_name;
$path = 'Users/Desktop/uploads/images'; 
$location = $path . $data['name']; 
move_uploaded_file($data['temp_name'],$location);