2012-04-24 9 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フォルダも表示されません。私はそれがそこにあるはずだと確信していません。 tmpフォルダと/var/www/upload/の両方の許可をchmodを使用して777に設定しましたが、所有者をapacheに設定する必要があるかどうかはわかりません。だから私はファイルが/var/www/uploadにコピーされていないことを知りたいし、もしこれをテストする方法があるなら。

+4

http://w3fools.com/ – Marty

+0

error_reporting(E_ALL)を有効にしましたが、どのようなエラーが表示されていますか? –

+0

'<?php file_put_contents( '/ var/www/upload/test.txt'、 'test');'で 'index.php'をリクエストしてみてください。エラーが表示され、ファイルが正常に作成されていますか? – Casey

答えて

0

すでにアクセス可能なウェブサイトのメインディレクトリにあるので、/ var/www/upload /の代わりに./upload/を使用する必要があるようです。

あなたはまた、http://www.tizag.com/phpT/fileupload.php またはAPIを参照することができます。http://php.net/manual/en/function.move-uploaded-file.php

は、それはここで

+0

私はtizagからコードを試して、./uploadに変更しましたが、 "ファイルをアップロードする際にエラーが発生しました。もう一度お試しください!"ファイルが一時フォルダに転送されるかどうかはわかりません。 – user1352777

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にコードをデプロイしました。 –

0

ファイルを移動する宛先ディレクトリは、Webサーバーユーザーが書き込み可能にする必要があります。また、一部のWebサーバがチェンジャートーの中で動作することを忘れないでください。そのため、宛先パスの一部は必要ないかもしれません。 PHPのヘルプ文書では、HTLMフォームをチェックして、enctype = 'multipart/form-data'であることを確認する必要があります。

最後に、$ filenameはどこに定義されていますか?

0

あなたのパスは '/ホーム/ USR-名'

を増やしてみてください '/ホーム/あなたのユーザ名' 'の/ var/www /のアップロード' の先頭に構成する必要があります。

アイデアを得るには、ルートディレクトリにinfo.phpを追加し、ブラウザで開き、「Loaded Configuration File」を参照してください。