繁体   English   中英

Move_uploaded_file() function 不工作

[英]Move_uploaded_file() function is not working

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

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

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

尝试使用copy()函数而不是move_uploaded_file() 它为我工作

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

这是一个工作示例。

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>";
?>
$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。 此外,还会发出警告。

查看函数的返回值。

而已。

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

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

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

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

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

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

试试这个

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

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

使用tmp_name访问该文件。

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

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

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

它应该像这样

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

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

如果您在 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。

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

  • 检查上传目录的权限,确保其权限至少为 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

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

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

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

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

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

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

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

对我来说,php.ini "upload_max_filesize" 太小了(现在更新了,可以用了)。

如果您正在处理大于 6 的 centos,您可以检查 sestatus....

如果 setenforce 是“强制执行”,这可能会对 PHP function 产生影响,请尝试使用类似 is_writeable('upload_dir'); 检查它是否是一个写权限问题,你可以编辑 sestatus >

setenforce 许可

就像我说的,这是许多可能的情况之一。

上传文件的最简单方法

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM