2011-11-04 3 views
0

저는 양식에서 사진을 업로드하고, 서버에 파일을 생성하고, 정보를 데이터베이스에 추가하는 기능을 썼습니다.하지만 필자는 원하는대로 정확하게 작업하려고 악몽을 꾸고 있습니다.사진 업로드 문제

편집

현재, 그것은 파일 형식이 잘못되면 올바른 오류 메시지를 표시하고 3메가바이트 이상하지만 난 업로드하려고 할 때 17메가바이트은 취소하고 나를 로그 파일 .BMP. 의도 한 기능을 처리 한 후 내 process.php 파일을 다시 시작하는 것으로 보입니다.

나는 당황 스럽습니다. 그래서 어떤 도움을 주시면 감사하겠습니다. 감사합니다

<form action="process.php" method="POST" enctype="multipart/form-data" name="formUpload"> 
     <label>Picture:</label> 
     <input type="file" name="photo" id="photobrowser" tabindex="4"> 
     <span class="error"><?php echo $form->error("photo"); ?></span><br /> 
     <input type="hidden" name="sessionid" value="<?php echo $sessionid; ?>" /> 
     <input type="hidden" name="subphoto" value="1" /> 
     <input type="image" src="styling/images/button-add-photo.png" id="subBtn" tabindex="6" /> 
    </form> 

process.php

class Process { 

function Process(){ /* Class constructor */ 
    global $session; 

    if(isset($_POST['subphoto'])){ /* User submitted an advert photo */ 
     $this->procAddPhoto(); 
    } else if($session->logged_in){ /* No form was submitted therefor logout */ 
     $this->procLogout(); 
    } else { /* User trying to view this file */ 
     header("Location: /"); 
    } 
} 
function procAddPhoto(){ 
    global $session, $form; 

    $retval = $session->addPhoto($_FILES['photo']['size'], $_FILES['photo']['type'], $_FILES['photo']['tmp_name'], $_POST['sessionid']);  

    if($retval == 0){ /* Successful */ 
     // do stuff 
    } else if($retval == 1){ /* Errors found */ 
     // do stuff 
    } else if($retval == 2){ /* Adding failed */ 
     // do stuff 
    } 
    } // close function procAddPhoto() 
}; 

$process = new Process; /* Initialize process */ 

?> 

session.php

function addPhoto($subphotoSize,$subphotoType,$subphotoTmpname,$subsessionid){ 
    global $database, $form; 

    $maxFileSize = 3000000; // bytes (3 MB) 

    /* Image error checking */ 
    $field = "photo"; 
    if($subphotoSize == 0){ 
     $form->setError($field, "* No file selected"); 
    } else { 
     list($width, $height, $type, $attr) = getimagesize($subphotoTmpname); 
     if($width > 4000){ 
      $form->setError($field, "* Max photo width is 4000 pixels."); 
     } else if($subphotoSize > $maxFileSize) { 
      $form->setError($field, "* Photo is above the maximum of 3 MB"); 
     } else if(($subphotoType != "image/jpeg") && ($subphotoType != "image/pjpeg") && ($subphotoType != "image/png")){ 
      $form->setError($field, "* $subphotoType is wrong file type"); 
     } 
    } 
    /* Errors exist, have user correct them */ 
    if($form->num_errors > 0){ 
     return 1; //Errors with form 
    } else { // Else use variables 

     /* Get random string for new filename name */ 
     $randNum = $this->generateRandStr(10); 
     $filerootpath = PHOTOS_DIR.$subsessionid."/"; 
     $thumbrootpath = PHOTOS_DIR.$subsessionid."/thumbs/"; 

     if($subphotoType == "image/png"){ 
      $filename = $randNum.".png"; 
     } else if ($subphotoType == "image/jpeg" || $subphotoType == "image/pjpeg"){ 
      $filename = $randNum.".jpg"; 
     } 
     $fullURL = $filerootpath.$filename; 
     $thumbURL = $thumbrootpath.$filename; 

     /* Make sure file is RGB colors */ 
     $getimagesize = getimagesize($subphotoTmpname); 
     if (isset($getimagesize['channels']) && $getimagesize['channels'] == 4 && $getimagesize[2] == IMAGETYPE_JPEG) { 
      $im = @imagecreatefromjpeg($subphotoTmpname); 
      if ($im) { 
       imagejpeg($im, $image, 75); 
       imagedestroy($im); 
      } 
     } 


     /* Upload files to correct folders */ 
     move_uploaded_file($subphotoTmpname, "$fullURL"); 

     /* Use session ID for the advert ID because it hasnt been made yet */ 
     $userSession = $this->userinfo['userid']; 
     $ownerID = $this->userinfo['id']; 
     if(!$database->addNewPhoto($ownerID,$fullURL,$userSession,$is_main_photo, $subsessionid, $thumbURL)){ 
      return 2; // Failed to add to database 
     } 
    } 
    return 0; // Success 
} 
+0

