我正在使用此PHP上传CSV文件:
$mimes = array('application/vnd.ms-excel','text/plain','text/csv','text/tsv');
if ( in_array($_FILES['file']['type'],$mimes) && ($_FILES["file"]["size"] < 20000) )
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br>";
echo "Type: " . $_FILES["file"]["type"] . "<br>";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";
move_uploaded_file($_FILES["file"]["tmp_name"],
"csv/" . $_FILES["file"]["name"]);
echo "Stored in: " . "csv/" . $_FILES["file"]["name"];
}
}
else
{
echo "Invalid file";
}
它在我的开发XAMPP设置上完美运行。
当我在Linux机器上部署该站点时,它的行为就像文件上传成功但它不在所需的文件夹或tmp文件夹中。
我的表格是:
<form action="upload_file.php" method="post" enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="Submit">
</form>
我的浏览器从回声中返回:
Upload: rere.csv
Type: application/vnd.ms-excel
Size: 2.34375 kB
Temp file: /tmp/php5XXT5v
Stored in: csv/rere.csv
我有一个熟悉Linux的朋友看看这个,他写了一些上传脚本。我们无法找到解决方案。
任何提示?
答案 0 :(得分:1)
如果脚本没有返回“无效文件”,则可能是权限。不要在生产中执行777 chmod,但是您必须确保目标文件夹是可写的并且可以使用www-data(apache2 user)执行。
更改权限的命令是:
chown -R www-data:www-data path/to/writable/dir/
并使目录可以打开:
chmod -R 660 path/to/wrotable/dir/
chmod +x path/to/writable/dir/
修改强> 的
这取决于您的需求。基本上,您希望对此文件夹具有读/写访问权限的用户应添加到www-data组。
命令:useradd -G www-data users
但是,如果使用除www-data之外的其他用户创建目录或文件,则可能会遇到麻烦。因为该组不会设置为www-data,而是设置为您的用户组。在这种情况下,您必须设置acl权限。如果你在这种情况下,请告诉我,我会帮你设置acl:)
答案 1 :(得分:0)
你应该检查什么返回函数move_uploaded_file();
var_dump(move_uploaded_file($_FILES["file"]["tmp_name"]);
// if return false it can be something with permission on location folder where
// do you want to store file under linux
从手动php这个函数返回:
If filename is not a valid upload file,
then no action will occur, and move_uploaded_file() will return FALSE.
If filename is a valid upload file, but cannot be moved for some reason,
no action will occur, and move_uploaded_file() will return FALSE.
Additionally, a warning will be issued.
答案 2 :(得分:0)
对于使用XAMPP的Ubuntu 14.04,我也遇到上传问题但在使用sudo chmod -R 777 destination
修复后,它运行良好。
例如:
在我的Ubuntu 14.04 XAMPP中上传的临时文件夹是/ opt / lampp / temp /。如果我希望我的上传文件为/opt/lampp/temp/testupload
作为目标文件夹,那么我需要下面的配置。
转到临时文件夹
cd / opt / lampp / temp /
在/ opt / lampp / temp /
下创建'testupload'文件夹sudo mkdir testupload
更改权限777
sudo chmod -R 777 / opt / lampp / temp / testupload /
PHP代码
move_uploaded_file($ _ FILES [“file”] [“tmp_name”],“/ opt / lampp / temp / testupload /”。$ _FILES [“file”] [“name”])