<?php
/////////////////////////////////////
// Класс для получения инфы из jar //
/////////////////////////////////////
require 'PclZip.php';
class JarInfo{
private $mimetype;
private $manifest = array();
private $info = array();
private $file;
// Констуктор...
public function __construct($file){
// $file - путь до файла.
is_file($file) or die ("Файл: $file не существует.");
$archive = new PclZip($file);
$this->file = $file;
$this->manifest = $archive->extract(PCLZIP_OPT_BY_NAME, 'META-INF/MANIFEST.MF', PCLZIP_OPT_EXTRACT_AS_STRING);
$this->parse();
}
// Разбираем манифест
private function parse(){
$man = explode("\n", trim($this->manifest[0]['content']));
foreach($man as $mani){
$ar = explode(': ', $mani);
$this->info[$ar[0]] = $ar[1];
}
}
// Версия
public function getVersion(){
if($this->info['MIDlet-Version'])
return $this->info['MIDlet-Version'];
else
return false;
}
// Имя
public function getName(){
if($this->info['MIDlet-Name'])
return $this->info['MIDlet-Name'];
else
return false;
}
// Производитель
public function getVendor(){
if($this->info['MIDlet-Vendor'])
return $this->info['MIDlet-Vendor'];
else
return false;
}
// Профиль
public function getProfile(){
if($this->info['MicroEdition-Profile'])
return $this->info['MicroEdition-Profile'];
else
return false;
}
// URL
public function getUrl(){
if($this->info['MIDlet-Info-URL'])
return $this->info['MIDlet-Info-URL'];
else
return false;
}
// Получить иконку
public function getIcon($save_as){
$icon = trim(substr($this->info['MIDlet-1'], $pos = strpos($this->info['MIDlet-1'], ',')+1, strrpos($this->info['MIDlet-1'], ',')-$pos));
$icon = preg_replace('#^/#', null, $icon);
$archive = new PclZip($this->file);
$list = $archive->extract(PCLZIP_OPT_BY_NAME, $icon, PCLZIP_OPT_EXTRACT_AS_STRING);
if(pathinfo($icon, PATHINFO_EXTENSION) == 'png' && $list[0]['content'] !== '' && @$image = imagecreatefromstring($list[0]['content'])){
$width = imagesx($image);
$height = imagesy($image);
$x_ratio = 16/$width;
$y_ratio = 16/$height;
if(($width<=16)&&($height<=16)){
$tn_width = $width;
$tn_height = $height;
}elseif (($x_ratio*$height)<16){
$tn_height = ceil($x_ratio*$height);
$tn_width = 16;
}else{
$tn_width = ceil($y_ratio*$width);
$tn_height = 16;
}
$image_two = ImageCreate($tn_width, $tn_height);
imagecopyresampled($image_two, $image, 0, 0, 0, 0, $tn_width, $tn_height, $width, $height);
imagepng($image_two, $save_as);
imagedestroy($image);
return true;
}else{
return false;
}}
// Получить JAD
public function getJad($url){
$siz = filesize($this->file);
$jad = str_ireplace('.jar','.jad',$this->file);
$f = fopen($jad,'w+');
fputs($f, $this->manifest[0]['content']."\n".'MIDlet-Jar-Size: '.$siz."\n".'MIDlet-Jar-URL: '.$url);
fclose($f);
}
// Установка мини описания
public function setDesсription($value){
$this->info['MIDlet-Desсription'] = $value;
}
// Установка инфы при удалении
public function setDeleteConfirm($value){
$this->info['MIDlet-Delete-Confirm'] = $value;
}
// Установка имени
public function setName($value){
$this->info['MIDlet-Name'] = $value;
}
// Установка URL
public function setUrl($value){
$this->info['MIDlet-Info-URL'] = $value;
}
// Сохранение манифеста и упаковка в приложение
public function saveManifest(){
//TODO:Попытаться разобраться почему ява получается хреновой после перепаковки
$man_string = '';
foreach($this->info as $key=>$val){
$man_string = $man_string.$key.': '.$val.'
';
}
$man_string = iconv("UTF-8", "windows-1251", $man_string);
//$zip = new ZipArchive;
//$zip->open($this->file) or die('Неудалось открыть приложение!');
//$zip->addFile('java/META-INF/MANIFEST.MF', 'META-INF/MANIFEST.MF');
//$zip->close();
//$archive = new PclZip($this->file);
//$archive->extract(PCLZIP_OPT_PATH, 'java') or die ('Неудалось распаковать приложение!');
//$manfile = fopen('java/META-INF/MANIFEST.MF', "w") or die ('Неудалось открыть манифест!');
//fwrite($manfile, $man_string);
//fclose($manfile);
//$archive->create('java', PCLZIP_OPT_REMOVE_PATH, 'java');
//unlink('cache/META-INF/MANIFEST.MF');
}
}