18 / 18 / 3
Регистрация: 25.01.2013
Сообщений: 330
1

Запаковать картинку в zip

22.01.2014, 10:26. Показов 2528. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть куки, в них путь до картинки, но он в зип кидает не картинку, а что то что весит 8 кб - на называтся и имеет такое же расширение как картинка, в чём ошибка?
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$cookie = explode( '**', $_COOKIE['fav_images'] );  
date_default_timezone_set('UTC+4');
$a = date('l jS \of F Y h:i:s A');
$zip = new ZipArchive();
$dir = '/favorite/';
$filename = ".$dir./$a.zip";
if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) {
    exit("Невозможно открыть <$filename>\n");}
$zip->addFromString( $cookie[1] , $cookie[0]);
$zip->close();
header("Pragma: public"); 
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); 
header("Content-Type: $ctype");
header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename)); 
readfile("$filename");
exit();
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.01.2014, 10:26
Ответы с готовыми решениями:

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

Как запаковать файлы в Zip
В .Net 4.5 я бы использовал ZipFile, но в .NET 3.5 такого класса нет

Запаковать файл в .zip архивы (Создание пустого файла архива)
Здравствуйте. Нужно архивировать файлы с каталога (запаковать) Как заорхивировать я знаю (в FAQ...

Извлечь из zip архива определенную папку. Запаковать ее в другой архив
Есть два zip архива, одинакового содержимого. Нужно из первого архива извлечь определенную папку,...

16
53 / 53 / 10
Регистрация: 25.09.2011
Сообщений: 264
22.01.2014, 10:42 2
Внимательно читай документацию.

http://www.php.net/manual/ru/z... string.php

Добавяет файл в ZIP-архив, используя его содержимое. Не имя файла, а двоичное содержимое.
0
18 / 18 / 3
Регистрация: 25.01.2013
Сообщений: 330
22.01.2014, 11:01  [ТС] 3
а можно пояснить, какуе у картинки может быть содержимое?(гугл ответа не дал)
1
53 / 53 / 10
Регистрация: 25.09.2011
Сообщений: 264
22.01.2014, 11:09 4
Бинарное=)

Смотри. У тебя в куке хранится путь на файл, а не сам файл. Если бы лежал сам файл, то не вопрос -- используй addFromString. У тебя лежит путь к файлу, следовательно нужен метод, который возьмёт картинку по этому пути и запихнёт в архив. Следовательно:

http://www.php.net/manual/ru/z... ddfile.php

Разберешься?
1
Эксперт PHP
5752 / 4133 / 1506
Регистрация: 06.01.2011
Сообщений: 11,279
22.01.2014, 12:39 5
Цитата Сообщение от Reebka Посмотреть сообщение
Разберешься?
Вряд ли . Я ему в другой теме то же самое говорил, видимо не получилось у него. tarasow, вот:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php
    # Разбиваем значение COOKIE по звёздочке
    $cookie = explode( '**', $_COOKIE['fav_images'] );  
    
    # Устанавливаем временную зону
    date_default_timezone_set('Europe/Moscow');
    
    # Получаем дату (Для справки: под Windows архив не создаётся с таким именем, так как содержит двоеточие)
    $date = date('l jS \of F Y h:i:s A');
 
    # Начинаем работу с ZIP архивом
    $zip = new ZipArchive();
    
    # Директория, куда сохраним файл ZIP
    $dir = './favorite/';
    
    # Полный путь к файлу
    $filename = $dir . $a . ".zip";
    
    # Если архив создать не удалось
    if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE)
        # Выдаём ошибку
        exit("Невозможно открыть <$filename>\n");
    
    # Добавляем файл в архив
    $zip->addFile( $cookie[1] , $cookie[0] );
    
    # Завязываем работу с архивом
    $zip->close();
 
    # Отправляем заголовки, необходимые для скачивания ZIP
    header("Pragma: public"); 
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: private",false); 
    header("Content-Type: application/zip");
    header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" );
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: " . filesize($filename)); 
    
    # Отдаём файл на скачивание
    readfile( $filename );
1
18 / 18 / 3
Регистрация: 25.01.2013
Сообщений: 330
22.01.2014, 17:14  [ТС] 6
Спасибо, что подсказали, только он теперь сохраняет файл без названия т.е. так : .zip - и на компе его не открыть (т.е. он не как зип сохраняется)

Добавлено через 2 минуты
PHP
1
2
# Полный путь к файлу
    $filename = $dir . $a . ".zip";
но веть это не полный путь к фалу, полный путь находится в $cookie[1]

Добавлено через 8 минут
PHP
1
2
# Полный путь к файлу
    $filename ="asd.zip";
