rugrisser
@rugrisser
Web and Android developer

Как сделать так, чтобы загружался архив?

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

HTML:
<form enctype="multipart/form-data" method="post" action="http://8bgsg.ru/storage/add_photos.php">
    <span class="word">Прикрепить ZIP архив с фото:</span><br>
    <input type="file" id="file" name="archive"><br>
    <span class="word">Выберете альбом:</span><br>
    <select id="combobox" name="album">
                    
                    <?php
                    
                        mysql_connect('127.0.0.1', 'root', '');
                        mysql_select_db('site');
                        
                        $result = mysql_query("SELECT * FROM `albums`");
                    
                        while ($row = mysql_fetch_array($result)) {
                            echo '<option value="' . $row['id'] . '">' . $row['title'] . '</option>';
                        }
                    
                    ?>
                    
    </select><br>
    <input type="submit" id="button" value="Отправить"><br>
</form>


PHP:
<?php
    
    mysql_connect('127.0.0.1', 'root', '');
    mysql_select_db('site');

    if (sizeof($_FILES) != 0 and $_FILES['archive']['type'] == "application/zip") {
        
        $name = date("d_m_Y_H_i_s");
        $zip_info = pathinfo($_FILES['archive']['name']);
        
        $upload_dir = 'archives';
        $upload_file = $upload_dir . $name . '.' . $zip_info['extension'];
        
        if (move_uploaded_file($_FILES['name']['tmp_name'], $upload_file)) {
            
            $zip = new ZipArchive();
            
            if ($zip->open($upload_file)) {
                
                $num_files = $zip->numFiles;
                
                for ($i = 0; $i < $num_files; $i++) {
                    
                    $result = $zip->statIndex($i);
                    
                    $name = date("d_m_Y_H_i_s") . "_" . $i;
                    $img_info = pathinfo($result['name']);
                    
                    $upload_dir = 'images/albums/';
                    $upload_file = $upload_dir . $name . '.' . $img_info['extension'];
                    
                    if (move_uploaded_file($result['name'], $upload_file)) {
                        
                        $disk = 'http://8bgsg.ru/storage/' . $upload_file;
                        $album = $_POST['album'];
                
                        mysql_query("INSERT INTO `photos` (`name`, `album_id`, `photo_url`, `date`) VALUES('$name', '$album', '$disk', NOW())");
                        header('Location: http://8bgsg.ru/photos');
                        
                    }
                    
                }
                
            }
            
            $zip->close();
            
            header('Location: http://8bgsg.ru/photos');
            
        }
    }

?>
  • Вопрос задан
  • 169 просмотров
Пригласить эксперта
Ответы на вопрос 2
cashalot
@cashalot
Если я вам помог - пометьте мой ответ как решение
Форме добавьте атрибут novalidate
Ответ написан
Комментировать
XXXXPro
@XXXXPro
Fullstack Web developer
Вопрос: а размер архива какой? Первое что приходит в голову — он превышает размеры, указанные в директивах PHP max_upload_size и max_post_size.
Дальше, вместо sizeof($_FILES) лучше использовать !empty($_FILES['archive'])
А также сделать в конце print_r($_FILES), и посмотреть ее вывод, чтобы понять, в чем вообще проблема.
P.S. Полагаться на переданный пользователем type — не самая лучшая идея с точки зрения безопасности. (Впрочем, в данном конкретном случае это не критично.)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы