2012-04-24 59 views
1

所以我测试了w3schools网站http://www.w3schools.com/php/php_file_upload.asp的move_uploaded_file()php脚本。 这是我的代码。php move_uploaded_file()

if ($_FILES["file"]["size"] < 2000000) 
{ 
    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 />"; 

     if (file_exists("/var/www/upload/" . $_FILES["file"]["name"])) 
     { 
      echo $_FILES["file"]["name"] . " already exists. "; 
     } 
     elseif(move_uploaded_file($_FILES["file"]["tmp_name"], "/var/www/upload/".$fileName)) 
      echo "Stored in: " . "/var/www/upload/".$fileName; 
    } 
} 
else 
    echo "Invalid file"; 

问题是if(move_uploaded_file($_FILES["file"]["tmp_name"],"/var/www/upload/".$fileName))返回false所有的时间,但似乎该文件存储在服务器(例如:/tmp/php8rrKoW)上tmp文件夹。当我检查tmp文件夹时,该文件不存在。 (它应该在脚本执行完成后被删除。)我也没有看到/php8rrkoW文件夹。我不确定它是否应该在那里。我使用chmodtmp文件夹和/var/www/upload/的许可设置为777,但我不确定是否应该将所有者设置为apache。所以我想知道为什么该文件不会被复制到/var/www/upload以及是否有方法来测试。

+4

http://w3fools.com/ – Marty 2012-04-24 04:20:00

+0

你是否启用了error_reporting(E_ALL),你得到了什么错误? – 2012-04-24 04:37:14

+0

尝试使用'<?php file_put_contents('/ var/www/upload/test.txt','test');''请求'index.php'。您是否看到任何错误,并且文件是否成功创建? – Casey 2015-01-02 23:48:25

回答

0

看起来您应该使用./upload/而不是/ var/www/upload /,因为您已经在可访问的网站的主目录中。

您也可以参考http://www.tizag.com/phpT/fileupload.php 或API:http://php.net/manual/en/function.move-uploaded-file.php

让我知道是否可行

+0

我尝试了tizag的代码,并将其改为./upload,但我得到了“上传文件时出现错误,请重试!”。我不确定文件是否被转移到临时文件夹。 – user1352777 2012-04-24 05:12:05

1

这是一个基本的图像上传类我的另一个问题前些天,使用简单做,也许你觉得它很有趣。

<?php 
error_reporting(E_ALL); //Will help you debug a [server/path/permission] issue 
Class uploadHandler{ 
    public $upload_path; 
    public $full_path; 
    public $name; 
    public $size; 
    public $ext; 
    public $output; 
    public $input; 
    public $prefix; 
    private $allowed; 

    function upload(){ 
     if($_SERVER['REQUEST_METHOD'] == 'POST'){ 
      if(isset($_FILES[$this->input]['error'])){ 
       if($_FILES[$this->input]['error'] == 0){ 
        $this->name  = basename($_FILES[$this->input]['name']); 
        $file_p   = explode('.', $this->name); 
        $this->ext  = end($file_p); 
        $this->full_path = rtrim($this->upload_path,'/').'/'.preg_replace('/[^a-zA-Z0-9.-]/s', '_', $this->prefix.'_'.$file_p[0]).'.'.$this->ext; 
        $info   = getimagesize($_FILES[$this->input]['tmp_name']); 
        $this->size  = filesize($_FILES[$this->input]['tmp_name']); 

        if($info[0]>$this->allowed['dimensions']['width'] || $info[1] > $this->allowed['dimensions']['height']){ 
         $this->output = 'File dimensions too large!'; 
        }else{ 
         if($info[0] > 0 && $info[1] > 0 && in_array($info['mime'],$this->allowed['types'])){ 
          move_uploaded_file($_FILES[$this->input]['tmp_name'],$this->full_path); 
          $this->output = 'Upload success!'; 
         }else{ 
          $this->output = 'File not supported!'; 
         } 
        } 
       }else{ 
        if($_FILES[$this->input]['error']==1){$this->output = 'The uploaded file exceeds the upload_max_filesize directive!';} 
        if($_FILES[$this->input]['error']==2){$this->output = 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in our HTML form!';} 
        if($_FILES[$this->input]['error']==3){$this->output = 'The uploaded file was only partially uploaded!';} 
        if($_FILES[$this->input]['error']==4){$this->output = 'No file was uploaded!';} 
        if($_FILES[$this->input]['error']==6){$this->output = 'Missing a temporary folder!';} 
        if($_FILES[$this->input]['error']==7){$this->output = 'Failed to write uploaded file to disk!';} 
        if($_FILES[$this->input]['error']==8){$this->output = 'A PHP extension stopped the file upload!';} 
       } 
      } 
     } 
    } 

    function setPath($var){ 
     $this->upload_path = $var; 
    } 
    function setAllowed($var=array()){ 
     $this->allowed = $var; 
    } 
    function setFilePrefix($var){ 
     $this->prefix = preg_replace('/[^a-zA-Z0-9.-]/s', '_', $var); 
    } 
    function setInput($var){ 
     $this->input = $var; 
    } 

} 



//Start class 
$upload = new uploadHandler(); 
//Set path 
$upload->setPath('./'); 
//Prefix the file name 
$upload->setFilePrefix('user_uploads'); 
//Allowed types 
$upload->setAllowed(array('dimensions'=>array('width'=>200,'height'=>200), 
          'types'=>array('image/png','image/jpg','image/gif'))); 
//form property name     
$upload->setInput('myfile'); 
//Do upload 
$upload->upload(); 


//notice 
if(isset($upload->output)){ 
    echo $upload->output; 
} 
?> 

<form action="" method="POST" enctype="multipart/form-data"> 
    <!--1 MB = 1048576 bytes--> 
    <input type="hidden" name="MAX_FILE_SIZE" value="1048000" /> 

    <p>Upload your image:<input type="file" name="myfile"><input type="submit" value="Upload"></p> 

</form> 
+0

我得到'上传成功'的消息,但我不能找到上传的文件。该文件将存储在哪个位置?我在/var/www/html/test/index.php中部署了代码。 – 2016-02-24 05:41:43

0

要将文件移动到的目标目录应该可由Web服务器用户写入。另外不要忘记,一些web服务器在changeroot内运行,因此可能不需要目标路径的一部分。 PHP帮助文档还说你应该检查HTLM表单以确保它的enctype ='multipart/form-data'。

最后:$ filename的定义在哪里?

0

你的路必须由一个“/ home/USR名”

尝试增加一个“/ home /你的户名”到“/无功/网络/上传”的开始。

为了得到一个想法,在你的根目录下添加一个info.php,在浏览器中打开它并查看'Loaded Configuration File'。