Добавление файла в архив без сжатия

NewTor

Новичок
Столкнулся с одной проблемой. Нужно создать zip архив, причем один файл должен быть без сжатия. В php есть прекрасное расширение zip для работы с архивами, но у него нет возможности устанавливать степень сжатия. Пробовал копать в другом направлении, а именно с помощью system() выполнить непосредственно команду zip -0q она сохраняет нужный файл без сжатия, но как оказалось складывает в архив всю структуру директорий от корня. Мне же нужно чтоб этот файл находился в корне архива и был не сжат. В интернете не нашел ничего подходящего. Возможно кто-то сталкивался с этим?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
То есть написать так ты не пробовал?

zip -0q test_file.zip test_file
 

NewTor

Новичок
Именно так и пробовал. Например, файл с архивом находится здесь:
/home/path/to/dir/arc.zip
А исходный файл, который нужно добавить в этот архив без сжатия, здесь:
/home/example/tmp/somefile1
Команда zip -0q замечательно упаковывает его в архив, но при этом тащит за собой всю структуру директорий /home/example/tmp/ Мне же нужно, чтоб файл оказался в корне архива.
Но, еще раз уточню, что это делается в скрипте php спомощью команды system().
Да, еще забыл сказать, что команда cd результата не принесла.
 
Последнее редактирование:

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Можно впилить такую фичку:

Код:
#!/bin/bash

# Usage as: zip.sh /source/file/name.ext /destination/file/name.zip
# If called with 1 parameter  zip.sh /file/name.ext                - script will try to create file /tmp/ibd1fd0e/name.zip
# If called with 2 parameters zip.sh /file/name.ext /file/name.zip - script will try to create file /file/name.zip

tempFolderUniqueName="/tmp/ibd1fd0e"

if [ ! -d $tempFolderUniqueName ]
then
	mkdir -p $tempFolderUniqueName
fi

# get script parameters
srcFile=$1
dstFile=$2

# do some filename related operations
fullname=$(basename "$srcFile")
extension="${fullname##*.}"
filename="${fullname%.*}"

if [ -e $1 ]
then
	cp $srcFile $tempFolderUniqueName/$fullname
	cd $tempFolderUniqueName

	if [[ -z "$dstFile" ]]
	then
		zip -0q $filename.zip $fullname
	else
		zip -0q $dstFile $fullname
	fi

	rm $tempFolderUniqueName/$fullname
else
	echo "file $srcFile not found"
	exit
fi
Вызывать уже шелл скрипт через php. Если подойдет тебе такое решение.
 

NewTor

Новичок
В принципе можно попробовать, как вариант. Хотя хотелось бы сделать решение на "чистом" php.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Можешь написать все то же самое на php. Мне просто в голову пришел shell, реализовал так.
 
Сверху