我正在使用此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";
    }

它在我的dev-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>

我的浏览器从echos返回:
Upload: rere.csv
Type: application/vnd.ms-excel
Size: 2.34375 kB
Temp file: /tmp/php5XXT5v
Stored in: csv/rere.csv

我有一个更熟悉Linux的朋友看了这个,他写了一些上传脚本。我们找不到解决办法。
有什么线索吗?

最佳答案

如果脚本不返回“无效文件”,则可能返回权限。在生产环境中不要执行777chmod,但您必须确保目标文件夹是可写的,并且可以使用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数据组。
命令:useradd -G www-data users
但是,如果使用其他用户创建目录或文件,而不是使用www数据,则可能会遇到一些问题。因为组不会设置为www data,而是设置为用户组的。在这种情况下,必须设置acl权限。如果是这种情况,请告诉我,我将帮助您设置acl:)

关于php - PHP上传文件代码可在Windows XAMPP上使用,但不能在生产Linux盒上使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21919403/

10-12 14:27
查看更多