2016-12-16 52 views
1

试图获取文件上传在我的服务器上运行。 文件上传失败。到目前为止我所做的:
我指定了临时目录(/ var/tmp/aptemp。)。我将所有权分配给www-data,以便Web服务器可以写入它。我也在php.ini中设置了它,并在phpinfo()中进行了检查。到目前为止这么好(我认为)。上传文件未到达目标文件夹

我在表单提交后看到$ _FILES中的文件,但该文件没有将其添加到/ uploads文件夹中。

下面是对文件夹的权限:

drwxr-xr-x 2 www-data  forexamplejohn 4096 Dec 16 10:52 aptemp 

这里上传脚本:

<?php 
$target_dir = "uploads/"; 
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); 
$uploadOk = 1; 
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION); 
// Check if image file is a actual image or fake image 
if(isset($_POST["submit"])) { 
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]); 
    if($check !== false) { 
     echo "File is an image - " . $check["mime"] . "."; 
     $uploadOk = 1; 
    } else { 
     echo "File is not an image."; 
     $uploadOk = 0; 
    } 
} 
// Check if file already exists 
if (file_exists($target_file)) { 
    echo "Sorry, file already exists."; 
    $uploadOk = 0; 
} 
// Check file size 
if ($_FILES["fileToUpload"]["size"] > 500000) { 
    echo "Sorry, your file is too large."; 
    $uploadOk = 0; 
} 
// Allow certain file formats 
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" 
&& $imageFileType != "gif") { 
    echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; 
    $uploadOk = 0; 
} 
// Check if $uploadOk is set to 0 by an error 
if ($uploadOk == 0) { 
    echo "Sorry, your file was not uploaded."; 
// if everything is ok, try to upload file 
} else { 
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) { 
     echo "The file ". basename($_FILES["fileToUpload"]["name"]). " has been uploaded."; 
    } else { 
     echo " Sorry, there was an error uploading your file."; 
    } 
} 
var_dump($_FILES); 
?> 

这里是形式:

<!DOCTYPE html> 
<html> 
<body> 

<form action="upload.php" method="post" enctype="multipart/form-data"> 
    Select image to upload: 
    <input type="file" name="fileToUpload" id="fileToUpload"> 
    <input type="submit" value="Upload Image" name="submit"> 
</form> 

</body> 
</html> 

这里后输出尝试失败:

File is an image - image/png. Sorry, there was an error uploading your file. 
array (size=1) 
    'fileToUpload' => 
    array (size=5) 
     'name' => string '1ERJFa2kBsjhxssQb6gdhu9AtwYQwA7Xhd.png' (length=38) 
     'type' => string 'image/png' (length=9) 
     'tmp_name' => string '/var/tmp/aptemp/phpf2NewO' (length=25) 
     'error' => int 0 
     'size' => int 11063 
+1

http://stackoverflow.com/a/13841017/1415724 *“临时文件; PHP在成功上传后自行清理”*。如果临时文件保持堆叠状态,则意味着上传失败。 –

+0

好的,但是我应该在表单提交之前看不到临时文件吗? – user3738926

+0

这将是很难跟踪。 –

回答

1

move_uploaded_file()将返回false时:

一)的文件名尚未通过POST

b)该文件不能被复制到目标目录

它看起来您上传的b是这里最有可能是罪魁祸首。在这种情况下,还应该有一个警告in your server logs解释问题。检查目标目录的权限,并确认您已将SELinux/AppArmor配置为允许Web服务器写入目录。

+0

该文件通过邮件上传,如显示在表单和输出中。另外,我将权限更改为777,重新启动服务器,结果相同。很快会在这里检查日志。 – user3738926

+0

这是目标文件夹。现在改变所有权和上传工作。大声笑 – user3738926