上传的文件的tmp_name不存在

时间:2016-11-14 07:09:23

标签: php upload multipart

在最后一天试图解决这个问题时,我一直在争吵我的大脑。

基本上,$_FILES['logo']['tmp_name']中设置的临时文件不存在。

该文件显然已上传,如下面的print_r() $_FILES所示:

Array
(
    [logo] => Array
        (
            [name] => Channelcat.jpg
            [type] => image/jpeg
            [tmp_name] => /tmp/php26YfhY
            [error] => 0
            [size] => 152142
        )

)

我的/tmp目录上的文件权限显然是777.我怀疑这个问题可能与它使用的共享主机有关。

以下基本上是我尝试使用该文件。

$logo = $_FILES['logo'];

if($logo['size'] > (1024000)) {
    die('File size is too large.');
}

$path = __DIR__ . '/uploads/'. $logo['name'];

move_uploaded_file($logo['tmp_name'], $path);

我尝试使用is_uploaded_file($logo['tmp_name']),返回false,realpath($logo['tmp_name'])返回空字符串。

move_uploaded_file没有错误,但也没有将文件移动到指定的目录。

1 个答案:

答案 0 :(得分:0)

当您在 php.ini 文件中设置了一些 open_basedir 变量后,文件上传工作,$_FILE 数组被填充,甚至显示 tmp_name 子键,静止文件不会写入磁盘,这导致了令人费解的情况,因为 error 子键设置为 0 时不会报告进一步的错误。

解决方案是将临时文件夹设置为 open_basedir php.ini 变量内的某个子文件夹。