Id нравится иметь возможность генерировать crx-файл с PHP.
Crx-файл – это zip-файл с дополнительным заголовком, а Im – потерянный способ создания этого заголовка. Я могу создать crx-файл, если я использую pregenerated pem file, но это приводит ко всем crx-файлам с одинаковым идентификатором расширения, и это плохо. Вот ссылка на то, что у меня было до сих пор …..
http://valorsolo.com/index.php?page=Viewing%20Message&id=1472&pagenum=2#1500
Incase это помогает это было сделано в Python, и есть отличная запись в блоге на мельчайших деталях здесь ….
http://blog.roomanna.com/12-12-2010/packaging-chrome-extensions
и есть некоторые ссылки на другой код по теме …..
http://code.google.com/chrome/extensions/crx.html
http://code.google.com/p/crx-packaging/source/browse/trunk/packer.py
https://github.com/bellbind/crxmake-python/blob/master/crxmake.py
http://www.curetheitch.com/projects/buildcrx/
Этот рубиновый код был полезен.
Ваш открытый ключ должен быть в формате DER, и, к сожалению, расширение OpenSSL для PHP не может это сделать, насколько я могу судить. Мне пришлось сгенерировать его из моего личного ключа в командной строке:
openssl rsa -pubout -outform DER < extension_private_key.pem > extension_public_key.pub
UPDATE : существует функция PHP der2pem (), доступная здесь , благодаря tutuDajuju для указания ее.
Как только это будет сделано, создание файла .crx довольно просто:
# make a SHA1 signature using our private key $pk = openssl_pkey_get_private(file_get_contents('extension_private_key.pem')); openssl_sign(file_get_contents('extension.zip'), $signature, $pk, 'sha1'); openssl_free_key($pk); # decode the public key $key = base64_decode(file_get_contents('extension_public_key.pub')); # .crx package format: # # magic number char(4) # crx format ver byte(4) # pub key lenth byte(4) # signature length byte(4) # public key string # signature string # package contents, zipped string # # see http://code.google.com/chrome/extensions/crx.html # $fh = fopen('extension.crx', 'wb'); fwrite($fh, 'Cr24'); // extension file magic number fwrite($fh, pack('V', 2)); // crx format version fwrite($fh, pack('V', strlen($key))); // public key length fwrite($fh, pack('V', strlen($signature))); // signature length fwrite($fh, $key); // public key fwrite($fh, $signature); // signature fwrite($fh, file_get_contents('extension.zip')); // package contents, zipped fclose($fh);
Формат CRX подробно описан на странице документации: http://code.google.com/chrome/extensions/crx.html
В конце этого файла есть примеры для Ruby и Bash. Следуйте за форматом на вашем языке (PHP).
Вы можете использовать рабочее PHP-решение: https://github.com/andyps/crxbuild. Существует класс PHP, который вы можете включить в свой проект и сценарий командной строки.