文件上传不能在PHP中工作

时间:2014-12-21 23:41:24

标签: php html forms

我是PHP的新手,我正在尝试创建一个页面来上传jpeg文件。网页似乎运行正常,看起来文件正在上传,但文件没有出现在服务器上。你能提供的任何帮助都会很棒。

PHP代码是:

<?php
    $target_dir="/var/www/html/";
    $fileName=$_FILES['file']['name'];
    $target_file=$target_dir . basename($fileName);
    $imageFileType=pathinfo($target_file,PATHINFO_EXTENSION);
    $fileTempName=$_FILES["file"]["tmp_name"];
    $fileType=$_FILES["file"]["type"];
    $fileSize=$_FILES["file"]["size"];
    $fileError=$_FILES["file"]["error"];
    if(($fileType=="image/jpeg")&&($fileSize<100000)){
            if($fileError>0){
                    echo "Return Code: " . $fileError . "<br />";
            }
            else{
                    echo "Upload: " .$fileName . "<br />";
                    echo "Type: " . $fileType . "<br />";
                    echo "Size: " . ($fileSize / 1024) . " kb<br />";
                    echo "Temp file: " . $fileTempName . "<br />";
            if (file_exists($fileName)){
                    unlink($fileName);
            }
            move_uploaded_file($fileTempName,$target_file);
            echo "<br><br>File Temp Name: " .$fileTempName."\r\n <br>";
            echo "Uploaded file stored as : " .$target_file ."<br><br>";
            }       
    }
    else{
            echo "File is not a JPEG or too big.";
    }
?>

HTML代码如下:

 <html>
       <body>
       <form action="save2web.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="Upload"/>
       </form>
       </body>
       </html>

3 个答案:

答案 0 :(得分:1)

问题在于,您根本不检查move_uploaded_file()的返回值。但看起来,您在主机上运行脚本,并且由于大多数主机不允许相对路径,因此您最好提供绝对路径。

所以试试,替换:

$target_dir = "/var/www/html/"; // <- This is relative, which might be blocked due to security reasons

$target_dir = dirname(__FILE__) . "/var/www/html/"; // dirname(__FILE__) is a path to root

然后,确保文件已上传:

if (!move_uploaded_file(...)) {
  // error
}

答案 1 :(得分:0)

像这样更改目标目录。在目录名称前添加。(点)。

$target_directory = './var/www/html';

答案 2 :(得分:0)

假设您的服务器是路径中的linux,您可能需要更改您尝试上传到的文件夹的权限,尝试将文件夹所有者更改为www-data,这为我解决了同样的问题。