-
Вебмастеру
(
http://forum.oszone.net/forumdisplay.php?f=22)
slonick2012@vk |
05-05-2012 12:26 1910926 |
Редактирование java *.class в php
Помогите, мне нужно открыть один файл с расширением *.class в нем изменить одно значение и сохранить его. Кто знает какие нужны функции и вообще что за код получится.
|
slonick2012@vk |
05-05-2012 12:46 1910932 |
|
так вам надо изменить значение или сделать как в примере?
|
slonick2012@vk |
05-05-2012 12:57 1910938 |
ferget, Ну в примере изменяет значение и генерирует новый файл class, дайте код хоть как в примере, а я дальше сам как-то разберусь.
|
slonick2012@vk |
06-05-2012 10:59 1911382 |
Ну что никто не знает?
|
slonick2012@vk |
07-05-2012 12:57 1911867 |
:help:
|
а вам обязательно на php?
|
slonick2012@vk |
07-05-2012 13:29 1911884 |
ferget, да, мне для онлайн конструктора одного приложения
|
slonick2012@vk |
07-05-2012 14:09 1911907 |
ferget, эту функцию я видел, но как использовать я не знаю, можете если я вам дам файл class Вы мне код напишете для изменения одного значения?
|
выкладывайте файл, посмотрю
|
slonick2012@vk |
07-05-2012 15:01 1911929 |
Вложений: 1
Вот файл
|
вот простейший вариант
Код:
<?php
$fh = fopen("cf81243.class", "rb");
$data = fread($fh, 98);
fseek($fh, 101);
$data1 = fread($fh, filesize("cf81243.class"));
fclose($fh);
$ms='FFAA00';
$binarydata = pack("H" . 6, $ms);
$fdata=$data.$binarydata.$data1;
$fp = fopen("cf.class", "a");
fwrite($fp,$fdata);
fclose($fp);
?>
|
slonick2012@vk |
08-05-2012 09:43 1912339 |
Это значение которое заменяет?
|
Цитата:
Цитата slonick2012@vk
Это значение которое заменяет? »
|
Да
в .html
Код:
<input type=text size=6 name=b>
в .php
|
slonick2012@vk |
08-05-2012 16:30 1912565 |
Так там много значений, как оно поймет что надо изменить определенное значение?
|
slonick2012@vk |
08-05-2012 16:46 1912574 |
Для выполнения данного скрипта не хватает памяти, что делать? Тестировал его на денвере
|
не совсем понятен вопрос
в html текстовое поле на 6 символов
php скрипт принимает текст и создает файл
|
slonick2012@vk |
08-05-2012 16:58 1912580 |
Да а как она в тексте заменить мне нужное значение? После сохранения файл не работает
|
Вложений: 1
я тоже проверяю на денвере вроде работает
вот html и php файлы
|
slonick2012@vk |
08-05-2012 17:42 1912609 |
А как узнать количество отступов до того или иного значения? там ведь ничего не понятно, а то я вижу в коде Вы использовали перейти к 101 символу
|
Цитата:
Цитата slonick2012@vk
в коде Вы использовали перейти к 101 символу »
|
сперва считываются 98 байт, затем от 102 до конца файла, при записи не достающие байты заменяются
Цитата:
Цитата slonick2012@vk
А как узнать количество отступов до того или иного значения »
|
в данном случае я взял два файла с того сайта и в hex-редакторе посмотрел где различаются
еще можете попробовать программу artmoney
|
slonick2012@vk |
08-05-2012 20:10 1912693 |
ferget, огромное тебе человеческое спасибо за код, все работает вот только приложение после замены файла не работает
ferget, все работает, в папку просто положил не рабочий файл class, у меня последний вопрос как ты считал порядковый номер символа в hex-редакторе?
|
Вложений: 1
вот, например, winhex 55-ый байт, счет должен быть в десятичной системе
|
slonick2012@vk |
08-05-2012 22:24 1912782 |
ferget, А как на счет A,B,C,...?
|
slonick2012@vk |
08-05-2012 22:44 1912795 |
ferget, Ну у меня в winhex значение которое нужно заменить имеет к примеру порядковый номер 1B как его считать?
|
кликните мышью в графе offset он переключится в десятичную систему
|
slonick2012@vk |
08-05-2012 23:06 1912810 |
ferget, Огромное спасибо, теперь можно дальше работать
|
slonick2012@vk |
09-05-2012 00:27 1912843 |
ferget, Что-то я начудил размер файла увеличился аж на 20кб
|
slonick2012@vk |
09-05-2012 01:09 1912855 |
Где здесь ошибка?
PHP код:
$cf = fopen("cf.class", "rb"); $data = fread($cf, 17); fseek($cf, 20); $data2 = fread($cf, 22); fseek($cf, 25); $data3 = fread($cf, 27); fseek($cf, 30); $data4 = fread($cf, 32); fseek($cf, 35); $data5 = fread($cf, 37); fseek($cf, 40); $data6 = fread($cf, 52); fseek($cf, 55); $data7 = fread($cf, 97); fseek($cf, 100); $data8 = fread($cf, filesize("cf.class")); fclose($cf);
|
slonick2012@vk |
09-05-2012 02:44 1912879 |
ferget, Уже сделал
|
тут слишком много раз читается файл, причем 4 раза считывается одно и тоже число 03 00, лучше оставить два чтения файла, а остальное самому записать в переменные
|
slonick2012@vk |
09-05-2012 03:47 1912886 |
ferget, Вопрос, как в файл класс записать например значение "123456"? Это уже не hex
ferget, Но текст нужно как-то запаковать что бы все работало
|
slonick2012@vk |
09-05-2012 04:07 1912888 |
ferget, Так 123456 я смог вставить, а вот символы №; и чтоб работало не могу
|
Цитата:
Цитата slonick2012@vk
а вот символы №; и чтоб работало не могу »
|
подробнее опишите
|
slonick2012@vk |
09-05-2012 12:11 1912985 |
Вложений: 1
Давайте я вам дам файл класс другой в нем будет слово "this", вот его и нужно будет заменить на какие-то символы ну к примеру на "®*©«»¶¦¬°І±^·µ™ЇҐ†Љџ"
|
файл бинарный и this на самом деле это 74 69 69 73
и чтобы заменить, надо посмотреть как эта строка "®*©«»¶¦¬°І±^·µ™ЇҐ†Љџ" выглядит в hex-редакторе
|
slonick2012@vk |
09-05-2012 20:12 1913171 |
Так это пример символов, а если будут другие... короче это реально что бы их скрипт паковал ну также как значения цветов или нет?
|
slonick2012@vk |
09-05-2012 23:55 1913194 |
ferget, Все есть у меня нужный код. Спасибо за помощь!
|
slonick2012@vk |
10-05-2012 01:34 1913210 |
ferget, :( Нет код немного не работает, Не правильно записывает значение, в hex оно верно, а в utf-8 нет. вот код
PHP код:
<?php $mod = $_GET["mod"]; switch($mod) { case false: default: echo ' <form action="?mod=result1" method="post"> <input name="c1" value="1" type="checkbox"> <input size="6" name="bb1" type="text"><br><br> <input style="margin-top: 5px;" value="дальше »" type="submit"><br> </form> </body></html>';
break; case result1:
function ascii2hex($ascii) { if ($_POST['c1'] == '') $bb1 = 'ав'; if ($_POST['c1'] == '1') $bb1 = $_POST['bb1']; $ascii = $bb1; $hex = ''; for ($i = 0; $i < strlen($ascii); $i++) { $byte = strtoupper(dechex(ord($ascii{$i}))); $byte = str_repeat('0', 2 - strlen($byte)).$byte; $hex.=$byte." "; } return $hex; } $source_column2 = ascii2hex($source_column1); $patterns[0] = "/ /"; $replacements[0] = ""; $binary = preg_replace($patterns, $replacements, $source_column2); echo $binary;
$fd = fopen("fd.class", "rb"); $data = fread($fd, 316); fseek($fd, 317); $data2 = fread($fd, filesize("fd.class")); fclose($fd);
$bb1 = $_POST['bb1']; $test = strlen($bb1); $test1 = $test/2; if ($test1 <= 9) {$zero = '0'; $test2 = $zero.$test1;} else {$test2 = $test1;} $binary2 = pack("H" . 2, $test2); $binary1 = pack("H" . $test, $binary);
$rand = "class/fd.class"; $fd = fopen("$rand", "w"); $fdata = $data.$binary2.$binary1.$data2; fwrite($fd,$fdata); fclose($fd); break;} ?>
Английские буквы записываются нормально
|
подробнее опишите, какие именно значения вы записываете, что получается, что должно получится
|
slonick2012@vk |
10-05-2012 08:46 1913270 |
ferget, Ну вот когда записываю русский символ или какой-то иной символ (№%?...), в hex смотрю там все нормально, закидываю этот файл в игру, там выдает ошибку "Bad utf8 string"
|
проверьте как записывается
вот знак № в utf8 EF BB BF E2 84 96
|
slonick2012@vk |
10-05-2012 12:29 1913353 |
А в hex № B9, вот как его записать чтобы работало? Если просто В9 записать то ошибка.
|
slonick2012@vk |
10-05-2012 12:55 1913372 |
ferget, Вот в java classe он записывается иначе вот код для перекодирования, а мне получается нужен обратный код, сможете сделать?
$s='\u041f\u0440\u0435\u0432\u0435\u0434 \u041a\u0440\u0435\u0432\u0435\u0434\u043a\u043e!';
//чтобы перекодировать в нормальный вид можно пошаманить вот так
echo preg_replace('#\\\\u([0-9a-f]{4})#se','iconv("UTF-16BE","UTF-8",pack("H4","$1"))',$s);
|
slonick2012@vk |
10-05-2012 13:31 1913394 |
ferget, Символ № что бы работал нужно записать так в„– , не знаете как его так перекодировать?
ferget, Уже сделал скрипт конечно большой получился.
|
Время: 09:23.
© OSzone.net 2001-