Загрузка фотографий Проблема - PullRequest
0 голосов
/ 04 ноября 2011

Я написал функцию, которая берет загрузку фотографий из формы, создает файл на сервере и добавляет информацию в базу данных, но у меня кошмар, пытающийся заставить его делать именно то, что я хочу.

РЕДАКТИРОВАТЬ

В настоящее время отображается правильное сообщение об ошибке, если тип файла указан неверно, и более 3 МБ, но при попытке загрузить файл .bmp размером 17 МБ он отменяетсявыходит из меняПохоже, что он повторно инициализирует мой файл 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
}

Ответы [ 2 ]

0 голосов
/ 04 ноября 2011

Отображается ошибка, если тип файла указан неверно, если только файл размером в несколько мегабайт, в этом случае он полностью выходит из системы, почти как убивает все переменные сеанса

Пожалуйста, откройте /etc/php5/apache2/php.ini (при условии, что вы используете apache2) и установите upload_max_filesize = 5M (для файла 5 мегабайт), и у вас file_uploads = On. затем перезапустите Apache. и попробуйте снова.

Изображение не может быть отображено, потому что оно содержит ошибки. "Но когда я загрузить загруженное изображение с сервера, изображение отображается хорошо, но не через http.

Вы можете проверить, достаточно ли у вас прав для чтения изображения из каталога, в котором оно хранится. (и убедитесь, что вы обращаетесь к нужному каталогу; попробуйте скопировать относительный путь изображения в адресной строке браузера)

позвольте мне сначала прояснить несколько вещей:

1.Вы можете загрузить файл размером 17 МБ, но вы хотите ограничить загрузку более 3 МБ. 2.it загружает файл размером 17 Мб, но из браузера это видно. но если вы загружаете с вашего сервера окна, можете его правильно открыть.

вы можете вставить: var_dump ($ ubphotoSize); var_dump ($$ MaxFileSize); в начале addPhot () и попробуйте снова. По вашему мнению, он не может сравнивать размеры файлов. пожалуйста, дайте нам знать нашу продукцию.

0 голосов
/ 04 ноября 2011

Просто мысль ... Я предполагаю, что у вас здесь более одной проблемы.Вы сказали, что когда кто-то пытается загрузить файл поверх X mb, он в основном переключается на переключатель уничтожения.Вы знаете, грубо говоря, что это за размер?Если вы это сделаете, вы можете сравнить его с настройками upload_max_filesize и post_max_size для вашей установки php?Они оба должны быть видны в phpinfo ().Я думаю, что по умолчанию где-то около 2 МБ, но я могу ошибаться в этом.В любом случае, я знаю, что когда вы пытаетесь загрузить данные за пределы этих настроек, это, в основном, плюет.Возможно, вам придется изменить настройки php.ini для этого.

...