2011-02-16 2 views
5

PHP로 crx 파일을 생성 할 수 있기를 원합니다.PHP로 Google 크롬 Crx 파일 만들기

crx 파일은 추가 헤더가있는 zip 파일이며이 헤더를 만드는 방법을 잃어버린 Im입니다. 미리 생성 된 pem 파일을 사용하면 crx 파일을 만들 수 있지만 같은 확장명을 가진 모든 crx 파일로 연결되는데 이것은 좋지 않습니다. Heres는 필자가 지금까지 무엇을 가지고에 대한 링크 ..... 그것은이 파이썬에서 수행되었으며, 여기에 미세한 세부 사항에 우수 블로그 게시물이 도움 넣다
http://valorsolo.com/index.php?page=Viewing%20Message&id=1472&pagenum=2#1500

....
http://blog.roomanna.com/12-12-2010/packaging-chrome-extensions
주제에 다른 코드에 과를 heres 몇 가지 링크 .....
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/

답변

2

CRX 형식은 문서 페이지에 자세히 설명되어 있습니다 : http://code.google.com/chrome/extensions/crx.html

는 루비와 배쉬에 대한 해당 파일의 끝 부분에 대한 예제가 있습니다. 귀하의 언어로 된 형식을 따르십시오 (PHP).

+0

내가 할 수 있다면 도움을 청하지는 않을 것이다.) 그 링크를 올려 주셔서 감사합니다. 그 중 하나를 잊어 버렸습니다 .... 그리고 그것을 읽었습니다. (여러 번) 그것은 저를 조금 넘어서 왔습니다. . – PAEz

3

ruby code이 도움이되었습니다.

당신의 공개 키는 DER 형식이어야하며, 안타깝게도 PHP의 OpenSSL 확장으로는 그렇게 할 수 없습니다. 나는 명령 줄에서 내 개인 키에서 발생했다 :

openssl rsa -pubout -outform DER <extension_private_key.pem> extension_public_key.pub 

UPDATE : 그것을 지적 tutuDajuju에 PHP의 der2pem() 함수 available here, 감사가 있습니다. https://github.com/andyps/crxbuild이 프로젝트와 명령 줄 스크립트에 포함 할 수있는 PHP 클래스가 있습니다 :

# 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); 
+0

귀하의 의견을 주셔서 감사합니다하지만 그건 꽤 많이 allready 할 수 있습니다. 이것은 우편 번호를 정상적으로 서명 할 것입니다. 그러나 위에 언급했듯이 모든 확장은 이상적인 것과 멀리 떨어져있는 동일한 확장 ID를 갖습니다. 고마워요 tho. . – PAEz

+2

정말 나쁜 것입니까? 매니페스트 파일에서 해당 ID를 사용하여 업데이트를 확인합니다. 각 빌드마다 ID가 변경되면 Chrome은 확장 프로그램에 대한 업데이트를 보지 못합니다. PHP의 Open SSL 함수는 .pem 형식을 사용하므로 http://code.google.com/chrome/extensions/autoupdate.html –

+0

을 참조하십시오. 함수를 사용하여 .pem을 .der 형식 또는 그 반대로 변환 할 수 있습니다. 참조 : http://www.php.net/manual/en/ref.openssl.php#74188. 원한다면 모든 생성에 새 키를 생성 한 다음 고유 한 ID를 얻을 수도 있습니다. 그런 다음 키를 저장하고 공개 키의 해시 (ID 여야 함)를 가져 와서 둘 다 저장 및 업데이트의 동적 시스템을 만듭니다. – tutuDajuju

2

당신은 작업 PHP 솔루션을 사용할 수 있습니다 :이 작업이 일단

는 .crx로 파일을 구축하는 것은 매우 쉽습니다 .