"파일 크기가 몇 MB 인 경우를 제외하고는 사용자가 완전히 로그 아웃됩니다."사용자가 그 것을 좋아할 것입니다 ... – Brad

+0

감사합니다. – user29660

답변

0

그냥 생각 ... 난 당신이 여기에 하나 이상의 문제가있을 것으로 추측하고있다. 누군가가 XMB를 통해 파일을 업로드하려고 시도 할 때 기본적으로 킬 스위치를 친다 고했습니다. 대략 크기가 뭘까? 그렇다면 PHP 설치를위한 upload_max_filesize 및 post_max_size 설정과 비교할 수 있습니까? 둘 다 phpinfo()에서 볼 수 있어야합니다. 나는 기본값이 약 2MB 정도라고 생각하지만 잘못 될 수있다. 어쨌든, 나는 당신이 그 설정을 넘어서 업로드하려고 할 때 기본적으로 비트를 뱉어 낸다는 것을 안다. 당신은 php.ini 설정을 변경해야 할 수도 있습니다.

+0

php.ini 파일에서이 값을 변경했지만 스크립트는 여전히 동일합니다. 나는 당신이 다시보기가있는 경우에 dont 경우에 원래 포스트를 편집했다. 감사합니다 – user29660

+0

명심해야 할 두 가지. 첫째, php.ini에서 그 값을 어떻게 변경 했습니까? 그것은 잘 문서화되지 않았고 아마 원래의 대답에서 이것을 언급해야했지만 약간 돌진했지만 post_max_size는 upload_max_filesize의 크기의 두배 이상이어야합니다. 그렇지 않으면 설정이 거부되고 기본값은 각각 8MB와 2MB가됩니다. 익숙한. 나는 당신이 올바르게 설정했는지 확인한 다음 php를 다시 시작하고 (변경 사항이 적용되지 않는 PHP 엔진을 다시 시작하지 않는 경우) phpinfo()를 살펴보고이를 확인합니다. 또한 ... –

+0

특정 파일을 볼 수 없다는 문제를 이해하고 있는지 잘 모르겠습니다. 파일이 제대로 업로드되지만 브라우저에서 볼 수 없다고 말하는 것입니까? 아니면 브라우저에서 오류 메시지가 나타 납니까? 특정 오류가 언제/어디서 발생했는지 정확히 알 수 있다면 도움이 될 것입니다. 이 오류를 던진 이미지 중 하나에 대한 링크 만 제공하면 도움이됩니다. –

0

그것은 오류를 표시하는 경우, 그것이 완전히 사용자를 기록하는 경우 크기가 몇 MB입니다 파일,하지 않는 한, 파일 타입의 밤은 올바른 거의 그 모든 세션 변수

를 죽이는 등

/etc/php5/apache2/php.ini (apache2를 사용한다고 가정)를 열고 upload_max_filesize = 5M (5MB 파일 용)으로 설정하고 file_uploads = On으로 설정하십시오. 그런 다음 아파치를 다시 시작하십시오. 다시 시도하십시오.

이미지가이 오류를 contatins 때문이다. 표시 "하지만 난 서버에서 업로드 된 이미지를 다운로드 때, 그림이 아니라 통해 벌금을 표시 할 수없는 HTTP.

당신은 당신을 확인하실 수 있습니다 .이 저장되어있는 디렉토리에서 이미지를 읽을 수있는 충분한 권한이 (그리고 당신이 바로 그 디렉토리에 액세스하고 있는지 확인, 브라우저의 주소 표시 줄에 이미지의 상대 경로를 복사하려고)

이 나를 먼저 분명히 몇 가지를 보자

1. 17MB 파일을 업로드 할 수 있지만 3MB 이상 업로드를 제한하고 싶습니다. 2. 17MB 파일을 업로드하지만 브라우저에서 볼 수 있습니다. 하지만 서버 창에서 다운로드하면 올바르게 열 수 있습니다.?

삽입 할 수 있습니까? var_dump ($ ubphotoSize); var_dump ($$ maxFileSize); addPhot() 시작 부분에서 다시 시도하십시오. 당신에 따르면 그것은 파일 크기를 비교할 수없는 것 같습니다. 우리의 산출물을 알려주십시오.

+0

그것은 phpinfo 파일에 보여지지 않습니다, 나는 호스트가 그것을 제한했다고 생각합니다. 그래서 지금 가치가 무엇인지 알아 내기 위해 이메일로 보내고 있습니다. 감사합니다 – user29660

+0

내 자신의 컴퓨터에 EasyPHP를 사용하고 있으며 upload_max_filesize = 18M을 만들었지 만 여전히 나를 기록합니다. 나는 17Mb .bmp 파일을 업로드하므로 파일 크기가 너무 큽니다. 또는 잘못된 파일 유형이지만 4Mb jpg 또는 .bmp 파일 (허용되지 않음)로 올바른 오류가 표시됩니다. – user29660