[英]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。
如果文件没有移动,这可能是由于多种原因
> find * -type d -print0 | xargs -0 chmod 0755 # for directories find * > -type f -print0 | xargs -0 chmod 0666 # for files
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
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.