но даже если так сделать, то когда открываешь на компе, то выдаёт- архив повреждён или имеет неизвестный формат файла
0
53 / 53 / 10
Регистрация: 25.09.2011
Сообщений: 264
22.01.2014, 17:22 7
[QUOTE=tarasow;5677664]Спасибо, что подсказали, только он теперь сохраняет файл без названия т.е. так : .zip - и на компе его не открыть (т.е. он не как зип сохраняется)

PHP
1
    $filename = $dir . $a . ".zip";
$a - это имя твоего архива. Укажи его выше и будет тебе счастье
0
18 / 18 / 3
Регистрация: 25.01.2013
Сообщений: 330
22.01.2014, 18:01  [ТС] 8
то ли я дурак, толи лыжи не едут, но всё равно сохраняет битый архив, посмотрите - нажмите добавить в избранное http://tarasik22.tmweb.ru/inde... ory/1-test
0
Эксперт PHP
5752 / 4133 / 1506
Регистрация: 06.01.2011
Сообщений: 11,279
22.01.2014, 19:26 9
Ой-ой-ой, извините, tarasow. Я же $a на $date (9 строка) изменил, а указать его как имя архива - не указал. Замените в коде ниже $a на $date. И прочитайте комментарий на 8 строке.

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

Добавлено через 8 минут
Самое важное: так как cookie хранятся у пользователя в браузере, злоумышленник может вписать в cookie название ЛЮБОГО файла на вашем сайте. И ваш скрипт запакует его в zip и отправит ему. Т.е. он может запросто получить любой php файл с вашего сайта. А это - критичная уязвимость, критичней некуда .
1
18 / 18 / 3
Регистрация: 25.01.2013
Сообщений: 330
22.01.2014, 21:20  [ТС] 10
Цитата Сообщение от lyod;

[size="1"
Добавлено через 2 минуты[/size]
А архив битый получался из-за того, что к данным архива, посылаемым пользователю, добавлялась строка с ошибкой notice.
простите за нескромность но из-за чего она вылетает и как вы её увидили?
0
Эксперт PHP
5752 / 4133 / 1506
Регистрация: 06.01.2011
Сообщений: 11,279
22.01.2014, 22:23 11
Ошибка Notice вылетала, так как мы пытались вызвать несуществующую переменную $a. Эта ошибка нам сообщала об этом. А как увидел - просто перед всеми header написал
PHP
1
die();
и на экране она вывелась .

Добавлено через 9 минут
Плюс примешивались сообщения о том, что нельзя отправить заголовок.
0
18 / 18 / 3
Регистрация: 25.01.2013
Сообщений: 330
23.01.2014, 09:12  [ТС] 12
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
 # Разбиваем значение COOKIE по звёздочке
    $cookie = explode( '**', $_COOKIE['fav_images'] );  
    
    # Устанавливаем временную зону
    date_default_timezone_set('Europe/Moscow');
    
    # Получаем дату (Для справки: под Windows архив не создаётся с таким именем, так как содержит двоеточие)
    $date = date('l jS \of F Y h:i:s A');
 
    # Начинаем работу с ZIP архивом
    $zip = new ZipArchive();
    
    # Директория, куда сохраним файл ZIP
    $dir = './favorite/';
    
    # Полный путь к файлу
    $filename = $dir . $date . ".zip";
    
    # Если архив создать не удалось
    if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE)
        # Выдаём ошибку
        exit("Невозможно открыть <$filename>\n");
    
    # Добавляем файл в архив
    $zip->addFile( $cookie[1] , $cookie[0] );
    
    # Завязываем работу с архивом
    $zip->close();
 
    # Отправляем заголовки, необходимые для скачивания ZIP
    header("Pragma: public"); 
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: private",false); 
    header("Content-Type: application/zip");
    header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" );
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: " . filesize($filename)); 
    
    # Отдаём файл на скачивание
    readfile( $filename );
ну вот посмотрите, сейчас всё вроде правильно, а архив всё равно битый

Добавлено через 10 часов 25 минут
Спасибо всем за помощь, я сделал это, проблема оказалась до ужаса банально, а выяснил я её так - подставил путь файла из куки в зип и ничего не произошло ведь куки выводит строку /images/phocagallery/thumbs/phoca_thumb_l_12c1322_13_1600.jpg - а по этому пути файл не находится - нужна была строка
images/phocagallery/thumbs/phoca_thumb_l_12c1322_13_1600.jpg (без первого слэша "/")
в итоге получилось

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# Отдаём файл на скачивание
    readfile( $filename );
    
     
    # Разбиваем значение COOKIE по звёздочке
    $cookie = explode( '**', $_COOKIE['fav_images'] ); 
    
     
     $rest = substr($cookie[1] , 1);
     
     # Устанавливаем временную зону
    date_default_timezone_set('Europe/Moscow');
    
    # Получаем дату (Для справки: под Windows архив не создаётся с таким именем, так как содержит двоеточие)
    $date = date('l jS \of F Y h:i:s A');
 
    # Начинаем работу с ZIP архивом
    $zip = new ZipArchive();
    
    # Директория, куда сохраним файл ZIP
    $dir = './favorite/';
    
    # Полный путь к файлу
    $filename = $dir . $date . ".zip";
    
    # Если архив создать не удалось
    if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE)
        # Выдаём ошибку
        exit("Невозможно открыть <$filename>\n");
    
    # Добавляем файл в архив
    $zip->addFile(  $rest , $cookie[0] . ".png" );
    
    # Завязываем работу с архивом
    $zip->close();
 
    # Отправляем заголовки, необходимые для скачивания ZIP
    header("Pragma: public"); 
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: private",false); 
    header("Content-Type: application/zip");
    header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" );
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: " . filesize($filename)); 
    
    # Отдаём файл на скачивание
    readfile( $filename );
Добавлено через 19 минут
Возник след вопрос - если картинок больше чем 1 то что тогда?
Понимаю нужно написать ф-цию примерно
PHP
1
2
3
4
$fav_cnt =  $_COOKIE['fav_cnt'] ; 
while ($fav_cnt >1) {
       
}
а вот что если $fav_cnt >1 тут я впал в думку - натолкните пож-та на мысль
0
53 / 53 / 10
Регистрация: 25.09.2011
Сообщений: 264
23.01.2014, 09:19 13
Цитата Сообщение от tarasow Посмотреть сообщение
а вот что если $fav_cnt >1 тут я впал в думку - натолкните пож-та на мысль
PHP
1
2
3
4
5
$fav_cnt =  (int)$_COOKIE['fav_cnt'] ; 
while ($fav_cnt > 0) {
       //делаешь что-то
       --$fav_cnt
}
например, вот так
0
18 / 18 / 3
Регистрация: 25.01.2013
Сообщений: 330
23.01.2014, 09:44  [ТС] 14
да, значение $fav_cnt будет уменьшаться, но что делать с $rest = substr($cookie[1] , 1); ?
по идее нужно так -
PHP
1
2
3
4
5
6
7
8
9
10
$ab = 0;
$abс = 1;
$fav_cnt =  (int)$_COOKIE['fav_cnt'] ; 
while ($fav_cnt > 0) {
       $cookie[$ab+3]; // куки это масив от 0 до 2
        $cookie[$abс+3];
         $rest = substr($cookie[$abс+3]);
       --$fav_cnt
}
$zip->addFile(  $rest , $cookie[0] . ".png" ); // а вот как сюда добавить новую строчку с $rest и она ещё должна быть уникальной?
0
53 / 53 / 10
Регистрация: 25.09.2011
Сообщений: 264
23.01.2014, 09:57 15
tarasow,

Запихни в тело цикла, чтобы все файлы добавились

PHP
1
$zip->addFile(  $rest , $cookie[0] . ".png" );
$cookie[0] замени на имя файла. Можно на основе твоего $fav_cnt его генерить. Вариантов масса
0
18 / 18 / 3
Регистрация: 25.01.2013
Сообщений: 330
23.01.2014, 12:24  [ТС] 16
ок, спасибо, с этим более менее, но вот вопрос возник, как мне передать из js в php , например есть код
Javascript
1
2
3
4
5
6
if(flag == 1 && 4 & filtersMask)
            {
                filtersMask &= ~4;
                jQuery('.filtersContainer a[data-flag="4"]').removeClass('active');
            }
            else if(flag == 4 && 1 & filtersMask)
допустим мне надо отзеркалить изображение - как мне в пхп отразить data-flag="4"?
т.е.
if (data-flag="4") echo "всё работает"; - таким образом?
0
53 / 53 / 10
Регистрация: 25.09.2011
Сообщений: 264
23.01.2014, 13:50 17
Нет, не так. Передавать нужно так же, как и все параметры. <form> и прочие ништяки или ajax. В твоём случае, скорее классический запрос. Добавь hidden поле и меняй его значение яваскриптом
0
23.01.2014, 13:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.01.2014, 13:50
Помогаю со студенческими работами здесь

Как с использованием 7-Zip запаковать файлы и каталоги в архив и распаковать их из архива?
Научите меня 7z паковать! Документация выводится в консоль, но всё же пробами и ошибками долго...

Как запаковать картинку в exe файл
Здравствуйте! Подскажите примерно как это делается. Я так понял это надо делать, используя ресуры,...

HTML - Надо: вставить картинку в картинку, в эту картинку, ссылку в картинку
Вот схема моего сайта. http://s020.***********/i716/1404/8c/254516feacb3.jpg У меня пока что на...

Сравнение времени локального Zip архива с Zip архивом на FTP
Доброго времени суток Нужна помощь!!! Нужно сравнить время локального Zip архива с Zip архивом на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru