Шифрование атаченного файла в e-mail, как?

y0r1c

Новичок
Создание ZIP-архива с паролем при помощи PHP+Shell, как?

по-порядку
сначала работодатель захотел, чтобы отправляемый атачем в письме ZIP-архив создавался с определенным паролем, я перерыл все (или как мне кажется все), и понял что создавать запароленые архивы PHP не умеет, тогда мне было предложено воспользоваться GnuPG для шифрования сообщения, но в процессе изучения я понял, что GnuPG шифрует само тело сообщения, а аттачи передаются в хедерах (header) сообщения, вобщем меня завели в тупик, нужно как-то зашифровать этот приатаченый ZIP-архив, или же как-то его запаролить

*примечание - ZIP-архив создаётся PHP скриптом на основе введенных даных и добавленых файлов


заранее благодарен
 

SiMM

Новичок
> отправляемый атачем в письме ZIP-архив создавался с определенным паролем
[m]exec[/m] + man zip
 

y0r1c

Новичок
PHP:
<?  
  $pass = '123456789';
  $zip = exec("zip -r test test -e $pass");
  echo $zip;  
?>
по идее должно создавать архив test.zip из папки test с паролем 123456789, но ничего не происходит, вопрос: я напутал с синтаксисом, или у меня нет прав выполнять приложение zip ?
 

ybilevych

Новичок
Возможно, не может найти zip. Попробуй абсолютный путь к нему.
Возможно, что и с папкой те же траблы

Попробуй проанализировать 2-й параметр функции [m]exec[/m]
 

y0r1c

Новичок
подсказали правильный синтаксис исполнения zip "zip -рекурсивно -Пароль сам_пароль имя_архива источник_архива" с консоли проверил, работает, скриптом не хочет :(
PHP:
<?   
  $zip = exec("zip -r -P 123456 test test"); 
  echo $zip;   
?>
 

chisto_tolyan

Враг народа
проверь, каким юзером запускал из консоли и от какого юзера запускается скрипт. скорее всего скрипт от www и ему нехватает прав)
 

y0r1c

Новичок
PHP:
echo exec('whoami')
выводит имя моего пользователя, а как узнать, есть ли у меня на хостинге права на исполнения ZIP или нет?... я просто не оч. силен в *nix-ах
 

y0r1c

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

команда с абсолютными путями

PHP:
echo exec('[b]/usr/local/bin/zip -r -P 123456 test /usr/local/psa/home/vhosts/мой_домен/httpdocs/test[/b]')
я так понял, что все проблемы упираются в права, тоесть в хостера, буду сегодня с ним разговаривать, всем спасибо за помощь, хотя если есть другие варианты решения, буду благодарен
 

chisto_tolyan

Враг народа
попробуй написать шел-сценарий типа:
Код:
#!/bin/sh
cd /usr/local/psa/home/vhosts/мой_домен/httpdocs/test

/usr/local/bin/zip -r -P $1 $2 ./
и запускать его из скрипта типа:
PHP:
exec("my_shell.sh $pass $arch_name");
-~{}~ 09.06.06 11:53:

зы: ну и CHMOD'ы ессено выставить нужные надо)
 

y0r1c

Новичок
всё, кажется понял, сутки мучений оказались лишними, я сразу протупил и не проверил наличие установленного zip у хостера, оказалось, что в портах валяется, но не установленный :(

ЗЫ: огромнейшая благодарность всем откликнувшимся форумчанам!!!

ЗЫЫ: странно просто, я лично всегда себе zip ставлю...

-~{}~ 09.06.06 14:22:

ХМ вобщем такая ситуация
создаю файл
archzip.sh
Код:
#!/bin/sh
cd $1
zip -r -P $2 $3 $4
tar -zcvf $3.tar.gz $4
и zip.php
PHP:
<?
$dir = dirname (__FILE__);
$passwd = '123456';
$arch_name = 'archive';
$arch_dir_name = 'test';
exec("$dir/archzip.sh $dir $passwd $arch_name $arch_dir_name");
?>
помещаю их в одну папку, запускаю zip.php
archive.tar.gz создается, а archive.zip - нет
 

y0r1c

Новичок
да, нет, архив это нормально, но мне нужен не просто архив, а запароленый архив, а его может сделать только ZIP, а он не хочет %(

-~{}~ 09.06.06 15:08:

кстати, интересно получается, если запускать zip.php прямо в шеле, то все работает, если в браузере, то нет...
 

chisto_tolyan

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

y0r1c

Новичок
archzip.sh
Код:
#!/bin/sh
cd $1
zip -r -P $2 -b $1 $3.zip $4
zip.php
PHP:
<?
$dir = dirname (__FILE__);
$passwd = '123456';
$arch_name = 'archive';
$arch_dir_name = 'test';
exec("$dir/archzip.sh $dir $passwd $arch_name $arch_dir_name");
?>
насколько я понял, параметр -b позваляет переназначить временную папку, но всеравно не работает :(
 

chisto_tolyan

Враг народа
хз...пинай админа, эт его работа разбиратся почему из консоли работает, а из скрипта нет))
 

SiMM

Новичок
y0r1c, ну давай сюда админские логи/пароли и IP ;)
Гадать долго можно - кстати, почему до сих пор ты причину не выяснил? Консольные приложения - они, как правило выдают в консоль результат, объясняющий причины ошибок.
 

y0r1c

Новичок
дак в том и прикол, что если запускаешь скрипт с консоли, то он работает без проблем, и не выдает никаких ошибок, а если запускаешь с браузера, то тогда он ничего не делает, ну zip... tar и gzip работают... но и ошибок не выдает, тоесть в логах пусто

-~{}~ 10.06.06 15:34:

вобщем мне интересна разница между исполнением команды
Код:
zip -r -P 123456 -b ./tmp archive.zip archdir
в шеле и исполнением PHP скрипта
PHP:
<?
exec('zip -r -P 123456 -b ./tmp archive.zip archdir');
?>
я так понимаю, что разница в правах, тоесть если мы вополняем команду в шеле, то она выполняется от определенного пользователя, а если выполняем при помощи запуска PHP сценирия, то тогда у нас нет доступа к папкам уровнем выше, чем корневая папка тоесть, если корневая папка домена имеет абсолютный путь
/usr/local/psa/home/vhosts/мой_домен/httpdocs/

то у PHP нет доступка в папка /usr например, но тогда постает вопрос, почему даже используя временную папку к которой доступ есть, скрипт не работает

-~{}~ 10.06.06 15:35:

ЗЫ: говорили мне сисаднимы: "изучай ты *nix-ы"... не полушал, а зря :(, теперь нужно нагонять, а тогда времени было гораздо больше
 

SiMM

Новичок
> тоесть в логах пусто
Смотреть надо не логи, а то что возвращает команда system
PHP:
echo system('zip -r -P 123456 -b ./tmp archive.zip archdir');
 
Сверху