Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблема при загрузке файлов
 
 автор: Феля   (18.04.2013 в 16:29)   письмо автору
 
 

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

Warning: POST Content-Length of 391688685 bytes exceeds the limit of 8388608 bytes in Unknown on line 0
Warning: Cannot modify header information - headers already sent in Z:\home\new2\www\downloadPic.php on line 5

и подвесил комп....
теперь вопрос - как избежать подобной ситуации?

форма загрузки -
 <?php
    
require ('pageHtmlCreate.php');
    require (
'imagE.php');
    require (
'systemMessage.php');


    
$page = new pageHtmlCreate('Главная');
    
$page->htmlBegining();

    if (isset(
$_GET['messId'])){
        try {
            
$base = new PDO('mysql:host=localhost; dbname=domdverei''root''',
                array(
PDO::MYSQL_ATTR_INIT_COMMAND=>'SET NAMES CP1251'));

            
$message = new systemMessage($_GET['messId'], $base);
            
$message->sysMessage();
            unset(
$_GET['messId']);
            
$message NULL;
        }

        catch (
Exception $e){
            echo 
$e->getMessage();
        }
    }

?>

    <form action="downloadPic.php" method="post" enctype="multipart/form-data">
        <input type="file" name="filename"><br>
        <input type="text" name="mainDir"><br>
        <input type="text" name="dir"><br>
        <input type="text" name="subDir"><br>
        <input type="text" name="imgTitle"><br>
        <input type="submit" value="Загрузить"><br>
    </form>

<?php
    $page
->htmlEnding();

?>


скрипт загрузки -
 <?php
    
require ('imagE.php');

    if (
$_FILES['filename']['type'] != 'image/gif' || $_FILES['filename']['type'] != 'image/png' || $_FILES['filename']['type'] != 'image/jpeg'){
        
header("Location: http://".$_SERVER['HTTP_HOST'].'?messId=006');
        exit;
    }

    function 
delChars($value){
        
$clearValue htmlspecialchars(stripcslashes($value));
        return 
$clearValue;
    }

    if (!isset(
$_POST['mainDir']) and !isset($_POST['dir']) and !isset($_FILES['filename']['name'])){
        
header("Location: http://".$_SERVER['HTTP_HOST'].'?messId=002');
        exit;
    }
    if (!isset(
$_POST['subDir'])){
        
$subDir '';
    }
    else{
        
$subDir delChars($_POST['subDir']);
    }
    
$mainDir delChars($_POST['mainDir']);
    
$dir delChars($_POST['dir']);
    
$imgTitle delChars($_POST['imgTitle']);
    
$fileName $_FILES['filename']['name'];
    
$fileTemp $_FILES['filename']['tmp_name'];

    try{
        
$base = new PDO('mysql:host=localhost; dbname=domdverei''root''', array(PDO::MYSQL_ATTR_INIT_COMMAND=>'SET NAMES CP1251'));

        
$image = new imagE($mainDir$dir$subDir$fileName$base);
        
$downloadImage $image->downloadFile($imgTitle$fileTemp);
        if (
$downloadImage != 'ok'){
            
header("Location: http://".$_SERVER['HTTP_HOST'].'?messId='.$downloadImage);
            
$image NULL;
            
$base NULL;
            exit;
        }
        
header("Location: http://".$_SERVER['HTTP_HOST']);
        
$image NULL;
        
$base NULL;
    }
    catch(
Exception $e){
        echo 
$e->getMessage();
    }

?> 


класс картинок -
 <?php

class imagE {
    private 
$fileName;
    private 
$fileMainDirectory;
    private 
$fileSubDirectory;
    private 
$imageMainDir;
    private 
$fileMainIndex;
    private 
$db;

    public function 
__construct($imageMainDir$fileMainDirectory$fileSubDirectory$fileName$db){
        
$this->fileName $fileName;
        
$this->imageMainDir $imageMainDir;
        
$this->fileMainDirectory $fileMainDirectory;
        
$this->fileSubDirectory $fileSubDirectory;
        
$this->db $db;
    }

    public function 
__destructor(){
        if (isset(
$this->db)){
            
$this->db NULL;
        }
    }

    private function 
fileSyntaxCheck($file){
        if (!
preg_match('/^[a-zA-Z0-9]{1}[-_a-zA-Z0-9]+[a-zA-Z0-9]{1}(.jpg|.jpeg|.png|.gif)$/'$file))
        {
            return 
false;
        }
        else{
            return 
true;
        }
    }

    private  function 
dirSyntaxCheck($dir){
        if (!
preg_match('/^[a-zA-Z0-9]{1}[-_a-zA-Z0-9]+[a-zA-Z0-9]{1}$/'$dir))
        {
            return 
false;
        }

        else{
            return 
true;
        }
    }

    private function 
pathCheck(){
        if (!empty(
$this->fileName))
        {
            
$sql "SELECT filename FROM pictures WHERE filename='$this->fileName'";
            
$sel=$this->db->query($sql)->fetch(PDO::FETCH_NUM);
            
print_r($sel);
        }
        
$link=$this->createImgLink();
        echo (
$link);
        
file_exists($link) or die('Файл '.$this->fileName.' не существует.');
    }

    public  function 
createImgLink(){
        if (empty(
$this->fileName))
        {
            return 
'002'//!!! Придумать код ошибки!!!!
        
}
        if (empty(
$this->fileMainDirectory)){
            echo (
"<LI>Нет доступа к каталогу или каталог не существует.");
            return;
        }
        if (
$this->fileSyntaxCheck($this->fileName) == false){
            echo (
'Имя файла '.$this->fileName.' содержит недопустимые символы. Имя файла может содержать цифры, латинсике буквы и знак "-".');
            return;
        }
        if (
$this->dirSyntaxCheck($this->fileMainDirectory) == false){
            echo (
'Имя дирректории '.$this->fileMainDirectory.' содержит недопустимые символы. Имя дирректории может содержать цифры, латинсике буквы и знак "-".');
            return;
        }
        if (empty(
$this->fileSubDirectory)){
            
$link $this->imageMainDir.'/'.$this->fileMainDirectory.'/'.$this->fileName;
            return 
$link;
        }
        if (
$this->dirSyntaxCheck($this->fileSubDirectory) == false){
            echo (
'Имя дирректории '.$this->fileSubDirectory.' содержит недопустимые символы. Имя дирректории может содержать цифры, латинсике буквы и знак "-".');
        }
        
$link $this->imageMainDir.'/'.$this->fileMainDirectory.'/'.$this->fileSubDirectory.'/'.$this->fileName;
        return 
$link;
    }

    public function 
downloadFile($imageTitle$fileNameTmp){
        
$imageLink $this->createImgLink();
        if (
strlen($imageLink)<=3){
            return 
$imageLink;
        }
        if (
file_exists($imageLink)==true){
            return 
'001'//!!Код ошибки если файл уже существует!!
        
}
        
$sql "SELECT dirname, subdirname, filename FROM pictures WHERE filename='$this->fileName'";
        
$sel=$this->db->query($sql)->fetch(PDO::FETCH_NUM);
        if (
$this->imageMainDir.'/'.$sel[0].'/'.$sel[1].'/'.$sel[2]==$imageLink){
            return 
'003';//Запись в базе существует однако файл отсутствует. Привести в соответствие
        
}
        if (!
is_uploaded_file($fileNameTmp)){
            return 
'004'//Если файл не загружен
        
}
        
$filePath dirname($imageLink);
        if (
is_dir($filePath)==false){
            return 
'005'//Если нет пути
        
}
        
move_uploaded_file($fileNameTmp$imageLink);
        
$ins "INSERT INTO pictures (dirname, subdirname, filename, imagetitle) VALUES ('$this->fileMainDirectory', '$this->fileSubDirectory', '$this->fileName', '$imageTitle')";
        
$this->db->exec($ins);
        return 
'ok';
        }


}

?> 

  Ответить  
 
 автор: confirm   (18.04.2013 в 20:41)   письмо автору
 
   для: Феля   (18.04.2013 в 16:29)
 

Код можно было не показывать, это связано с настройками сервера. Предупреждение гласит, что превышен установленный максимальный размер на POST загрузку - POST Content-Length of 391688685 bytes exceeds the limit of 8388608 bytes, а второе сообщение является следствием первого.
За размер загружаемого отвечают две директивы в php.ini:
post_max_size
upload_max_filesize

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

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования