我正在网站上工作,我希望用户能够上传文件。所以我正在努力学习如何做到这一点。我研究过,它说我必须使用函数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>
答案 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)
如果文件没有移动,则可能是由于多种原因
> 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
答案 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);